[{"id":24597,"web_url":"https://patchwork.libcamera.org/comment/24597/","msgid":"<YvsR5UWS4JFN1Frq@pendragon.ideasonboard.com>","date":"2022-08-16T03:41:25","subject":"Re: [libcamera-devel] [PATCH v2 05/10] ipa: rkisp1: Rename\n\tframeContext to activeState","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo and Kieran,\n\nThank you for the patch.\n\nOn Fri, Aug 05, 2022 at 03:53:07PM +0200, Jacopo Mondi via libcamera-devel wrote:\n> From: Kieran Bingham via libcamera-devel <libcamera-devel@lists.libcamera.org>\n> \n> Move the existing frame context structure to the IPAActiveState.\n> This structure should store the most up to date results for the IPA\n> which may be shared to other algorithms that operate on the data.\n\nThis doesn't seem right to me. The concept of an IPA module-wide active\nstate sounds very ill-defined, if it's not synchronized to a frame, I\ndon't see how different algorithms can agree on the concept of \"latest\".\n\nLooking at the algorithms, lots of (if not all of) the fields of what is\nnow the active state belong to a frame context.\n\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  src/ipa/rkisp1/algorithms/agc.cpp    | 20 ++++++++--------\n>  src/ipa/rkisp1/algorithms/awb.cpp    | 34 ++++++++++++++--------------\n>  src/ipa/rkisp1/algorithms/blc.cpp    |  2 +-\n>  src/ipa/rkisp1/algorithms/cproc.cpp  |  4 ++--\n>  src/ipa/rkisp1/algorithms/dpcc.cpp   |  2 +-\n>  src/ipa/rkisp1/algorithms/filter.cpp |  4 ++--\n>  src/ipa/rkisp1/algorithms/gsl.cpp    |  2 +-\n>  src/ipa/rkisp1/algorithms/lsc.cpp    |  2 +-\n>  src/ipa/rkisp1/ipa_context.h         |  7 ++++--\n>  src/ipa/rkisp1/rkisp1.cpp            | 12 +++++-----\n>  10 files changed, 46 insertions(+), 43 deletions(-)\n> \n> diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\n> index a1bb7d972926..483e941fe427 100644\n> --- a/src/ipa/rkisp1/algorithms/agc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/agc.cpp\n> @@ -73,8 +73,8 @@ Agc::Agc()\n>  int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n>  {\n>  \t/* Configure the default exposure and gain. */\n> -\tcontext.frameContext.agc.gain = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> -\tcontext.frameContext.agc.exposure = 10ms / context.configuration.sensor.lineDuration;\n> +\tcontext.activeState.agc.gain = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> +\tcontext.activeState.agc.exposure = 10ms / context.configuration.sensor.lineDuration;\n>  \n>  \t/*\n>  \t * According to the RkISP1 documentation:\n> @@ -98,7 +98,7 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n>  \tcontext.configuration.agc.measureWindow.h_size = 3 * configInfo.outputSize.width / 4;\n>  \tcontext.configuration.agc.measureWindow.v_size = 3 * configInfo.outputSize.height / 4;\n>  \n> -\t/* \\todo Use actual frame index by populating it in the frameContext. */\n> +\t/* \\todo Use actual frame index by populating it in the activeState. */\n>  \tframeCount_ = 0;\n>  \treturn 0;\n>  }\n> @@ -140,18 +140,18 @@ utils::Duration Agc::filterExposure(utils::Duration exposureValue)\n>  \n>  /**\n>   * \\brief Estimate the new exposure and gain values\n> - * \\param[inout] frameContext The shared IPA frame Context\n> + * \\param[inout] context The shared IPA Context\n>   * \\param[in] yGain The gain calculated on the current brightness level\n>   * \\param[in] iqMeanGain The gain calculated based on the relative luminance target\n>   */\n>  void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)\n>  {\n>  \tIPASessionConfiguration &configuration = context.configuration;\n> -\tIPAFrameContext &frameContext = context.frameContext;\n> +\tIPAActiveState &activeState = context.activeState;\n>  \n>  \t/* Get the effective exposure and gain applied on the sensor. */\n> -\tuint32_t exposure = frameContext.sensor.exposure;\n> -\tdouble analogueGain = frameContext.sensor.gain;\n> +\tuint32_t exposure = activeState.sensor.exposure;\n> +\tdouble analogueGain = activeState.sensor.gain;\n>  \n>  \t/* Use the highest of the two gain estimates. */\n>  \tdouble evGain = std::max(yGain, iqMeanGain);\n> @@ -216,8 +216,8 @@ void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)\n>  \t\t\t      << stepGain;\n>  \n>  \t/* Update the estimated exposure and gain. */\n> -\tframeContext.agc.exposure = shutterTime / configuration.sensor.lineDuration;\n> -\tframeContext.agc.gain = stepGain;\n> +\tactiveState.agc.exposure = shutterTime / configuration.sensor.lineDuration;\n> +\tactiveState.agc.gain = stepGain;\n>  }\n>  \n>  /**\n> @@ -324,7 +324,7 @@ void Agc::process(IPAContext &context,\n>   */\n>  void Agc::prepare(IPAContext &context, rkisp1_params_cfg *params)\n>  {\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \t/* Configure the measurement window. */\n> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp\n> index 9f00364d12b1..427aaeb1e955 100644\n> --- a/src/ipa/rkisp1/algorithms/awb.cpp\n> +++ b/src/ipa/rkisp1/algorithms/awb.cpp\n> @@ -35,9 +35,9 @@ LOG_DEFINE_CATEGORY(RkISP1Awb)\n>  int Awb::configure(IPAContext &context,\n>  \t\t   const IPACameraSensorInfo &configInfo)\n>  {\n> -\tcontext.frameContext.awb.gains.red = 1.0;\n> -\tcontext.frameContext.awb.gains.blue = 1.0;\n> -\tcontext.frameContext.awb.gains.green = 1.0;\n> +\tcontext.activeState.awb.gains.red = 1.0;\n> +\tcontext.activeState.awb.gains.blue = 1.0;\n> +\tcontext.activeState.awb.gains.green = 1.0;\n>  \n>  \t/*\n>  \t * Define the measurement window for AWB as a centered rectangle\n> @@ -72,16 +72,16 @@ uint32_t Awb::estimateCCT(double red, double green, double blue)\n>   */\n>  void Awb::prepare(IPAContext &context, rkisp1_params_cfg *params)\n>  {\n> -\tparams->others.awb_gain_config.gain_green_b = 256 * context.frameContext.awb.gains.green;\n> -\tparams->others.awb_gain_config.gain_blue = 256 * context.frameContext.awb.gains.blue;\n> -\tparams->others.awb_gain_config.gain_red = 256 * context.frameContext.awb.gains.red;\n> -\tparams->others.awb_gain_config.gain_green_r = 256 * context.frameContext.awb.gains.green;\n> +\tparams->others.awb_gain_config.gain_green_b = 256 * context.activeState.awb.gains.green;\n> +\tparams->others.awb_gain_config.gain_blue = 256 * context.activeState.awb.gains.blue;\n> +\tparams->others.awb_gain_config.gain_red = 256 * context.activeState.awb.gains.red;\n> +\tparams->others.awb_gain_config.gain_green_r = 256 * context.activeState.awb.gains.green;\n>  \n>  \t/* Update the gains. */\n>  \tparams->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;\n>  \n>  \t/* If we already have configured the gains and window, return. */\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \t/* Configure the gains to apply. */\n> @@ -125,7 +125,7 @@ void Awb::process([[maybe_unused]] IPAContext &context,\n>  {\n>  \tconst rkisp1_cif_isp_stat *params = &stats->params;\n>  \tconst rkisp1_cif_isp_awb_stat *awb = &params->awb;\n> -\tIPAFrameContext &frameContext = context.frameContext;\n> +\tIPAActiveState &activeState = context.activeState;\n>  \n>  \t/* Get the YCbCr mean values */\n>  \tdouble yMean = awb->awb_mean[0].mean_y_or_g;\n> @@ -157,22 +157,22 @@ void Awb::process([[maybe_unused]] IPAContext &context,\n>  \n>  \t/* Filter the values to avoid oscillations. */\n>  \tdouble speed = 0.2;\n> -\tredGain = speed * redGain + (1 - speed) * frameContext.awb.gains.red;\n> -\tblueGain = speed * blueGain + (1 - speed) * frameContext.awb.gains.blue;\n> +\tredGain = speed * redGain + (1 - speed) * activeState.awb.gains.red;\n> +\tblueGain = speed * blueGain + (1 - speed) * activeState.awb.gains.blue;\n>  \n>  \t/*\n>  \t * Gain values are unsigned integer value, range 0 to 4 with 8 bit\n>  \t * fractional part.\n>  \t */\n> -\tframeContext.awb.gains.red = std::clamp(redGain, 0.0, 1023.0 / 256);\n> -\tframeContext.awb.gains.blue = std::clamp(blueGain, 0.0, 1023.0 / 256);\n> +\tactiveState.awb.gains.red = std::clamp(redGain, 0.0, 1023.0 / 256);\n> +\tactiveState.awb.gains.blue = std::clamp(blueGain, 0.0, 1023.0 / 256);\n>  \t/* Hardcode the green gain to 1.0. */\n> -\tframeContext.awb.gains.green = 1.0;\n> +\tactiveState.awb.gains.green = 1.0;\n>  \n> -\tframeContext.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);\n> +\tactiveState.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);\n>  \n> -\tLOG(RkISP1Awb, Debug) << \"Gain found for red: \" << context.frameContext.awb.gains.red\n> -\t\t\t      << \" and for blue: \" << context.frameContext.awb.gains.blue;\n> +\tLOG(RkISP1Awb, Debug) << \"Gain found for red: \" << context.activeState.awb.gains.red\n> +\t\t\t      << \" and for blue: \" << context.activeState.awb.gains.blue;\n>  }\n>  \n>  REGISTER_IPA_ALGORITHM(Awb, \"Awb\")\n> diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp\n> index a58569fa2dc2..4d55a2d529cb 100644\n> --- a/src/ipa/rkisp1/algorithms/blc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/blc.cpp\n> @@ -68,7 +68,7 @@ int BlackLevelCorrection::init([[maybe_unused]] IPAContext &context,\n>  void BlackLevelCorrection::prepare(IPAContext &context,\n>  \t\t\t\t   rkisp1_params_cfg *params)\n>  {\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \tif (!tuningParameters_)\n> diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp\n> index bca5ab6907d6..a3b778d1c908 100644\n> --- a/src/ipa/rkisp1/algorithms/cproc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/cproc.cpp\n> @@ -40,7 +40,7 @@ void ColorProcessing::queueRequest(IPAContext &context,\n>  \t\t\t\t   [[maybe_unused]] const uint32_t frame,\n>  \t\t\t\t   const ControlList &controls)\n>  {\n> -\tauto &cproc = context.frameContext.cproc;\n> +\tauto &cproc = context.activeState.cproc;\n>  \n>  \tconst auto &brightness = controls.get(controls::Brightness);\n>  \tif (brightness) {\n> @@ -73,7 +73,7 @@ void ColorProcessing::queueRequest(IPAContext &context,\n>  void ColorProcessing::prepare(IPAContext &context,\n>  \t\t\t      rkisp1_params_cfg *params)\n>  {\n> -\tauto &cproc = context.frameContext.cproc;\n> +\tauto &cproc = context.activeState.cproc;\n>  \n>  \t/* Check if the algorithm configuration has been updated. */\n>  \tif (!cproc.updateParams)\n> diff --git a/src/ipa/rkisp1/algorithms/dpcc.cpp b/src/ipa/rkisp1/algorithms/dpcc.cpp\n> index 69bc651eaf08..93d37b1dae44 100644\n> --- a/src/ipa/rkisp1/algorithms/dpcc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/dpcc.cpp\n> @@ -234,7 +234,7 @@ int DefectPixelClusterCorrection::init([[maybe_unused]] IPAContext &context,\n>  void DefectPixelClusterCorrection::prepare(IPAContext &context,\n>  \t\t\t\t\t   rkisp1_params_cfg *params)\n>  {\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \tif (!initialized_)\n> diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp\n> index 8ca10fd1ee9d..bc7fc1f32f34 100644\n> --- a/src/ipa/rkisp1/algorithms/filter.cpp\n> +++ b/src/ipa/rkisp1/algorithms/filter.cpp\n> @@ -46,7 +46,7 @@ void Filter::queueRequest(IPAContext &context,\n>  \t\t\t  [[maybe_unused]] const uint32_t frame,\n>  \t\t\t  const ControlList &controls)\n>  {\n> -\tauto &filter = context.frameContext.filter;\n> +\tauto &filter = context.activeState.filter;\n>  \n>  \tconst auto &sharpness = controls.get(controls::Sharpness);\n>  \tif (sharpness) {\n> @@ -87,7 +87,7 @@ void Filter::queueRequest(IPAContext &context,\n>   */\n>  void Filter::prepare(IPAContext &context, rkisp1_params_cfg *params)\n>  {\n> -\tauto &filter = context.frameContext.filter;\n> +\tauto &filter = context.activeState.filter;\n>  \n>  \t/* Check if the algorithm configuration has been updated. */\n>  \tif (!filter.updateParams)\n> diff --git a/src/ipa/rkisp1/algorithms/gsl.cpp b/src/ipa/rkisp1/algorithms/gsl.cpp\n> index 2fd1a23d3a9b..dd9974627cd2 100644\n> --- a/src/ipa/rkisp1/algorithms/gsl.cpp\n> +++ b/src/ipa/rkisp1/algorithms/gsl.cpp\n> @@ -121,7 +121,7 @@ int GammaSensorLinearization::init([[maybe_unused]] IPAContext &context,\n>  void GammaSensorLinearization::prepare(IPAContext &context,\n>  \t\t\t\t       rkisp1_params_cfg *params)\n>  {\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \tif (!initialized_)\n> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> index 05c8c0dab5c8..4ed467086199 100644\n> --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> @@ -125,7 +125,7 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,\n>  void LensShadingCorrection::prepare(IPAContext &context,\n>  \t\t\t\t    rkisp1_params_cfg *params)\n>  {\n> -\tif (context.frameContext.frameCount > 0)\n> +\tif (context.activeState.frameCount > 0)\n>  \t\treturn;\n>  \n>  \tif (!initialized_)\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index 2bdb6a81d7c9..a8daeca487ae 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -41,7 +41,7 @@ struct IPASessionConfiguration {\n>  \t} hw;\n>  };\n>  \n> -struct IPAFrameContext {\n> +struct IPAActiveState {\n>  \tstruct {\n>  \t\tuint32_t exposure;\n>  \t\tdouble gain;\n> @@ -78,9 +78,12 @@ struct IPAFrameContext {\n>  \tunsigned int frameCount;\n>  };\n>  \n> +struct IPAFrameContext {\n> +};\n> +\n>  struct IPAContext {\n>  \tIPASessionConfiguration configuration;\n> -\tIPAFrameContext frameContext;\n> +\tIPAActiveState activeState;\n>  };\n>  \n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index af22dbeb3da5..a64716f588a8 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -252,7 +252,7 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,\n>  \tcontext_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);\n>  \tcontext_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);\n>  \n> -\tcontext_.frameContext.frameCount = 0;\n> +\tcontext_.activeState.frameCount = 0;\n>  \n>  \tfor (auto const &algo : algorithms()) {\n>  \t\tint ret = algo->configure(context_, info);\n> @@ -312,7 +312,7 @@ void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n>  \t\talgo->prepare(context_, params);\n>  \n>  \tparamsBufferReady.emit(frame);\n> -\tcontext_.frameContext.frameCount++;\n> +\tcontext_.activeState.frameCount++;\n>  }\n>  \n>  void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,\n> @@ -322,9 +322,9 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n>  \t\treinterpret_cast<rkisp1_stat_buffer *>(\n>  \t\t\tmappedBuffers_.at(bufferId).planes()[0].data());\n>  \n> -\tcontext_.frameContext.sensor.exposure =\n> +\tcontext_.activeState.sensor.exposure =\n>  \t\tsensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();\n> -\tcontext_.frameContext.sensor.gain =\n> +\tcontext_.activeState.sensor.gain =\n>  \t\tcamHelper_->gain(sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>());\n>  \n>  \tunsigned int aeState = 0;\n> @@ -339,8 +339,8 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n>  \n>  void IPARkISP1::setControls(unsigned int frame)\n>  {\n> -\tuint32_t exposure = context_.frameContext.agc.exposure;\n> -\tuint32_t gain = camHelper_->gainCode(context_.frameContext.agc.gain);\n> +\tuint32_t exposure = context_.activeState.agc.exposure;\n> +\tuint32_t gain = camHelper_->gainCode(context_.activeState.agc.gain);\n>  \n>  \tControlList ctrls(ctrls_);\n>  \tctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));","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 3E926BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Aug 2022 03:41:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A177261FC0;\n\tTue, 16 Aug 2022 05:41:41 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B7F43603E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Aug 2022 05:41:39 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 28430496;\n\tTue, 16 Aug 2022 05:41:39 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660621301;\n\tbh=djD9hYR9J7+m1kBvUMRcWz6YI8Aj/oJzr/Ti0A0jTOA=;\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=uCD80gP5gCOwlooM8RAMk0ePyRfzgJKjsLt/w+5JRqozIYRQy6KYWsK9CE1kqQA2Y\n\tc4iXi+ZSeLnlkGjm4eky3DwLEwb/7Hevi95KI93mGILtEZyU2g842Ui5QMy8mTnV7o\n\t4MEercV/GNQjdNQ8AOi2Dd0aV+vf2ZTI2cWP8/FD9yJVKXj4mB6xes6Nui5P4GXx60\n\tqlh0zf1TI6dSo+TiyrG+VxfEGDEW2+vyYXCtdPZ/U07N1AT/COLORkb5NcWlkVGb7v\n\tU9+2NHzEWoSFKqq+F2Ut0jI2nUVW0hy6XuBSQLV3+F2sTjrFVzaWNivPUcBKclkdj6\n\tO2UA7BAQwatjQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1660621299;\n\tbh=djD9hYR9J7+m1kBvUMRcWz6YI8Aj/oJzr/Ti0A0jTOA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=LikK461tCQkZuWkNubvRgbHMhYb8UHvYZGlqtVMCjU5cTjefi/6FOL2P+U+qMp/a6\n\toxnOFRaqf45wxXNA61+H7pZDxxh0zWp+CA19bSsaZ+t4oZDooDTz/qNgcDi827Bu6G\n\tD6n65urRO80ksF+fzvLEZz0kL4z4y2fLFGsU+JUs="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"LikK461t\"; dkim-atps=neutral","Date":"Tue, 16 Aug 2022 06:41:25 +0300","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YvsR5UWS4JFN1Frq@pendragon.ideasonboard.com>","References":"<20220805135312.47497-1-jacopo@jmondi.org>\n\t<20220805135312.47497-6-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220805135312.47497-6-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v2 05/10] ipa: rkisp1: Rename\n\tframeContext to activeState","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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@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":24607,"web_url":"https://patchwork.libcamera.org/comment/24607/","msgid":"<166065204654.3403653.16152626318561900287@Monstersaurus>","date":"2022-08-16T12:14:06","subject":"Re: [libcamera-devel] [PATCH v2 05/10] ipa: rkisp1: Rename\n\tframeContext to activeState","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart via libcamera-devel (2022-08-16 04:41:25)\n> Hi Jacopo and Kieran,\n> \n> Thank you for the patch.\n> \n> On Fri, Aug 05, 2022 at 03:53:07PM +0200, Jacopo Mondi via libcamera-devel wrote:\n> > From: Kieran Bingham via libcamera-devel <libcamera-devel@lists.libcamera.org>\n> > \n> > Move the existing frame context structure to the IPAActiveState.\n> > This structure should store the most up to date results for the IPA\n> > which may be shared to other algorithms that operate on the data.\n> \n> This doesn't seem right to me. The concept of an IPA module-wide active\n> state sounds very ill-defined, if it's not synchronized to a frame, I\n> don't see how different algorithms can agree on the concept of \"latest\".\n> \n> Looking at the algorithms, lots of (if not all of) the fields of what is\n> now the active state belong to a frame context.\n\nYes, Correct, but the aim of this series is to deal with the plumbing so\nthat the fields can be moved over correctly on top.\n\nThis patch leaves the existing functionality the same, as the algorithms\nare still working with a single state structure. Anything which is\nper-frame should be moved to the FrameContext, and the ActiveState\nshould be left with anything representing the current state of the\nalgorithm, and mode information.\n\n\nWe can add the following to the commit message:\n\n\"\"\"\nAll existing algorithm state is moved to the ActiveState and the\nalgoritms should be updated individually to use the FrameContext\ndirectly where appropriate.\n\"\"\"\n\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  src/ipa/rkisp1/algorithms/agc.cpp    | 20 ++++++++--------\n> >  src/ipa/rkisp1/algorithms/awb.cpp    | 34 ++++++++++++++--------------\n> >  src/ipa/rkisp1/algorithms/blc.cpp    |  2 +-\n> >  src/ipa/rkisp1/algorithms/cproc.cpp  |  4 ++--\n> >  src/ipa/rkisp1/algorithms/dpcc.cpp   |  2 +-\n> >  src/ipa/rkisp1/algorithms/filter.cpp |  4 ++--\n> >  src/ipa/rkisp1/algorithms/gsl.cpp    |  2 +-\n> >  src/ipa/rkisp1/algorithms/lsc.cpp    |  2 +-\n> >  src/ipa/rkisp1/ipa_context.h         |  7 ++++--\n> >  src/ipa/rkisp1/rkisp1.cpp            | 12 +++++-----\n> >  10 files changed, 46 insertions(+), 43 deletions(-)\n> > \n> > diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\n> > index a1bb7d972926..483e941fe427 100644\n> > --- a/src/ipa/rkisp1/algorithms/agc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/agc.cpp\n> > @@ -73,8 +73,8 @@ Agc::Agc()\n> >  int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n> >  {\n> >       /* Configure the default exposure and gain. */\n> > -     context.frameContext.agc.gain = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> > -     context.frameContext.agc.exposure = 10ms / context.configuration.sensor.lineDuration;\n> > +     context.activeState.agc.gain = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> > +     context.activeState.agc.exposure = 10ms / context.configuration.sensor.lineDuration;\n> >  \n> >       /*\n> >        * According to the RkISP1 documentation:\n> > @@ -98,7 +98,7 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n> >       context.configuration.agc.measureWindow.h_size = 3 * configInfo.outputSize.width / 4;\n> >       context.configuration.agc.measureWindow.v_size = 3 * configInfo.outputSize.height / 4;\n> >  \n> > -     /* \\todo Use actual frame index by populating it in the frameContext. */\n> > +     /* \\todo Use actual frame index by populating it in the activeState. */\n> >       frameCount_ = 0;\n> >       return 0;\n> >  }\n> > @@ -140,18 +140,18 @@ utils::Duration Agc::filterExposure(utils::Duration exposureValue)\n> >  \n> >  /**\n> >   * \\brief Estimate the new exposure and gain values\n> > - * \\param[inout] frameContext The shared IPA frame Context\n> > + * \\param[inout] context The shared IPA Context\n> >   * \\param[in] yGain The gain calculated on the current brightness level\n> >   * \\param[in] iqMeanGain The gain calculated based on the relative luminance target\n> >   */\n> >  void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)\n> >  {\n> >       IPASessionConfiguration &configuration = context.configuration;\n> > -     IPAFrameContext &frameContext = context.frameContext;\n> > +     IPAActiveState &activeState = context.activeState;\n> >  \n> >       /* Get the effective exposure and gain applied on the sensor. */\n> > -     uint32_t exposure = frameContext.sensor.exposure;\n> > -     double analogueGain = frameContext.sensor.gain;\n> > +     uint32_t exposure = activeState.sensor.exposure;\n> > +     double analogueGain = activeState.sensor.gain;\n> >  \n> >       /* Use the highest of the two gain estimates. */\n> >       double evGain = std::max(yGain, iqMeanGain);\n> > @@ -216,8 +216,8 @@ void Agc::computeExposure(IPAContext &context, double yGain, double iqMeanGain)\n> >                             << stepGain;\n> >  \n> >       /* Update the estimated exposure and gain. */\n> > -     frameContext.agc.exposure = shutterTime / configuration.sensor.lineDuration;\n> > -     frameContext.agc.gain = stepGain;\n> > +     activeState.agc.exposure = shutterTime / configuration.sensor.lineDuration;\n> > +     activeState.agc.gain = stepGain;\n> >  }\n> >  \n> >  /**\n> > @@ -324,7 +324,7 @@ void Agc::process(IPAContext &context,\n> >   */\n> >  void Agc::prepare(IPAContext &context, rkisp1_params_cfg *params)\n> >  {\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       /* Configure the measurement window. */\n> > diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp\n> > index 9f00364d12b1..427aaeb1e955 100644\n> > --- a/src/ipa/rkisp1/algorithms/awb.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/awb.cpp\n> > @@ -35,9 +35,9 @@ LOG_DEFINE_CATEGORY(RkISP1Awb)\n> >  int Awb::configure(IPAContext &context,\n> >                  const IPACameraSensorInfo &configInfo)\n> >  {\n> > -     context.frameContext.awb.gains.red = 1.0;\n> > -     context.frameContext.awb.gains.blue = 1.0;\n> > -     context.frameContext.awb.gains.green = 1.0;\n> > +     context.activeState.awb.gains.red = 1.0;\n> > +     context.activeState.awb.gains.blue = 1.0;\n> > +     context.activeState.awb.gains.green = 1.0;\n> >  \n> >       /*\n> >        * Define the measurement window for AWB as a centered rectangle\n> > @@ -72,16 +72,16 @@ uint32_t Awb::estimateCCT(double red, double green, double blue)\n> >   */\n> >  void Awb::prepare(IPAContext &context, rkisp1_params_cfg *params)\n> >  {\n> > -     params->others.awb_gain_config.gain_green_b = 256 * context.frameContext.awb.gains.green;\n> > -     params->others.awb_gain_config.gain_blue = 256 * context.frameContext.awb.gains.blue;\n> > -     params->others.awb_gain_config.gain_red = 256 * context.frameContext.awb.gains.red;\n> > -     params->others.awb_gain_config.gain_green_r = 256 * context.frameContext.awb.gains.green;\n> > +     params->others.awb_gain_config.gain_green_b = 256 * context.activeState.awb.gains.green;\n> > +     params->others.awb_gain_config.gain_blue = 256 * context.activeState.awb.gains.blue;\n> > +     params->others.awb_gain_config.gain_red = 256 * context.activeState.awb.gains.red;\n> > +     params->others.awb_gain_config.gain_green_r = 256 * context.activeState.awb.gains.green;\n> >  \n> >       /* Update the gains. */\n> >       params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_AWB_GAIN;\n> >  \n> >       /* If we already have configured the gains and window, return. */\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       /* Configure the gains to apply. */\n> > @@ -125,7 +125,7 @@ void Awb::process([[maybe_unused]] IPAContext &context,\n> >  {\n> >       const rkisp1_cif_isp_stat *params = &stats->params;\n> >       const rkisp1_cif_isp_awb_stat *awb = &params->awb;\n> > -     IPAFrameContext &frameContext = context.frameContext;\n> > +     IPAActiveState &activeState = context.activeState;\n> >  \n> >       /* Get the YCbCr mean values */\n> >       double yMean = awb->awb_mean[0].mean_y_or_g;\n> > @@ -157,22 +157,22 @@ void Awb::process([[maybe_unused]] IPAContext &context,\n> >  \n> >       /* Filter the values to avoid oscillations. */\n> >       double speed = 0.2;\n> > -     redGain = speed * redGain + (1 - speed) * frameContext.awb.gains.red;\n> > -     blueGain = speed * blueGain + (1 - speed) * frameContext.awb.gains.blue;\n> > +     redGain = speed * redGain + (1 - speed) * activeState.awb.gains.red;\n> > +     blueGain = speed * blueGain + (1 - speed) * activeState.awb.gains.blue;\n> >  \n> >       /*\n> >        * Gain values are unsigned integer value, range 0 to 4 with 8 bit\n> >        * fractional part.\n> >        */\n> > -     frameContext.awb.gains.red = std::clamp(redGain, 0.0, 1023.0 / 256);\n> > -     frameContext.awb.gains.blue = std::clamp(blueGain, 0.0, 1023.0 / 256);\n> > +     activeState.awb.gains.red = std::clamp(redGain, 0.0, 1023.0 / 256);\n> > +     activeState.awb.gains.blue = std::clamp(blueGain, 0.0, 1023.0 / 256);\n> >       /* Hardcode the green gain to 1.0. */\n> > -     frameContext.awb.gains.green = 1.0;\n> > +     activeState.awb.gains.green = 1.0;\n> >  \n> > -     frameContext.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);\n> > +     activeState.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);\n> >  \n> > -     LOG(RkISP1Awb, Debug) << \"Gain found for red: \" << context.frameContext.awb.gains.red\n> > -                           << \" and for blue: \" << context.frameContext.awb.gains.blue;\n> > +     LOG(RkISP1Awb, Debug) << \"Gain found for red: \" << context.activeState.awb.gains.red\n> > +                           << \" and for blue: \" << context.activeState.awb.gains.blue;\n> >  }\n> >  \n> >  REGISTER_IPA_ALGORITHM(Awb, \"Awb\")\n> > diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp\n> > index a58569fa2dc2..4d55a2d529cb 100644\n> > --- a/src/ipa/rkisp1/algorithms/blc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/blc.cpp\n> > @@ -68,7 +68,7 @@ int BlackLevelCorrection::init([[maybe_unused]] IPAContext &context,\n> >  void BlackLevelCorrection::prepare(IPAContext &context,\n> >                                  rkisp1_params_cfg *params)\n> >  {\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       if (!tuningParameters_)\n> > diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp\n> > index bca5ab6907d6..a3b778d1c908 100644\n> > --- a/src/ipa/rkisp1/algorithms/cproc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/cproc.cpp\n> > @@ -40,7 +40,7 @@ void ColorProcessing::queueRequest(IPAContext &context,\n> >                                  [[maybe_unused]] const uint32_t frame,\n> >                                  const ControlList &controls)\n> >  {\n> > -     auto &cproc = context.frameContext.cproc;\n> > +     auto &cproc = context.activeState.cproc;\n> >  \n> >       const auto &brightness = controls.get(controls::Brightness);\n> >       if (brightness) {\n> > @@ -73,7 +73,7 @@ void ColorProcessing::queueRequest(IPAContext &context,\n> >  void ColorProcessing::prepare(IPAContext &context,\n> >                             rkisp1_params_cfg *params)\n> >  {\n> > -     auto &cproc = context.frameContext.cproc;\n> > +     auto &cproc = context.activeState.cproc;\n> >  \n> >       /* Check if the algorithm configuration has been updated. */\n> >       if (!cproc.updateParams)\n> > diff --git a/src/ipa/rkisp1/algorithms/dpcc.cpp b/src/ipa/rkisp1/algorithms/dpcc.cpp\n> > index 69bc651eaf08..93d37b1dae44 100644\n> > --- a/src/ipa/rkisp1/algorithms/dpcc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/dpcc.cpp\n> > @@ -234,7 +234,7 @@ int DefectPixelClusterCorrection::init([[maybe_unused]] IPAContext &context,\n> >  void DefectPixelClusterCorrection::prepare(IPAContext &context,\n> >                                          rkisp1_params_cfg *params)\n> >  {\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       if (!initialized_)\n> > diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp\n> > index 8ca10fd1ee9d..bc7fc1f32f34 100644\n> > --- a/src/ipa/rkisp1/algorithms/filter.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/filter.cpp\n> > @@ -46,7 +46,7 @@ void Filter::queueRequest(IPAContext &context,\n> >                         [[maybe_unused]] const uint32_t frame,\n> >                         const ControlList &controls)\n> >  {\n> > -     auto &filter = context.frameContext.filter;\n> > +     auto &filter = context.activeState.filter;\n> >  \n> >       const auto &sharpness = controls.get(controls::Sharpness);\n> >       if (sharpness) {\n> > @@ -87,7 +87,7 @@ void Filter::queueRequest(IPAContext &context,\n> >   */\n> >  void Filter::prepare(IPAContext &context, rkisp1_params_cfg *params)\n> >  {\n> > -     auto &filter = context.frameContext.filter;\n> > +     auto &filter = context.activeState.filter;\n> >  \n> >       /* Check if the algorithm configuration has been updated. */\n> >       if (!filter.updateParams)\n> > diff --git a/src/ipa/rkisp1/algorithms/gsl.cpp b/src/ipa/rkisp1/algorithms/gsl.cpp\n> > index 2fd1a23d3a9b..dd9974627cd2 100644\n> > --- a/src/ipa/rkisp1/algorithms/gsl.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/gsl.cpp\n> > @@ -121,7 +121,7 @@ int GammaSensorLinearization::init([[maybe_unused]] IPAContext &context,\n> >  void GammaSensorLinearization::prepare(IPAContext &context,\n> >                                      rkisp1_params_cfg *params)\n> >  {\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       if (!initialized_)\n> > diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > index 05c8c0dab5c8..4ed467086199 100644\n> > --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> > @@ -125,7 +125,7 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,\n> >  void LensShadingCorrection::prepare(IPAContext &context,\n> >                                   rkisp1_params_cfg *params)\n> >  {\n> > -     if (context.frameContext.frameCount > 0)\n> > +     if (context.activeState.frameCount > 0)\n> >               return;\n> >  \n> >       if (!initialized_)\n> > diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> > index 2bdb6a81d7c9..a8daeca487ae 100644\n> > --- a/src/ipa/rkisp1/ipa_context.h\n> > +++ b/src/ipa/rkisp1/ipa_context.h\n> > @@ -41,7 +41,7 @@ struct IPASessionConfiguration {\n> >       } hw;\n> >  };\n> >  \n> > -struct IPAFrameContext {\n> > +struct IPAActiveState {\n> >       struct {\n> >               uint32_t exposure;\n> >               double gain;\n> > @@ -78,9 +78,12 @@ struct IPAFrameContext {\n> >       unsigned int frameCount;\n> >  };\n> >  \n> > +struct IPAFrameContext {\n> > +};\n> > +\n> >  struct IPAContext {\n> >       IPASessionConfiguration configuration;\n> > -     IPAFrameContext frameContext;\n> > +     IPAActiveState activeState;\n> >  };\n> >  \n> >  } /* namespace ipa::rkisp1 */\n> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> > index af22dbeb3da5..a64716f588a8 100644\n> > --- a/src/ipa/rkisp1/rkisp1.cpp\n> > +++ b/src/ipa/rkisp1/rkisp1.cpp\n> > @@ -252,7 +252,7 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,\n> >       context_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);\n> >       context_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);\n> >  \n> > -     context_.frameContext.frameCount = 0;\n> > +     context_.activeState.frameCount = 0;\n> >  \n> >       for (auto const &algo : algorithms()) {\n> >               int ret = algo->configure(context_, info);\n> > @@ -312,7 +312,7 @@ void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n> >               algo->prepare(context_, params);\n> >  \n> >       paramsBufferReady.emit(frame);\n> > -     context_.frameContext.frameCount++;\n> > +     context_.activeState.frameCount++;\n> >  }\n> >  \n> >  void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,\n> > @@ -322,9 +322,9 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n> >               reinterpret_cast<rkisp1_stat_buffer *>(\n> >                       mappedBuffers_.at(bufferId).planes()[0].data());\n> >  \n> > -     context_.frameContext.sensor.exposure =\n> > +     context_.activeState.sensor.exposure =\n> >               sensorControls.get(V4L2_CID_EXPOSURE).get<int32_t>();\n> > -     context_.frameContext.sensor.gain =\n> > +     context_.activeState.sensor.gain =\n> >               camHelper_->gain(sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>());\n> >  \n> >       unsigned int aeState = 0;\n> > @@ -339,8 +339,8 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n> >  \n> >  void IPARkISP1::setControls(unsigned int frame)\n> >  {\n> > -     uint32_t exposure = context_.frameContext.agc.exposure;\n> > -     uint32_t gain = camHelper_->gainCode(context_.frameContext.agc.gain);\n> > +     uint32_t exposure = context_.activeState.agc.exposure;\n> > +     uint32_t gain = camHelper_->gainCode(context_.activeState.agc.gain);\n> >  \n> >       ControlList ctrls(ctrls_);\n> >       ctrls.set(V4L2_CID_EXPOSURE, static_cast<int32_t>(exposure));\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 80807C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Aug 2022 12:14:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A825961FC0;\n\tTue, 16 Aug 2022 14:14:11 +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 7CBD361FA9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Aug 2022 14:14:09 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DE8CD25B;\n\tTue, 16 Aug 2022 14:14:08 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660652051;\n\tbh=EjSRU4AZp+5rNH/q5HIJpO+zfXrsPE1AtDI4204hfLg=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=solS1LNy6Ck0dW1Z+b9lqjur7tG0GGlYD8YYraOI3IQXMJnngHWYPCKN40uieK5vR\n\t0Xps/Xjxbk6VLvvdCIcIvHRCY7TmMpiYqj7TIiqG+n3VP+RGaMym1EgfRar4Zl6/Fl\n\tLYFNwIsOMQ1sxFyLrBI7VIsBd83OR8IldXFaevcDeDfy0HPgolSflFr4B1KVrNrN81\n\tluAjRdmmX35NzYDpa82bt9NaJJteIfOnRa19yttlOnue3/L4LMq3KAAd2HEhYL7Vha\n\tq9xGoXAQODNSEjqkDC30fSH5gpP3kkTeV/R+i7aSkCaHLnEhOHckCc+Jd8JI4N/Tg8\n\t8roMedk5TlA8w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1660652049;\n\tbh=EjSRU4AZp+5rNH/q5HIJpO+zfXrsPE1AtDI4204hfLg=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=NrTDyB/WCSdTTxv8sFrVMJJ1DKdkngoIQXiaiperslxp6vsne89W1qFGGoSjhK3sf\n\t7HJRQvtYUJ+94lC+WGRu7kXLEeqZKoteJ5659BQ8fx486Yz5qHONCZdlszf26mp8Ef\n\tzqI5Yjlz4/4yOw2ldc1fhB70jdwuMYxQ4gr7D1J4="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"NrTDyB/W\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<YvsR5UWS4JFN1Frq@pendragon.ideasonboard.com>","References":"<20220805135312.47497-1-jacopo@jmondi.org>\n\t<20220805135312.47497-6-jacopo@jmondi.org>\n\t<YvsR5UWS4JFN1Frq@pendragon.ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tLaurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Date":"Tue, 16 Aug 2022 13:14:06 +0100","Message-ID":"<166065204654.3403653.16152626318561900287@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v2 05/10] ipa: rkisp1: Rename\n\tframeContext to activeState","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@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>"}}]