[libcamera-devel] [PATCH 1/1] ipa: rkisp1: Take into account color temperature during LSC algorithm
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Sep 26 10:07:44 CEST 2022
Hi Florian,
On Mon, Sep 26, 2022 at 09:35:17AM +0200, Florian Sylvestre wrote:
> On Thu, 22 Sept 2022 at 13:36, Laurent Pinchart wrote:
> > On Tue, Sep 20, 2022 at 10:36:50PM +0200, Jacopo Mondi wrote:
> > > On Tue, Sep 06, 2022 at 06:12:17PM +0200, Florian Sylvestre via libcamera-devel wrote:
> > > > Add coefficients sets in the YAML tuning file to allow using different set
> > > > depending of the image color temperature (provided by AWB algorithm).
> > > >
> > > > During processing, LSC algorithm computes coefficients by doing a linear
> > > > interpolation between the two closer set.
> > >
> > > As a general question and looking at the implemenation, do we want to
> > > go through copying tables and interpolation every frame ? Shouldn't we
> > > aim instead to re-run it only when the color temperature changes
> > > significnalty enough (with significantly to be defined) ?
> >
> > That could be useful indeed, although the interpolation is relatively
> > cheap at this point. Florian, could you share the measurements you made
> > related to the CPU time consumed by the LSC calculations ?
>
> I have measured the computation time at an average 135us on an Imx8Mp board.
>
> > > Or is there such a mechanism in place already and I've missed it ?
> > >
> > > Another thing to consider is that since interpolation might be
> > > expensive, if the color temperature is close enough to one of the
> > > available entries, we might want to use that entry directly. This is
> > > even more relevant when you have sparse temperatures in your set.
> > > In your ov5640 tuning file the available color temperatures are 3000
> > > and 7000. If the current color temperature is 3100 is it worth
> > > interpolating with the 7000-set which is quite distant ? I guess to
> > > answer these question one should actually perform some tuning tests
> > > and verify how the color temperature distance impacts the resulting
> > > tables...
> >
> > It's an interesting idea, but I would be cautious with too much early
> > optimization, the calculation may not be costly. This is especially true
> > if we implement a hysteresis on the colour temperature.
> >
> > > > Signed-off-by: Florian Sylvestre <fsylvestre at baylibre.com>
> > > > ---
> > > > src/ipa/rkisp1/algorithms/lsc.cpp | 170 ++++++++++++++++------
> > > > src/ipa/rkisp1/algorithms/lsc.h | 21 ++-
> > > > src/ipa/rkisp1/data/ov5640.yaml | 231 ++++++++++++++++++++----------
> > > > 3 files changed, 300 insertions(+), 122 deletions(-)
> > > >
> > > > diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > index da287ac7..f0930e95 100644
> > > > --- a/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > +++ b/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > @@ -105,14 +105,39 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,
> > > > if (xSize_.empty() || ySize_.empty())
> > > > return -EINVAL;
> > > >
> > > > - rData_ = parseTable(tuningData, "r");
> > > > - grData_ = parseTable(tuningData, "gr");
> > > > - gbData_ = parseTable(tuningData, "gb");
> > > > - bData_ = parseTable(tuningData, "b");
> > > > -
> > > > - if (rData_.empty() || grData_.empty() ||
> > > > - gbData_.empty() || bData_.empty())
> > > > + /* Get all defined sets to apply. */
> > > > + const YamlObject &yamlSets = tuningData["sets"];
> > > > + if (!yamlSets.isList()) {
> > > > + LOG(RkISP1Lsc, Error)
> > > > + << "'sets' parameter not found in tuning file";
> > > > return -EINVAL;
> > > > + }
> > > > +
> > > > + double lastCt = -1;
> > >
> > > why a double ?
> > >
> > > > +
> > > > + for (std::size_t i = 0; i < yamlSets.size(); ++i) {
> > > > + const YamlObject &yamlSet = yamlSets[i];
> > >
> > > Would be sweet if we could use utils::enumerate() and make this
> > >
> > > for (const auto &[i, yamlSet] : utils::enumerate(yamlsSets)) {
> > >
> > > but YamlObject is not enumerable (yet). Should be easy to add in
> > > facts (ofc not a request for this patch)
> >
> > YamlObject isn't (by design), but YamlObject::asList() and
> > YamlObject::asDict() are enumerable.
> >
> > const auto &sets = yamlSets.asList();
> > for (const auto &[i, yamlSet] : utils::enumerate(sets)) {
> >
> > You need the intermediate variable until
> > https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2012r2.pdf
> > gets approved, integrated in a new C++ release, and we move to that C++
> > version (a.k.a. in a long time).
>
> Laurent, so what is your preferred version? The one you suggested?
I like utils::enumerate() personally, but if you think it's less
readable here due to the intermediate local variable, I don't mind
either way.
> > > > +
> > > > + sets_.push_back({});
> > > > + componentsData &set = sets_.back();
> > > > +
> > > > + set.ct = yamlSet["ct"].get<uint16_t>(0);
> > > > + if (set.ct <= lastCt) {
> > > > + LOG(RkISP1Lsc, Error)
> > > > + << "Entries in 'sets' must be in increasing ct order";
> > > > + return -EINVAL;
> > > > + }
> > > > + lastCt = set.ct;
> >
> > This could also be moved after the loop with
> >
> > if (!std::is_sorted(sets_.begin(), sets_.end(),
> > [](const auto &a, const auto &b) { return a.ct < b.ct; })) {
> > LOG(RkISP1Lsc, Error)
> > << "Entries in 'sets' must be in increasing ct order";
> > return -EINVAL;
> > }
> >
> > (You need to include <algorithm>)
> >
> > > > +
> > > > + set.r = parseTable(yamlSet, "r");
> > > > + set.gr = parseTable(yamlSet, "gr");
> > > > + set.gb = parseTable(yamlSet, "gb");
> > > > + set.b = parseTable(yamlSet, "b");
> > > > +
> > > > + if (set.r.empty() || set.gr.empty() ||
> > > > + set.gb.empty() || set.b.empty())
> > > > + return -EINVAL;
> > > > + }
> > > >
> > > > initialized_ = true;
> > > >
> > > > @@ -125,56 +150,119 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,
> > > > int LensShadingCorrection::configure(IPAContext &context,
> > > > [[maybe_unused]] const IPACameraSensorInfo &configInfo)
> > > > {
> > > > - context.configuration.lsc.enabled = initialized_;
> > > > - return 0;
> > > > -}
> > > > -
> > > > -/**
> > > > - * \copydoc libcamera::ipa::Algorithm::prepare
> > > > - */
> > > > -void LensShadingCorrection::prepare(IPAContext &context,
> > > > - rkisp1_params_cfg *params)
> > > > -{
> > > > - if (context.frameContext.frameCount > 0)
> > > > - return;
> > > > -
> > > > - if (!initialized_)
> > > > - return;
> > > > -
> > > > - struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> > > > const Size &size = context.configuration.sensor.size;
> > > > Size totalSize{};
> > > >
> > > > for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE; ++i) {
> > > > - config.x_size_tbl[i] = xSize_[i] * size.width;
> > > > - config.y_size_tbl[i] = ySize_[i] * size.height;
> > > > + x_[i] = xSize_[i] * size.width;
> > > > + y_[i] = ySize_[i] * size.height;
> > > >
> > > > /*
> > > > - * To prevent unexpected behavior of the ISP, the sum of x_size_tbl and
> > > > - * y_size_tbl items shall be equal to respectively size.width/2 and
> > > > - * size.height/2. Enforce it by computing the last tables value to avoid
> > > > - * rounding-induced errors.
> > > > - */
> > > > + * To prevent unexpected behavior of the ISP, the sum of x_size_tbl and
> > > > + * y_size_tbl items shall be equal to respectively size.width/2 and
> > > > + * size.height/2. Enforce it by computing the last tables value to avoid
> > > > + * rounding-induced errors.
> > > > + */
> >
> > Wrong indentation.
> >
> > > > if (i == RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE - 1) {
> > > > - config.x_size_tbl[i] = size.width / 2 - totalSize.width;
> > > > - config.y_size_tbl[i] = size.height / 2 - totalSize.height;
> > > > + x_[i] = size.width / 2 - totalSize.width;
> > > > + y_[i] = size.height / 2 - totalSize.height;
> > > > }
> > > >
> > > > - totalSize.width += config.x_size_tbl[i];
> > > > - totalSize.height += config.y_size_tbl[i];
> > > > + totalSize.width += x_[i];
> > > > + totalSize.height += y_[i];
> > > >
> > > > - config.x_grad_tbl[i] = std::round(32768 / config.x_size_tbl[i]);
> > > > - config.y_grad_tbl[i] = std::round(32768 / config.y_size_tbl[i]);
> > > > + xGrad_[i] = std::round(32768 / x_[i]);
> > > > + yGrad_[i] = std::round(32768 / y_[i]);
> > > > }
> > > >
> > > > - std::copy(rData_.begin(), rData_.end(),
> > > > + context.configuration.lsc.enabled = initialized_;
> > >
> > > I would check if initialized_ at the very beginning and exit if not
> > > true
> > >
> > > > + return 0;
> >
> > Moving the gradient calculation from prepare() to configure() is a good
> > change, but it's not even mentioned in the commit message. I'd split
> > this to its own patch, going first in the series.
> >
> > > > +}
> > > > +
> > > > +void LensShadingCorrection::copyTable(rkisp1_params_cfg *params, const int index)
> >
> > You can pass rkisp1_cif_isp_lsc_config instead of rkisp1_params_cfg to
> > this function. I would also make it a reference instead of a pointer as
> > it can't be null.
> >
> > I'd also pass a const reference to the set instead of the index.
> >
> > > > +{
> > > > + componentsData_t &set = sets_[index];
> > > > +
> > > > + std::copy(set.r.begin(), set.r.end(),
> > > > ¶ms->others.lsc_config.r_data_tbl[0][0]);
> > > > - std::copy(grData_.begin(), grData_.end(),
> > > > + std::copy(set.gr.begin(), set.gr.end(),
> > > > ¶ms->others.lsc_config.gr_data_tbl[0][0]);
> > > > - std::copy(gbData_.begin(), gbData_.end(),
> > > > + std::copy(set.gb.begin(), set.gb.end(),
> > > > ¶ms->others.lsc_config.gb_data_tbl[0][0]);
> > > > - std::copy(bData_.begin(), bData_.end(),
> > > > + std::copy(set.b.begin(), set.b.end(),
> > > > ¶ms->others.lsc_config.b_data_tbl[0][0]);
> > > > +}
> > > > +
> > > > +/*
> > > > + * Interpolate LSC parameters based on color temperature value.
> > > > + */
> > > > +void LensShadingCorrection::interpolateTable(rkisp1_params_cfg *params, const double ct)
> >
> > Same here for params.
> >
> > > > +{
> > > > + int index = 0;
> > > > + while (ct > sets_[index + 1].ct)
> > > > + index++;
> > > > + double ct0 = sets_[index].ct, ct1 = sets_[index + 1].ct;
> > >
> > > That's risky. I know the caller guarantees that we're not dealing with
> > > the first or, most important here, the last vector entry. But
> > > this is an unbounded loop and the caller might get changed without
> > > considering it.
> > >
> > > I don't have much better ways to propose, as all the ones I have tried
> > > have anyway some assumptions. In example
> > >
> > >
> > > auto set = sets_.begin();
> > > for (; set != sets_.end() - 1; ++set) {
> > > if (set->ct < ct)
> > > break;
> > > }
> > >
> > > componentsData_t &set0 = *(set - 1);
> > > componentsData_t &set1 = *set;
> > >
> > > Won't work for arrays of a single element.
> > >
> > > Anyway, unless something more brilliant can be proposed, I would at
> > > least record that we assume ct is included in the min/max color
> > > temperatures ?
> > >
> > > > +
> > > > + LOG(RkISP1Lsc, Debug)
> > > > + << "ct is " << ct << ", interpolating between "
> > > > + << ct0 << " and " << ct1;
> > > > +
> > > > + componentsData_t &set0 = sets_[index];
> > > > + componentsData_t &set1 = sets_[index + 1];
> > > > +
> > > > + double coeff0 = (ct1 - ct) / (ct1 - ct0);
> > > > + double coeff1 = (ct - ct0) / (ct1 - ct0);
> > > > +
> > > > + for (int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {
> > > > + for (int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {
> > > > + int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;
> >
> > All these variables can be unsigned.
> >
> > > > +
> > > > + params->others.lsc_config.r_data_tbl[i][j] =
> > > > + set0.r[sample] * coeff0 +
> > > > + set1.r[sample] * coeff1;
> > > > +
> > > > + params->others.lsc_config.gr_data_tbl[i][j] =
> > > > + set0.gr[sample] * coeff0 +
> > > > + set1.gr[sample] * coeff1;
> > > > +
> > > > + params->others.lsc_config.gb_data_tbl[i][j] =
> > > > + set0.gb[sample] * coeff0 +
> > > > + set1.gb[sample] * coeff1;
> > > > +
> > > > + params->others.lsc_config.b_data_tbl[i][j] =
> > > > + set0.b[sample] * coeff0 +
> > > > + set1.b[sample] * coeff1;
> > > > + }
> > > > + }
> > > > +}
> > > > +
> > > > +/**
> > > > + * \copydoc libcamera::ipa::Algorithm::prepare
> > > > + */
> > > > +void LensShadingCorrection::prepare(IPAContext &context,
> > > > + rkisp1_params_cfg *params)
> > > > +{
> > > > + if (!initialized_)
> > > > + return;
> > > > +
> > > > + struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> > > > + memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));
> > > > + memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));
> > > > + memcpy(config.x_size_tbl, x_, sizeof(config.x_size_tbl));
> > > > + memcpy(config.y_size_tbl, y_, sizeof(config.y_size_tbl));
> > > > +
> > > > + double ct = context.frameContext.awb.temperatureK;
> > >
> > > Here it's where I would check how much the color temperature has
> > > changed and make choices (before the memcpys of course)
> >
> > As Jacopo mentioned, we shouldn't interpolate if the colour temperate is
> > very close to one of the tables, so I would have a special case here,
> > but write
>
> Just to be makes it clear before implementing it: this 'close' is it something
> that should come from the tuning file? (or hardcoded in the code ? from
> somewhere else?)
> What should I put as a default value?
You can define it as a constant in this file. 1% could be a good value
to start with (a bit randomly).
> >
> > double ct = context.frameContext.awb.temperatureK;
> > ct = std::clamp(ct, sets_.front().ct, sets_.back().ct);
> >
> > /*
> > * Possibly Handle hysteresis here, returning if the value
> > * hasn't changed enough.
> > */
> >
> > struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> >
> > /*
> > * Pick the sets to interpolate between, or if the colour temperate is
> > * close enough to one of the sets, use that set without interpolation.
> > */
> > ...
> >
> > if (...)
> > copyTable(config, set0);
> > else
> > interpolateTable(config, set0, set1, ct);
> >
> > memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));
> > memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));
> > memcpy(config.x_size_tbl, x_, sizeof(config.x_size_tbl));
> > memcpy(config.y_size_tbl, y_, sizeof(config.y_size_tbl));
> >
> > > > + if (ct <= sets_.front().ct) {
> > > > + LOG(RkISP1Lsc, Debug) << "using calibration for "
> > > > + << sets_.front().ct;
> > > > + copyTable(params, 0);
> > > > + } else if (ct >= sets_.back().ct) {
> > > > + LOG(RkISP1Lsc, Debug) << "using calibration for "
> > > > + << sets_.back().ct;
> > > > + copyTable(params, sets_.size() - 1);
> > > > + } else {
> > > > + interpolateTable(params, ct);
> > > > + }
> > > >
> > > > params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h
> > > > index f68602c0..9b1adfd7 100644
> > > > --- a/src/ipa/rkisp1/algorithms/lsc.h
> > > > +++ b/src/ipa/rkisp1/algorithms/lsc.h
> > > > @@ -15,6 +15,14 @@ namespace ipa::rkisp1::algorithms {
> > > >
> > > > class LensShadingCorrection : public Algorithm
> > > > {
> > > > + typedef struct componentsData {
> > >
> > > No need to typedef, and we usually use capital letter for types.
> > > This can be just
> > >
> > > struct Components {
> > >
> > > Nice one, I'm thrilled to test it to see how much it improves the
> > > image quality!
> > >
> > > > + uint16_t ct;
> > > > + std::vector<uint16_t> r;
> > > > + std::vector<uint16_t> gr;
> > > > + std::vector<uint16_t> gb;
> > > > + std::vector<uint16_t> b;
> > > > + } componentsData_t;
> > > > +
> > > > public:
> > > > LensShadingCorrection();
> > > > ~LensShadingCorrection() = default;
> > > > @@ -24,15 +32,18 @@ public:
> > > > void prepare(IPAContext &context, rkisp1_params_cfg *params) override;
> > > >
> > > > private:
> > > > - bool initialized_;
> > > > + void copyTable(rkisp1_params_cfg *params, const int index);
> > > > + void interpolateTable(rkisp1_params_cfg *params, const double ct);
> > > >
> > > > - std::vector<uint16_t> rData_;
> > > > - std::vector<uint16_t> grData_;
> > > > - std::vector<uint16_t> gbData_;
> > > > - std::vector<uint16_t> bData_;
> > > > + bool initialized_;
> > > >
> > > > + std::vector<componentsData_t> sets_;
> > > > std::vector<double> xSize_;
> > > > std::vector<double> ySize_;
> > > > + uint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > + uint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > + uint16_t x_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > + uint16_t y_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> >
> > Maybe xSizes_ and ySizes_ ?
> >
> > > > };
> > > >
> > > > } /* namespace ipa::rkisp1::algorithms */
> > > > diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> > > > index 33a672bc..d80c1655 100644
> > > > --- a/src/ipa/rkisp1/data/ov5640.yaml
> > > > +++ b/src/ipa/rkisp1/data/ov5640.yaml
> > > > @@ -20,82 +20,161 @@ algorithms:
> > > > - LensShadingCorrection:
> > > > x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> > > > y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> > > > - r: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - gr: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - gb: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - b: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > + sets:
> > > > + - ct: 3000
> > > > + r: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + gr: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + gb: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + b: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + - ct: 7000
> > > > + r: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + gr: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + gb: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + b: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > - DefectPixelClusterCorrection:
> > > > fixed-set: false
> > > > sets:
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list