[{"id":25566,"web_url":"https://patchwork.libcamera.org/comment/25566/","msgid":"<20221025015647.GK3874866@pyrite.rasen.tech>","date":"2022-10-25T01:56:47","subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"Hi Florian,\n\nOn Mon, Oct 03, 2022 at 04:23:57PM +0200, Florian Sylvestre via libcamera-devel wrote:\n> Add coefficients sets in the YAML tuning file to allow using different set\n> depending of the image color temperature (provided by AWB algorithm).\n> \n> During processing, LSC algorithm computes coefficients by doing a linear\n> interpolation between the two closer set.\n> \n> Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com>\n> ---\n>  src/ipa/rkisp1/algorithms/lsc.cpp | 146 ++++++++++++++++---\n>  src/ipa/rkisp1/algorithms/lsc.h   |  21 ++-\n>  src/ipa/rkisp1/data/ov5640.yaml   | 231 ++++++++++++++++++++----------\n>  3 files changed, 298 insertions(+), 100 deletions(-)\n> \n> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> index ad64aeb4..421920f3 100644\n> --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> @@ -7,6 +7,7 @@\n>  \n>  #include \"lsc.h\"\n>  \n> +#include <algorithm>\n>  #include <cmath>\n>  #include <numeric>\n>  \n> @@ -89,6 +90,7 @@ static std::vector<uint16_t> parseTable(const YamlObject &tuningData,\n>  }\n>  \n>  LensShadingCorrection::LensShadingCorrection()\n> +\t: lastCt_(0)\n>  {\n>  }\n>  \n> @@ -104,14 +106,36 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,\n>  \tif (xSize_.empty() || ySize_.empty())\n>  \t\treturn -EINVAL;\n>  \n> -\trData_ = parseTable(tuningData, \"r\");\n> -\tgrData_ = parseTable(tuningData, \"gr\");\n> -\tgbData_ = parseTable(tuningData, \"gb\");\n> -\tbData_ = parseTable(tuningData, \"b\");\n> +\t/* Get all defined sets to apply. */\n> +\tconst YamlObject &yamlSets = tuningData[\"sets\"];\n> +\tif (!yamlSets.isList()) {\n> +\t\tLOG(RkISP1Lsc, Error)\n> +\t\t\t<< \"'sets' parameter not found in tuning file\";\n> +\t\treturn -EINVAL;\n> +\t}\n>  \n> -\tif (rData_.empty() || grData_.empty() ||\n> -\t    gbData_.empty() || bData_.empty())\n> +\tconst auto &sets = yamlSets.asList();\n> +\tfor (const auto &[i, yamlSet] : utils::enumerate(sets)) {\n> +\t\tsets_.push_back({});\n> +\t\tComponents &set = sets_.back();\n> +\n> +\t\tset.ct = yamlSet[\"ct\"].get<uint32_t>(0);\n> +\t\tset.r = parseTable(yamlSet, \"r\");\n> +\t\tset.gr = parseTable(yamlSet, \"gr\");\n> +\t\tset.gb = parseTable(yamlSet, \"gb\");\n> +\t\tset.b = parseTable(yamlSet, \"b\");\n> +\n> +\t\tif (set.r.empty() || set.gr.empty() ||\n> +\t\t    set.gb.empty() || set.b.empty())\n> +\t\t\treturn -EINVAL;\n> +\t}\n> +\n> +\tif (!std::is_sorted(sets_.begin(), sets_.end(),\n> +\t    [](const auto &a, const auto &b) { return a.ct < b.ct; })) {\n> +\t\tLOG(RkISP1Lsc, Error)\n> +\t\t\t<< \"Entries in 'sets' must be in increasing ct order\";\n>  \t\treturn -EINVAL;\n> +\t}\n>  \n>  \treturn 0;\n>  }\n> @@ -151,36 +175,122 @@ int LensShadingCorrection::configure(IPAContext &context,\n>  \treturn 0;\n>  }\n>  \n> +void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,\n> +\t\t\t\t      const Components &set)\n> +{\n> +\tstd::copy(set.r.begin(), set.r.end(), &config.r_data_tbl[0][0]);\n> +\tstd::copy(set.gr.begin(), set.gr.end(), &config.gr_data_tbl[0][0]);\n> +\tstd::copy(set.gb.begin(), set.gb.end(), &config.gb_data_tbl[0][0]);\n> +\tstd::copy(set.b.begin(), set.b.end(), &config.b_data_tbl[0][0]);\n> +}\n> +\n> +/*\n> + * Interpolate LSC parameters based on color temperature value.\n> + */\n> +void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> +\t\t\t\t\t     const Components &set0,\n> +\t\t\t\t\t     const Components &set1,\n> +\t\t\t\t\t     const uint32_t ct)\n> +{\n> +\tdouble coeff0 = (set1.ct - ct) / (set1.ct - set0.ct);\n> +\tdouble coeff1 = (ct - set0.ct) / (set1.ct - set0.ct);\n> +\n> +\tfor (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {\n> +\t\tfor (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {\n> +\t\t\tunsigned int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;\n> +\n> +\t\t\tconfig.r_data_tbl[i][j] =\n> +\t\t\t\tset0.r[sample] * coeff0 +\n> +\t\t\t\tset1.r[sample] * coeff1;\n> +\n> +\t\t\tconfig.gr_data_tbl[i][j] =\n> +\t\t\t\tset0.gr[sample] * coeff0 +\n> +\t\t\t\tset1.gr[sample] * coeff1;\n> +\n> +\t\t\tconfig.gb_data_tbl[i][j] =\n> +\t\t\t\tset0.gb[sample] * coeff0 +\n> +\t\t\t\tset1.gb[sample] * coeff1;\n> +\n> +\t\t\tconfig.b_data_tbl[i][j] =\n> +\t\t\t\tset0.b[sample] * coeff0 +\n> +\t\t\t\tset1.b[sample] * coeff1;\n> +\t\t}\n> +\t}\n> +}\n> +\n>  /**\n>   * \\copydoc libcamera::ipa::Algorithm::prepare\n>   */\n> -void LensShadingCorrection::prepare([[maybe_unused]] IPAContext &context,\n> +void LensShadingCorrection::prepare(IPAContext &context,\n>  \t\t\t\t    const uint32_t frame,\n>  \t\t\t\t    [[maybe_unused]] IPAFrameContext &frameContext,\n>  \t\t\t\t    rkisp1_params_cfg *params)\n>  {\n> -\tif (frame > 0)\n> +\tstruct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> +\n> +\t/*\n> +\t * If there is only one set, the configuration has already been done\n> +\t * for first frame.\n> +\t */\n> +\tif ((sets_.size() == 1) && (frame > 0))\n>  \t\treturn;\n>  \n> -\tstruct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> +\tuint32_t ct = context.activeState.awb.temperatureK;\n> +\tct = std::clamp(ct, sets_.front().ct, sets_.back().ct);\n> +\n> +\t/*\n> +\t * Return if the current color temperature value is closed to the\n> +\t * one used for previous computation.\n> +\t */\n> +\tstatic constexpr double kCtThreshold = 0.01;\n> +\tif (utils::abs_diff(ct, lastCt_) < kCtThreshold * lastCt_)\n> +\t\treturn;\n>  \n>  \tmemcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));\n>  \tmemcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));\n>  \tmemcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));\n>  \tmemcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));\n>  \n> -\tstd::copy(rData_.begin(), rData_.end(),\n> -\t\t  &config.r_data_tbl[0][0]);\n> -\tstd::copy(grData_.begin(), grData_.end(),\n> -\t\t  &config.gr_data_tbl[0][0]);\n> -\tstd::copy(gbData_.begin(), gbData_.end(),\n> -\t\t  &config.gb_data_tbl[0][0]);\n> -\tstd::copy(bData_.begin(), bData_.end(),\n> -\t\t  &config.b_data_tbl[0][0]);\n> -\n>  \tparams->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;\n>  \tparams->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;\n>  \tparams->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;\n> +\n> +\t/*\n> +\t * If there is only one set, pick it.\n> +\t */\n> +\tif (sets_.size() == 1) {\n> +\t\tcopyTable(config, sets_[0]);\n> +\t\treturn;\n> +\t}\n> +\n> +\t/*\n> +\t * Pick the sets to interpolate between, or if the colour temperate is\n> +\t * close enough to one of the sets, use that set without interpolation.\n> +\t */\n> +\tint index = 0;\n> +\twhile (ct > sets_[index + 1].ct)\n> +\t\tindex++;\n\nWouldn't this break if the color temperature reported from awb is higher\nthan all color temperatures available in the LSC tuning file?\n\n\nPaul\n\n> +\tComponents &set0 = sets_[index];\n> +\tComponents &set1 = sets_[index + 1];\n> +\tuint32_t ct0 = set0.ct, ct1 = set1.ct;\n> +\n> +\tstatic constexpr double kThreshold = 0.1;\n> +\tif (utils::abs_diff(ct0, ct) < kThreshold * ct0) {\n> +\t\tLOG(RkISP1Lsc, Debug)\n> +\t\t\t<< \"using calibration for \" << ct0;\n> +\t\tcopyTable(config, set0);\n> +\t} else if (utils::abs_diff(ct1, ct) < kThreshold * ct1) {\n> +\t\tLOG(RkISP1Lsc, Debug)\n> +\t\t\t<< \"using calibration for \" << ct1;\n> +\t\tcopyTable(config, set1);\n> +\t} else {\n> +\t\tLOG(RkISP1Lsc, Debug)\n> +\t\t\t<< \"ct is \" << ct << \", interpolating between \"\n> +\t\t\t<< ct0 << \" and \" << ct1;\n> +\t\tinterpolateTable(config, set0, set1, ct);\n> +\t}\n> +\n> +\tlastCt_ = ct;\n>  }\n>  \n>  REGISTER_IPA_ALGORITHM(LensShadingCorrection, \"LensShadingCorrection\")\n> diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h\n> index da81ea53..9c21bca1 100644\n> --- a/src/ipa/rkisp1/algorithms/lsc.h\n> +++ b/src/ipa/rkisp1/algorithms/lsc.h\n> @@ -24,19 +24,28 @@ public:\n>  \tvoid prepare(IPAContext &context, const uint32_t frame,\n>  \t\t     IPAFrameContext &frameContext,\n>  \t\t     rkisp1_params_cfg *params) override;\n> -\n>  private:\n> -\tstd::vector<uint16_t> rData_;\n> -\tstd::vector<uint16_t> grData_;\n> -\tstd::vector<uint16_t> gbData_;\n> -\tstd::vector<uint16_t> bData_;\n> -\n> +\tstruct Components {\n> +\t\tuint32_t ct;\n> +\t\tstd::vector<uint16_t> r;\n> +\t\tstd::vector<uint16_t> gr;\n> +\t\tstd::vector<uint16_t> gb;\n> +\t\tstd::vector<uint16_t> b;\n> +\t};\n> +\n> +\tvoid copyTable(rkisp1_cif_isp_lsc_config &config, const Components &set0);\n> +\tvoid interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> +\t\t\t      const Components &set0, const Components &set1,\n> +\t\t\t      const uint32_t ct);\n> +\n> +\tstd::vector<Components> sets_;\n>  \tstd::vector<double> xSize_;\n>  \tstd::vector<double> ySize_;\n>  \tuint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n>  \tuint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n>  \tuint16_t xSizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n>  \tuint16_t ySizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> +\tuint32_t lastCt_;\n>  };\n>  \n>  } /* namespace ipa::rkisp1::algorithms */\n> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml\n> index 33a672bc..d80c1655 100644\n> --- a/src/ipa/rkisp1/data/ov5640.yaml\n> +++ b/src/ipa/rkisp1/data/ov5640.yaml\n> @@ -20,82 +20,161 @@ algorithms:\n>    - LensShadingCorrection:\n>        x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n>        y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n> -      r:  [\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -          ]\n> -      gr: [\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -          ]\n> -      gb: [\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -          ]\n> -      b:  [\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> -          ]\n> +      sets:\n> +        - ct: 3000\n> +          r:  [\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +              ]\n> +          gr: [\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +              ]\n> +          gb: [\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +              ]\n> +          b:  [\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> +              ]\n> +        - ct: 7000\n> +          r:  [\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +              ]\n> +          gr: [\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +              ]\n> +          gb: [\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +              ]\n> +          b:  [\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> +              ]\n>    - DefectPixelClusterCorrection:\n>        fixed-set: false\n>        sets:\n> -- \n> 2.34.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 21BFABD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 Oct 2022 01:56:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 52FF462F2F;\n\tTue, 25 Oct 2022 03:56:56 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2EDC962EAE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Oct 2022 03:56:55 +0200 (CEST)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 42FB18A9;\n\tTue, 25 Oct 2022 03:56:52 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666663016;\n\tbh=p8S/C3HhE6yZbXvoBEH5F2v6WxKFHgt9YknxMXOvbTE=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=L9dbMXAuIebeNddgFkp3gbbF7I/2MfBAYjFkbaO3jGvDU/K5pj4KorvcLV0JbBsHD\n\t+dCGnAX+3/T+4ZOYLj5Q44qT+c18U32WazgukZ1Ka7YqdU1gCimmxhhT93T3l3lYfg\n\tJElTpuS2KBKBG2iATPeuqcr+d/z0wayrc7N62jlTIQqoNAmtf4OGCm6mt7/KnWULhc\n\tLTdCqspRp5y2XftY12Kcitt4juGS3Q3zmeLP8ioxmZdrVV2RcKHArqCSJ7OFlX/nTL\n\tt1nDggOcMNC95nswWURjzUGIhwhQmYMT1cKD3qHBoOFdaKZKDX7yzcq9fBA8LaB3fl\n\t1im2oPw9dUDWQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666663014;\n\tbh=p8S/C3HhE6yZbXvoBEH5F2v6WxKFHgt9YknxMXOvbTE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=igCGxFE4+ftyRrHmhats8RNpDdnelVBgIJ46BuP3GbPyHX9kfDR6H/BDy9n7ATgR5\n\tXPXMUuukCJwLxyof+YSM8p5MbycRIeQ0s/DufgRs5iOZdxce9HpIidjIn2OXChJOAJ\n\tHEitQ3LKH/Mg7/wMEX2eHnbZnPUr474GPG09lLMo="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"igCGxFE4\"; dkim-atps=neutral","Date":"Tue, 25 Oct 2022 10:56:47 +0900","To":"Florian Sylvestre <fsylvestre@baylibre.com>","Message-ID":"<20221025015647.GK3874866@pyrite.rasen.tech>","References":"<20221003142357.602633-1-fsylvestre@baylibre.com>\n\t<20221003142357.602633-3-fsylvestre@baylibre.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20221003142357.602633-3-fsylvestre@baylibre.com>","Subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25569,"web_url":"https://patchwork.libcamera.org/comment/25569/","msgid":"<CALzBHU6g=B8dCumx-DV7Yg=w5=-tS6VRKwRE=9bVSX9XWnoZgQ@mail.gmail.com>","date":"2022-10-25T07:54:36","subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","submitter":{"id":123,"url":"https://patchwork.libcamera.org/api/people/123/","name":"Florian Sylvestre","email":"fsylvestre@baylibre.com"},"content":"Hello Paul,\n\nOn Tue, 25 Oct 2022 at 03:56, <paul.elder@ideasonboard.com> wrote:\n>\n> Hi Florian,\n>\n> On Mon, Oct 03, 2022 at 04:23:57PM +0200, Florian Sylvestre via libcamera-devel wrote:\n> > Add coefficients sets in the YAML tuning file to allow using different set\n> > depending of the image color temperature (provided by AWB algorithm).\n> >\n> > During processing, LSC algorithm computes coefficients by doing a linear\n> > interpolation between the two closer set.\n> >\n> > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com>\n> > ---\n> >  src/ipa/rkisp1/algorithms/lsc.cpp | 146 ++++++++++++++++---\n> >  src/ipa/rkisp1/algorithms/lsc.h   |  21 ++-\n> >  src/ipa/rkisp1/data/ov5640.yaml   | 231 ++++++++++++++++++++----------\n> >  3 files changed, 298 insertions(+), 100 deletions(-)\n> >\n> > diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > index ad64aeb4..421920f3 100644\n> > --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > @@ -7,6 +7,7 @@\n> >\n> >  #include \"lsc.h\"\n> >\n> > +#include <algorithm>\n> >  #include <cmath>\n> >  #include <numeric>\n> >\n> > @@ -89,6 +90,7 @@ static std::vector<uint16_t> parseTable(const YamlObject &tuningData,\n> >  }\n> >\n> >  LensShadingCorrection::LensShadingCorrection()\n> > +     : lastCt_(0)\n> >  {\n> >  }\n> >\n> > @@ -104,14 +106,36 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,\n> >       if (xSize_.empty() || ySize_.empty())\n> >               return -EINVAL;\n> >\n> > -     rData_ = parseTable(tuningData, \"r\");\n> > -     grData_ = parseTable(tuningData, \"gr\");\n> > -     gbData_ = parseTable(tuningData, \"gb\");\n> > -     bData_ = parseTable(tuningData, \"b\");\n> > +     /* Get all defined sets to apply. */\n> > +     const YamlObject &yamlSets = tuningData[\"sets\"];\n> > +     if (!yamlSets.isList()) {\n> > +             LOG(RkISP1Lsc, Error)\n> > +                     << \"'sets' parameter not found in tuning file\";\n> > +             return -EINVAL;\n> > +     }\n> >\n> > -     if (rData_.empty() || grData_.empty() ||\n> > -         gbData_.empty() || bData_.empty())\n> > +     const auto &sets = yamlSets.asList();\n> > +     for (const auto &[i, yamlSet] : utils::enumerate(sets)) {\n> > +             sets_.push_back({});\n> > +             Components &set = sets_.back();\n> > +\n> > +             set.ct = yamlSet[\"ct\"].get<uint32_t>(0);\n> > +             set.r = parseTable(yamlSet, \"r\");\n> > +             set.gr = parseTable(yamlSet, \"gr\");\n> > +             set.gb = parseTable(yamlSet, \"gb\");\n> > +             set.b = parseTable(yamlSet, \"b\");\n> > +\n> > +             if (set.r.empty() || set.gr.empty() ||\n> > +                 set.gb.empty() || set.b.empty())\n> > +                     return -EINVAL;\n> > +     }\n> > +\n> > +     if (!std::is_sorted(sets_.begin(), sets_.end(),\n> > +         [](const auto &a, const auto &b) { return a.ct < b.ct; })) {\n> > +             LOG(RkISP1Lsc, Error)\n> > +                     << \"Entries in 'sets' must be in increasing ct order\";\n> >               return -EINVAL;\n> > +     }\n> >\n> >       return 0;\n> >  }\n> > @@ -151,36 +175,122 @@ int LensShadingCorrection::configure(IPAContext &context,\n> >       return 0;\n> >  }\n> >\n> > +void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,\n> > +                                   const Components &set)\n> > +{\n> > +     std::copy(set.r.begin(), set.r.end(), &config.r_data_tbl[0][0]);\n> > +     std::copy(set.gr.begin(), set.gr.end(), &config.gr_data_tbl[0][0]);\n> > +     std::copy(set.gb.begin(), set.gb.end(), &config.gb_data_tbl[0][0]);\n> > +     std::copy(set.b.begin(), set.b.end(), &config.b_data_tbl[0][0]);\n> > +}\n> > +\n> > +/*\n> > + * Interpolate LSC parameters based on color temperature value.\n> > + */\n> > +void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> > +                                          const Components &set0,\n> > +                                          const Components &set1,\n> > +                                          const uint32_t ct)\n> > +{\n> > +     double coeff0 = (set1.ct - ct) / (set1.ct - set0.ct);\n> > +     double coeff1 = (ct - set0.ct) / (set1.ct - set0.ct);\n> > +\n> > +     for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {\n> > +             for (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {\n> > +                     unsigned int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;\n> > +\n> > +                     config.r_data_tbl[i][j] =\n> > +                             set0.r[sample] * coeff0 +\n> > +                             set1.r[sample] * coeff1;\n> > +\n> > +                     config.gr_data_tbl[i][j] =\n> > +                             set0.gr[sample] * coeff0 +\n> > +                             set1.gr[sample] * coeff1;\n> > +\n> > +                     config.gb_data_tbl[i][j] =\n> > +                             set0.gb[sample] * coeff0 +\n> > +                             set1.gb[sample] * coeff1;\n> > +\n> > +                     config.b_data_tbl[i][j] =\n> > +                             set0.b[sample] * coeff0 +\n> > +                             set1.b[sample] * coeff1;\n> > +             }\n> > +     }\n> > +}\n> > +\n> >  /**\n> >   * \\copydoc libcamera::ipa::Algorithm::prepare\n> >   */\n> > -void LensShadingCorrection::prepare([[maybe_unused]] IPAContext &context,\n> > +void LensShadingCorrection::prepare(IPAContext &context,\n> >                                   const uint32_t frame,\n> >                                   [[maybe_unused]] IPAFrameContext &frameContext,\n> >                                   rkisp1_params_cfg *params)\n> >  {\n> > -     if (frame > 0)\n> > +     struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> > +\n> > +     /*\n> > +      * If there is only one set, the configuration has already been done\n> > +      * for first frame.\n> > +      */\n> > +     if ((sets_.size() == 1) && (frame > 0))\n> >               return;\n> >\n> > -     struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> > +     uint32_t ct = context.activeState.awb.temperatureK;\n> > +     ct = std::clamp(ct, sets_.front().ct, sets_.back().ct);\n> > +\n> > +     /*\n> > +      * Return if the current color temperature value is closed to the\n> > +      * one used for previous computation.\n> > +      */\n> > +     static constexpr double kCtThreshold = 0.01;\n> > +     if (utils::abs_diff(ct, lastCt_) < kCtThreshold * lastCt_)\n> > +             return;\n> >\n> >       memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));\n> >       memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));\n> >       memcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));\n> >       memcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));\n> >\n> > -     std::copy(rData_.begin(), rData_.end(),\n> > -               &config.r_data_tbl[0][0]);\n> > -     std::copy(grData_.begin(), grData_.end(),\n> > -               &config.gr_data_tbl[0][0]);\n> > -     std::copy(gbData_.begin(), gbData_.end(),\n> > -               &config.gb_data_tbl[0][0]);\n> > -     std::copy(bData_.begin(), bData_.end(),\n> > -               &config.b_data_tbl[0][0]);\n> > -\n> >       params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;\n> >       params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;\n> >       params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;\n> > +\n> > +     /*\n> > +      * If there is only one set, pick it.\n> > +      */\n> > +     if (sets_.size() == 1) {\n> > +             copyTable(config, sets_[0]);\n> > +             return;\n> > +     }\n> > +\n> > +     /*\n> > +      * Pick the sets to interpolate between, or if the colour temperate is\n> > +      * close enough to one of the sets, use that set without interpolation.\n> > +      */\n> > +     int index = 0;\n> > +     while (ct > sets_[index + 1].ct)\n> > +             index++;\n>\n> Wouldn't this break if the color temperature reported from awb is higher\n> than all color temperatures available in the LSC tuning file?\nThere is a 'clamp' function a little bit before:\n'ct = std::clamp(ct, sets_.front().ct, sets_.back().ct);'\nso I think it should not. But perhaps I missed a case?\n>\n>\n> Paul\n>\n> > +     Components &set0 = sets_[index];\n> > +     Components &set1 = sets_[index + 1];\n> > +     uint32_t ct0 = set0.ct, ct1 = set1.ct;\n> > +\n> > +     static constexpr double kThreshold = 0.1;\n> > +     if (utils::abs_diff(ct0, ct) < kThreshold * ct0) {\n> > +             LOG(RkISP1Lsc, Debug)\n> > +                     << \"using calibration for \" << ct0;\n> > +             copyTable(config, set0);\n> > +     } else if (utils::abs_diff(ct1, ct) < kThreshold * ct1) {\n> > +             LOG(RkISP1Lsc, Debug)\n> > +                     << \"using calibration for \" << ct1;\n> > +             copyTable(config, set1);\n> > +     } else {\n> > +             LOG(RkISP1Lsc, Debug)\n> > +                     << \"ct is \" << ct << \", interpolating between \"\n> > +                     << ct0 << \" and \" << ct1;\n> > +             interpolateTable(config, set0, set1, ct);\n> > +     }\n> > +\n> > +     lastCt_ = ct;\n> >  }\n> >\n> >  REGISTER_IPA_ALGORITHM(LensShadingCorrection, \"LensShadingCorrection\")\n> > diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h\n> > index da81ea53..9c21bca1 100644\n> > --- a/src/ipa/rkisp1/algorithms/lsc.h\n> > +++ b/src/ipa/rkisp1/algorithms/lsc.h\n> > @@ -24,19 +24,28 @@ public:\n> >       void prepare(IPAContext &context, const uint32_t frame,\n> >                    IPAFrameContext &frameContext,\n> >                    rkisp1_params_cfg *params) override;\n> > -\n> >  private:\n> > -     std::vector<uint16_t> rData_;\n> > -     std::vector<uint16_t> grData_;\n> > -     std::vector<uint16_t> gbData_;\n> > -     std::vector<uint16_t> bData_;\n> > -\n> > +     struct Components {\n> > +             uint32_t ct;\n> > +             std::vector<uint16_t> r;\n> > +             std::vector<uint16_t> gr;\n> > +             std::vector<uint16_t> gb;\n> > +             std::vector<uint16_t> b;\n> > +     };\n> > +\n> > +     void copyTable(rkisp1_cif_isp_lsc_config &config, const Components &set0);\n> > +     void interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> > +                           const Components &set0, const Components &set1,\n> > +                           const uint32_t ct);\n> > +\n> > +     std::vector<Components> sets_;\n> >       std::vector<double> xSize_;\n> >       std::vector<double> ySize_;\n> >       uint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> >       uint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> >       uint16_t xSizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> >       uint16_t ySizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> > +     uint32_t lastCt_;\n> >  };\n> >\n> >  } /* namespace ipa::rkisp1::algorithms */\n> > diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml\n> > index 33a672bc..d80c1655 100644\n> > --- a/src/ipa/rkisp1/data/ov5640.yaml\n> > +++ b/src/ipa/rkisp1/data/ov5640.yaml\n> > @@ -20,82 +20,161 @@ algorithms:\n> >    - LensShadingCorrection:\n> >        x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n> >        y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n> > -      r:  [\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -          ]\n> > -      gr: [\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -          ]\n> > -      gb: [\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -          ]\n> > -      b:  [\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > -          ]\n> > +      sets:\n> > +        - ct: 3000\n> > +          r:  [\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +              ]\n> > +          gr: [\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +              ]\n> > +          gb: [\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +              ]\n> > +          b:  [\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > +              ]\n> > +        - ct: 7000\n> > +          r:  [\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +              ]\n> > +          gr: [\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +              ]\n> > +          gb: [\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +              ]\n> > +          b:  [\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > +              ]\n> >    - DefectPixelClusterCorrection:\n> >        fixed-set: false\n> >        sets:\n> > --\n> > 2.34.1\n> >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 986C8BDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 Oct 2022 07:54:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E080562F31;\n\tTue, 25 Oct 2022 09:54:49 +0200 (CEST)","from mail-wr1-x435.google.com (mail-wr1-x435.google.com\n\t[IPv6:2a00:1450:4864:20::435])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 247E861F52\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Oct 2022 09:54:48 +0200 (CEST)","by mail-wr1-x435.google.com with SMTP id z14so5933736wrn.7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Oct 2022 00:54:48 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666684489;\n\tbh=rJqj7KfiudGto/65mR1qqQmbLOe6zbdyE8JsSJv/2yA=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=Oegd1Gy58644/g7zNLZ39FpANz6BdeMRwf45ZHFc/KAbVsL2P7Uiy4y6Yyjb3iMHr\n\tXxNrheXCo8jJtEgrOOeHKqfDsSF1IwpIVdw6YyjGL3J8aichxKwKAxCXIMl28J7Hg4\n\txWpKfFhhNW3HPGyPu5ma8atsjSoCldhqYCZJmSy5rQKCnwgG0niYc7O5pP2OybP7ZD\n\t/CAnsCkb+jqvLHhuaeb4VB+UOf1scP//iXWguRqTcygsuf8tGsQJ0yG0yj5wU4p7mm\n\tgmvr05NPHxNy5iXSSm/bje2wyjVwUhxjkV0B4xao2myTkU9zQebVS2rWU19sBqesZ8\n\tJcmorDpGSk5Lg==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=baylibre-com.20210112.gappssmtp.com; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=5h5ecnAPdS25LkLp4bScQ9vfxISoqx35VgKUugxkQnQ=;\n\tb=kRvBvDkvXPFvCi+YnERGZwtI23Z323kITf2k9T/Mok5ruQ5PD/fewJGXD5KYJ0sxm3\n\tvLBEArxLDW1cP6iM+RA+5E3fZx77eeqk1nlVls8fc/er1EqIw0r1jsRiW1kG2Pz4pgxy\n\twbUBQHEFUdKGi3uXLfOm01WF3xHphMxNrGL9eOBK7war5nLPC+G3BKTPZgbHuzrJs/7w\n\tZv8fQA6QmHFTSsjEmzwSfaAoVgjzrS3NIhDeBv+gCvkwx+RKKCbT63TUHAVJZlu/nJbi\n\tVHmRIAvPni480zI3M+hA58I1hdaURjQlMphi+ZTLAnm6+PjvoDU2gHkyouREgNjE8/rg\n\t0wDQ=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected)\n\theader.d=baylibre-com.20210112.gappssmtp.com\n\theader.i=@baylibre-com.20210112.gappssmtp.com header.b=\"kRvBvDkv\"; \n\tdkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=5h5ecnAPdS25LkLp4bScQ9vfxISoqx35VgKUugxkQnQ=;\n\tb=k02f+YmcnLtznwuhvatSmpj9TBBDEhlfWVmB3MgMJeCT0Nz7/aFOBYEyqJl9a6fAh/\n\tSl9OWQyHIv7pjSQCNCeRwok7POenn7EK0uZj8G5+oj2J4aAlYUdy2RivmlA79EzHonCW\n\thlGJNYcpF83evRR10bRtZPAIO0hIwAG+/Jq/E2XaWVbxdjSd2oVgjmC0U3gOMvdHeTcl\n\ty0BTj7mesk7+VKu/C4LhQ76rRo6OL7DW0wFgpeEY55uQcr5CCJ85SO7wlSaPyiVChUE8\n\t+ws3AENlYEAR3Xq8OdUT2F6ASr/GsJQGVFCUqSuKAHLmtwJkjHMhzXizpE8L01HPQVqp\n\t6ILg==","X-Gm-Message-State":"ACrzQf2ARtWh8hKY+g3NNqQrrYhsBj3rlFppPySkWXV8HJLENaOn0P/P\n\tZhX04Kbu0BpxaIrRpMebuPOmSH8VIDxYPVs5YlEvrA/c4XwVVPUJ","X-Google-Smtp-Source":"AMsMyM7bYaXuLTEOSDQ8JiFOl/Mbm6P4DJHOC7Y03JWc+lA2ANjGQLk8viCVQbkstYvuz8qR+0MNK2LL0pV9NtHnxW8=","X-Received":"by 2002:a5d:6d06:0:b0:232:b56c:e5c3 with SMTP id\n\te6-20020a5d6d06000000b00232b56ce5c3mr23193889wrq.506.1666684487112;\n\tTue, 25 Oct 2022 00:54:47 -0700 (PDT)","MIME-Version":"1.0","References":"<20221003142357.602633-1-fsylvestre@baylibre.com>\n\t<20221003142357.602633-3-fsylvestre@baylibre.com>\n\t<20221025015647.GK3874866@pyrite.rasen.tech>","In-Reply-To":"<20221025015647.GK3874866@pyrite.rasen.tech>","Date":"Tue, 25 Oct 2022 09:54:36 +0200","Message-ID":"<CALzBHU6g=B8dCumx-DV7Yg=w5=-tS6VRKwRE=9bVSX9XWnoZgQ@mail.gmail.com>","To":"paul.elder@ideasonboard.com","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Florian Sylvestre via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Florian Sylvestre <fsylvestre@baylibre.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25722,"web_url":"https://patchwork.libcamera.org/comment/25722/","msgid":"<Y2OJXL+18s0B2rO5@pyrite.rasen.tech>","date":"2022-11-03T09:26:52","subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Tue, Oct 25, 2022 at 09:54:36AM +0200, Florian Sylvestre wrote:\n> Hello Paul,\n> \n> On Tue, 25 Oct 2022 at 03:56, <paul.elder@ideasonboard.com> wrote:\n> >\n> > Hi Florian,\n> >\n> > On Mon, Oct 03, 2022 at 04:23:57PM +0200, Florian Sylvestre via libcamera-devel wrote:\n> > > Add coefficients sets in the YAML tuning file to allow using different set\n> > > depending of the image color temperature (provided by AWB algorithm).\n> > >\n> > > During processing, LSC algorithm computes coefficients by doing a linear\n> > > interpolation between the two closer set.\n> > >\n> > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com>\n> > > ---\n> > >  src/ipa/rkisp1/algorithms/lsc.cpp | 146 ++++++++++++++++---\n> > >  src/ipa/rkisp1/algorithms/lsc.h   |  21 ++-\n> > >  src/ipa/rkisp1/data/ov5640.yaml   | 231 ++++++++++++++++++++----------\n> > >  3 files changed, 298 insertions(+), 100 deletions(-)\n> > >\n> > > diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > > index ad64aeb4..421920f3 100644\n> > > --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> > > +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > > @@ -7,6 +7,7 @@\n> > >\n> > >  #include \"lsc.h\"\n> > >\n> > > +#include <algorithm>\n> > >  #include <cmath>\n> > >  #include <numeric>\n> > >\n> > > @@ -89,6 +90,7 @@ static std::vector<uint16_t> parseTable(const YamlObject &tuningData,\n> > >  }\n> > >\n> > >  LensShadingCorrection::LensShadingCorrection()\n> > > +     : lastCt_(0)\n> > >  {\n> > >  }\n> > >\n> > > @@ -104,14 +106,36 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,\n> > >       if (xSize_.empty() || ySize_.empty())\n> > >               return -EINVAL;\n> > >\n> > > -     rData_ = parseTable(tuningData, \"r\");\n> > > -     grData_ = parseTable(tuningData, \"gr\");\n> > > -     gbData_ = parseTable(tuningData, \"gb\");\n> > > -     bData_ = parseTable(tuningData, \"b\");\n> > > +     /* Get all defined sets to apply. */\n> > > +     const YamlObject &yamlSets = tuningData[\"sets\"];\n> > > +     if (!yamlSets.isList()) {\n> > > +             LOG(RkISP1Lsc, Error)\n> > > +                     << \"'sets' parameter not found in tuning file\";\n> > > +             return -EINVAL;\n> > > +     }\n> > >\n> > > -     if (rData_.empty() || grData_.empty() ||\n> > > -         gbData_.empty() || bData_.empty())\n> > > +     const auto &sets = yamlSets.asList();\n> > > +     for (const auto &[i, yamlSet] : utils::enumerate(sets)) {\n> > > +             sets_.push_back({});\n> > > +             Components &set = sets_.back();\n> > > +\n> > > +             set.ct = yamlSet[\"ct\"].get<uint32_t>(0);\n> > > +             set.r = parseTable(yamlSet, \"r\");\n> > > +             set.gr = parseTable(yamlSet, \"gr\");\n> > > +             set.gb = parseTable(yamlSet, \"gb\");\n> > > +             set.b = parseTable(yamlSet, \"b\");\n> > > +\n> > > +             if (set.r.empty() || set.gr.empty() ||\n> > > +                 set.gb.empty() || set.b.empty())\n> > > +                     return -EINVAL;\n> > > +     }\n> > > +\n> > > +     if (!std::is_sorted(sets_.begin(), sets_.end(),\n> > > +         [](const auto &a, const auto &b) { return a.ct < b.ct; })) {\n> > > +             LOG(RkISP1Lsc, Error)\n> > > +                     << \"Entries in 'sets' must be in increasing ct order\";\n> > >               return -EINVAL;\n> > > +     }\n> > >\n> > >       return 0;\n> > >  }\n> > > @@ -151,36 +175,122 @@ int LensShadingCorrection::configure(IPAContext &context,\n> > >       return 0;\n> > >  }\n> > >\n> > > +void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,\n> > > +                                   const Components &set)\n> > > +{\n> > > +     std::copy(set.r.begin(), set.r.end(), &config.r_data_tbl[0][0]);\n> > > +     std::copy(set.gr.begin(), set.gr.end(), &config.gr_data_tbl[0][0]);\n> > > +     std::copy(set.gb.begin(), set.gb.end(), &config.gb_data_tbl[0][0]);\n> > > +     std::copy(set.b.begin(), set.b.end(), &config.b_data_tbl[0][0]);\n> > > +}\n> > > +\n> > > +/*\n> > > + * Interpolate LSC parameters based on color temperature value.\n> > > + */\n> > > +void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> > > +                                          const Components &set0,\n> > > +                                          const Components &set1,\n> > > +                                          const uint32_t ct)\n> > > +{\n> > > +     double coeff0 = (set1.ct - ct) / (set1.ct - set0.ct);\n> > > +     double coeff1 = (ct - set0.ct) / (set1.ct - set0.ct);\n> > > +\n> > > +     for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {\n> > > +             for (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {\n> > > +                     unsigned int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;\n> > > +\n> > > +                     config.r_data_tbl[i][j] =\n> > > +                             set0.r[sample] * coeff0 +\n> > > +                             set1.r[sample] * coeff1;\n> > > +\n> > > +                     config.gr_data_tbl[i][j] =\n> > > +                             set0.gr[sample] * coeff0 +\n> > > +                             set1.gr[sample] * coeff1;\n> > > +\n> > > +                     config.gb_data_tbl[i][j] =\n> > > +                             set0.gb[sample] * coeff0 +\n> > > +                             set1.gb[sample] * coeff1;\n> > > +\n> > > +                     config.b_data_tbl[i][j] =\n> > > +                             set0.b[sample] * coeff0 +\n> > > +                             set1.b[sample] * coeff1;\n> > > +             }\n> > > +     }\n> > > +}\n> > > +\n> > >  /**\n> > >   * \\copydoc libcamera::ipa::Algorithm::prepare\n> > >   */\n> > > -void LensShadingCorrection::prepare([[maybe_unused]] IPAContext &context,\n> > > +void LensShadingCorrection::prepare(IPAContext &context,\n> > >                                   const uint32_t frame,\n> > >                                   [[maybe_unused]] IPAFrameContext &frameContext,\n> > >                                   rkisp1_params_cfg *params)\n> > >  {\n> > > -     if (frame > 0)\n> > > +     struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> > > +\n> > > +     /*\n> > > +      * If there is only one set, the configuration has already been done\n> > > +      * for first frame.\n> > > +      */\n> > > +     if ((sets_.size() == 1) && (frame > 0))\n> > >               return;\n> > >\n> > > -     struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;\n> > > +     uint32_t ct = context.activeState.awb.temperatureK;\n> > > +     ct = std::clamp(ct, sets_.front().ct, sets_.back().ct);\n> > > +\n> > > +     /*\n> > > +      * Return if the current color temperature value is closed to the\n> > > +      * one used for previous computation.\n> > > +      */\n> > > +     static constexpr double kCtThreshold = 0.01;\n> > > +     if (utils::abs_diff(ct, lastCt_) < kCtThreshold * lastCt_)\n> > > +             return;\n> > >\n> > >       memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));\n> > >       memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));\n> > >       memcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));\n> > >       memcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));\n> > >\n> > > -     std::copy(rData_.begin(), rData_.end(),\n> > > -               &config.r_data_tbl[0][0]);\n> > > -     std::copy(grData_.begin(), grData_.end(),\n> > > -               &config.gr_data_tbl[0][0]);\n> > > -     std::copy(gbData_.begin(), gbData_.end(),\n> > > -               &config.gb_data_tbl[0][0]);\n> > > -     std::copy(bData_.begin(), bData_.end(),\n> > > -               &config.b_data_tbl[0][0]);\n> > > -\n> > >       params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;\n> > >       params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;\n> > >       params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;\n> > > +\n> > > +     /*\n> > > +      * If there is only one set, pick it.\n> > > +      */\n> > > +     if (sets_.size() == 1) {\n> > > +             copyTable(config, sets_[0]);\n> > > +             return;\n> > > +     }\n> > > +\n> > > +     /*\n> > > +      * Pick the sets to interpolate between, or if the colour temperate is\n> > > +      * close enough to one of the sets, use that set without interpolation.\n> > > +      */\n> > > +     int index = 0;\n> > > +     while (ct > sets_[index + 1].ct)\n> > > +             index++;\n> >\n> > Wouldn't this break if the color temperature reported from awb is higher\n> > than all color temperatures available in the LSC tuning file?\n> There is a 'clamp' function a little bit before:\n> 'ct = std::clamp(ct, sets_.front().ct, sets_.back().ct);'\n> so I think it should not. But perhaps I missed a case?\n\nAh, (back then) I missed then. I was also concerned about the guard and\nchecking an index ahead, but I now see that it's fine.\n\n> >\n> >\n> >\n> > > +     Components &set0 = sets_[index];\n> > > +     Components &set1 = sets_[index + 1];\n> > > +     uint32_t ct0 = set0.ct, ct1 = set1.ct;\n> > > +\n> > > +     static constexpr double kThreshold = 0.1;\n\nThe new question that I have now is that the threshold for deciding\nwhether to interpolate or not is 10%, while the threshold for deciding\nif \"the last color temp is good enough\" is 1%; is this good enough?\n\nThinking out loud, I guess for choosing the LSC table 10% is \"close\nenough\". Then the question is the threshold for reusing the last-used\nconfiguration. Which I think depends on the granularity of the available\ntables. 1% is like 5858 compared to 5800, so if you have 5859 and the\nlast temperature was 5800 then it would go through this routine again. I\nguess if you had a table for 5800 and 5900 then it's better to switch to\n5900, but also at that point 5859 is within the 10% threshold of 5800,\nso it'll be picked up by that instead of 5900 since it's the lower\nvalue.\n\nPlus, if the 1% threshold triggers recomputing the lsc table, but you\nend up choosing the same lsc table as last time, then it kind of defeats\nthe purpose. So I think there should be a rework of how the lsc table is\nchosen, based on the granularity of the available lsc tables.\n\nI'm picking up this patch, so I guess I have to do it...\n\n\nPaul\n\n> > > +     if (utils::abs_diff(ct0, ct) < kThreshold * ct0) {\n> > > +             LOG(RkISP1Lsc, Debug)\n> > > +                     << \"using calibration for \" << ct0;\n> > > +             copyTable(config, set0);\n> > > +     } else if (utils::abs_diff(ct1, ct) < kThreshold * ct1) {\n> > > +             LOG(RkISP1Lsc, Debug)\n> > > +                     << \"using calibration for \" << ct1;\n> > > +             copyTable(config, set1);\n> > > +     } else {\n> > > +             LOG(RkISP1Lsc, Debug)\n> > > +                     << \"ct is \" << ct << \", interpolating between \"\n> > > +                     << ct0 << \" and \" << ct1;\n> > > +             interpolateTable(config, set0, set1, ct);\n> > > +     }\n> > > +\n> > > +     lastCt_ = ct;\n> > >  }\n> > >\n> > >  REGISTER_IPA_ALGORITHM(LensShadingCorrection, \"LensShadingCorrection\")\n> > > diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h\n> > > index da81ea53..9c21bca1 100644\n> > > --- a/src/ipa/rkisp1/algorithms/lsc.h\n> > > +++ b/src/ipa/rkisp1/algorithms/lsc.h\n> > > @@ -24,19 +24,28 @@ public:\n> > >       void prepare(IPAContext &context, const uint32_t frame,\n> > >                    IPAFrameContext &frameContext,\n> > >                    rkisp1_params_cfg *params) override;\n> > > -\n> > >  private:\n> > > -     std::vector<uint16_t> rData_;\n> > > -     std::vector<uint16_t> grData_;\n> > > -     std::vector<uint16_t> gbData_;\n> > > -     std::vector<uint16_t> bData_;\n> > > -\n> > > +     struct Components {\n> > > +             uint32_t ct;\n> > > +             std::vector<uint16_t> r;\n> > > +             std::vector<uint16_t> gr;\n> > > +             std::vector<uint16_t> gb;\n> > > +             std::vector<uint16_t> b;\n> > > +     };\n> > > +\n> > > +     void copyTable(rkisp1_cif_isp_lsc_config &config, const Components &set0);\n> > > +     void interpolateTable(rkisp1_cif_isp_lsc_config &config,\n> > > +                           const Components &set0, const Components &set1,\n> > > +                           const uint32_t ct);\n> > > +\n> > > +     std::vector<Components> sets_;\n> > >       std::vector<double> xSize_;\n> > >       std::vector<double> ySize_;\n> > >       uint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> > >       uint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> > >       uint16_t xSizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> > >       uint16_t ySizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];\n> > > +     uint32_t lastCt_;\n> > >  };\n> > >\n> > >  } /* namespace ipa::rkisp1::algorithms */\n> > > diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml\n> > > index 33a672bc..d80c1655 100644\n> > > --- a/src/ipa/rkisp1/data/ov5640.yaml\n> > > +++ b/src/ipa/rkisp1/data/ov5640.yaml\n> > > @@ -20,82 +20,161 @@ algorithms:\n> > >    - LensShadingCorrection:\n> > >        x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n> > >        y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]\n> > > -      r:  [\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -          ]\n> > > -      gr: [\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -          ]\n> > > -      gb: [\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -          ]\n> > > -      b:  [\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -            1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > -          ]\n> > > +      sets:\n> > > +        - ct: 3000\n> > > +          r:  [\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +              ]\n> > > +          gr: [\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +              ]\n> > > +          gb: [\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +              ]\n> > > +          b:  [\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +                1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,\n> > > +              ]\n> > > +        - ct: 7000\n> > > +          r:  [\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +              ]\n> > > +          gr: [\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +              ]\n> > > +          gb: [\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +              ]\n> > > +          b:  [\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +                1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,\n> > > +              ]\n> > >    - DefectPixelClusterCorrection:\n> > >        fixed-set: false\n> > >        sets:\n> > > --\n> > > 2.34.1\n> > >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id E06E5BDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  3 Nov 2022 09:27:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 221D26307E;\n\tThu,  3 Nov 2022 10:27:03 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B26B663037\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  3 Nov 2022 10:27:01 +0100 (CET)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E66CE56D;\n\tThu,  3 Nov 2022 10:26:59 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1667467623;\n\tbh=8AeQ4q96/guKRizirliWmwfhqujvi+gkwGKuEN1bF44=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=KwSHsIihowFSuu4Ii/Qs04/IwzMsw2zehVDiNJTG3efjrqrJ7GHC8sQtroN0Lec9y\n\t7L66a4HFGXCogC3ELffwm0FaSM2G5X1H+ntaROQqaJkXeI6d9c+hWhfVBxN9+0Ysei\n\tsT1QsroJE4fsPIt04JhbI6q+1gcHk2ZS1YpRN8qs9eTlXSAU/Eobnq9AW5rM3Bicu0\n\tRR49QhDbpZZ2c+4v+7mkS2VNSYSferrKoDXLRcnR0NHBWP27nTs/m5YtABcRdIXsLY\n\tSCtvHC5+Tf79+svPXsDtu9kLNlIFzZ41/cgBQ1FohjXqLMHyGMMFg0WbK46g/zh/+R\n\ttqMku0siWOxRw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1667467621;\n\tbh=8AeQ4q96/guKRizirliWmwfhqujvi+gkwGKuEN1bF44=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=G+js3e5A7NrRS/w2sP83OQfVXfjktOfg6zWXWs9+pbyT9LwvgauFoJJNSOiyYg6pl\n\txh9RQozgJVM97zCPRnx9xuDxDzkmxF4B+GZGTF3hyMvvDsROLI7rukCWvF47VOtlNU\n\t8DPUSmNzBvw5KaKZUQmfRfVTxWWeyped+yWlmzn8="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"G+js3e5A\"; dkim-atps=neutral","Date":"Thu, 3 Nov 2022 18:26:52 +0900","To":"Florian Sylvestre <fsylvestre@baylibre.com>","Message-ID":"<Y2OJXL+18s0B2rO5@pyrite.rasen.tech>","References":"<20221003142357.602633-1-fsylvestre@baylibre.com>\n\t<20221003142357.602633-3-fsylvestre@baylibre.com>\n\t<20221025015647.GK3874866@pyrite.rasen.tech>\n\t<CALzBHU6g=B8dCumx-DV7Yg=w5=-tS6VRKwRE=9bVSX9XWnoZgQ@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<CALzBHU6g=B8dCumx-DV7Yg=w5=-tS6VRKwRE=9bVSX9XWnoZgQ@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v3 2/2] ipa: rkisp1: Take into account\n\tcolor temperature during LSC algorithm","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]