[{"id":36910,"web_url":"https://patchwork.libcamera.org/comment/36910/","msgid":"<20251119022546.GA10711@pendragon.ideasonboard.com>","date":"2025-11-19T04:32:30","subject":"Re: [PATCH v3 05/19] ipa: ipu3: Move exposure limits to sensor\n\tconfig","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Fri, Nov 14, 2025 at 03:17:00PM +0100, Jacopo Mondi wrote:\n> Move the exposure limits (shutter time and gains) in the IPAContext\n> sensor configuration and not in the 'agc' member.\n> \n> This aligns the IPU3 IPA with the RkISP1 and Mali ones and will help\n> unifying the handling of sensor configuration data through a common\n> type.\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  src/ipa/ipu3/algorithms/agc.cpp |  8 ++++----\n>  src/ipa/ipu3/ipa_context.cpp    | 27 +++++++++++----------------\n>  src/ipa/ipu3/ipa_context.h      |  9 +++------\n>  src/ipa/ipu3/ipu3.cpp           |  8 ++++----\n>  4 files changed, 22 insertions(+), 30 deletions(-)\n> \n> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\n> index b0d89541da8550bd50472779da7fa8e33b96e2f0..4574f3a1a9cd3f40b1b1402238809ee1a777946d 100644\n> --- a/src/ipa/ipu3/algorithms/agc.cpp\n> +++ b/src/ipa/ipu3/algorithms/agc.cpp\n> @@ -101,12 +101,12 @@ int Agc::configure(IPAContext &context,\n>  \tstride_ = configuration.grid.stride;\n>  \tbdsGrid_ = configuration.grid.bdsGrid;\n>  \n> -\tminExposureTime_ = configuration.agc.minExposureTime;\n> -\tmaxExposureTime_ = std::min(configuration.agc.maxExposureTime,\n> +\tminExposureTime_ = configuration.sensor.minExposureTime;\n> +\tmaxExposureTime_ = std::min(configuration.sensor.maxExposureTime,\n>  \t\t\t\t    kMaxExposureTime);\n>  \n> -\tminAnalogueGain_ = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> -\tmaxAnalogueGain_ = configuration.agc.maxAnalogueGain;\n> +\tminAnalogueGain_ = std::max(configuration.sensor.minAnalogueGain, kMinAnalogueGain);\n> +\tmaxAnalogueGain_ = configuration.sensor.maxAnalogueGain;\n>  \n>  \t/* Configure the default exposure and gain. */\n>  \tactiveState.agc.gain = minAnalogueGain_;\n> diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp\n> index 5d0ebaaec454fca823851228614a3eb229f0132b..47ae750f0ddb859e1a08e75e255b8decacd730a1 100644\n> --- a/src/ipa/ipu3/ipa_context.cpp\n> +++ b/src/ipa/ipu3/ipa_context.cpp\n> @@ -96,8 +96,17 @@ namespace libcamera::ipa::ipu3 {\n>   */\n>  \n>  /**\n> - * \\var IPASessionConfiguration::agc\n> - * \\brief AGC parameters configuration of the IPA\n> + * \\var IPASessionConfiguration::sensor\n> + * \\brief Sensor-specific configuration of the IPA\n> + *\n> + * \\var IPASessionConfiguration::sensor.lineDuration\n> + * \\brief Line duration in microseconds\n> + *\n> + * \\var IPASessionConfiguration::sensor.defVBlank\n> + * \\brief The default vblank value of the sensor\n> + *\n> + * \\var IPASessionConfiguration::sensor.size\n> + * \\brief Sensor output resolution\n>   *\n>   * \\var IPASessionConfiguration::agc.minExposureTime\n>   * \\brief Minimum exposure time supported with the configured sensor\n> @@ -112,20 +121,6 @@ namespace libcamera::ipa::ipu3 {\n>   * \\brief Maximum analogue gain supported with the configured sensor\n>   */\n>  \n> -/**\n> - * \\var IPASessionConfiguration::sensor\n> - * \\brief Sensor-specific configuration of the IPA\n> - *\n> - * \\var IPASessionConfiguration::sensor.lineDuration\n> - * \\brief Line duration in microseconds\n> - *\n> - * \\var IPASessionConfiguration::sensor.defVBlank\n> - * \\brief The default vblank value of the sensor\n> - *\n> - * \\var IPASessionConfiguration::sensor.size\n> - * \\brief Sensor output resolution\n> - */\n> -\n>  /**\n>   * \\var IPAActiveState::agc\n>   * \\brief Context for the Automatic Gain Control algorithm\n> diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h\n> index 4544d663642fb6fde1cf69a32f1c0fbb2fbd98f6..baf84b8cbc9a1ff9411c0a994e35317b613580dd 100644\n> --- a/src/ipa/ipu3/ipa_context.h\n> +++ b/src/ipa/ipu3/ipa_context.h\n> @@ -34,16 +34,13 @@ struct IPASessionConfiguration {\n>  \t} af;\n>  \n>  \tstruct {\n> +\t\tint32_t defVBlank;\n> +\t\tutils::Duration lineDuration;\n> +\t\tSize size;\n>  \t\tutils::Duration minExposureTime;\n>  \t\tutils::Duration maxExposureTime;\n>  \t\tdouble minAnalogueGain;\n>  \t\tdouble maxAnalogueGain;\n> -\t} agc;\n> -\n> -\tstruct {\n> -\t\tint32_t defVBlank;\n> -\t\tutils::Duration lineDuration;\n> -\t\tSize size;\n>  \t} sensor;\n>  };\n>  \n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index 36d8f0da430a3d4f94e2a3f760850519742ea992..60f22727a0f75e374b53fb6d3185946b70c25582 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -217,10 +217,10 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)\n>  \t *\n>  \t * \\todo take VBLANK into account for maximum exposure time\n>  \t */\n> -\tcontext_.configuration.agc.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;\n> -\tcontext_.configuration.agc.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;\n> -\tcontext_.configuration.agc.minAnalogueGain = context_.camHelper->gain(minGain);\n> -\tcontext_.configuration.agc.maxAnalogueGain = context_.camHelper->gain(maxGain);\n> +\tcontext_.configuration.sensor.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;\n> +\tcontext_.configuration.sensor.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;\n> +\tcontext_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain);\n> +\tcontext_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain);\n>  }\n>  \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 EACCDBD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 Nov 2025 04:33:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 75B1560AAB;\n\tWed, 19 Nov 2025 05:33:07 +0100 (CET)","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 A76BE60A80\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 Nov 2025 05:33:05 +0100 (CET)","from pendragon.ideasonboard.com (unknown [205.220.129.225])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id ABA96B5;\n\tWed, 19 Nov 2025 05:30:58 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"mzbBpsEn\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1763526661;\n\tbh=s/B/06hwI0mBQ15m69lxy/RBpMj/X2YakzFg7WV3u0k=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=mzbBpsEnSh0FJMegA61E5oG3REiHcBjQl22NU2QG9Tw9gUogI+bz78PL31woGIJmD\n\t8lGmQkRgtDqapcVm1fa4B/AH5HYVylFqdcNM6Bt06qPonvGL60tKJaQEeF2c4k5FrL\n\tltaesae7/UlDXhjKPo6BKdDebDokJppLHJgRE9Us=","Date":"Wed, 19 Nov 2025 13:32:30 +0900","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tRobert Mader <robert.mader@collabora.com>, \n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v3 05/19] ipa: ipu3: Move exposure limits to sensor\n\tconfig","Message-ID":"<20251119022546.GA10711@pendragon.ideasonboard.com>","References":"<20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com>\n\t<20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38119,"web_url":"https://patchwork.libcamera.org/comment/38119/","msgid":"<177039183096.607498.1562880211346313567@neptunite.rasen.tech>","date":"2026-02-06T15:30:30","subject":"Re: [PATCH v3 05/19] ipa: ipu3: Move exposure limits to sensor\n\tconfig","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2025-11-14 23:17:00)\n> Move the exposure limits (shutter time and gains) in the IPAContext\n> sensor configuration and not in the 'agc' member.\n> \n> This aligns the IPU3 IPA with the RkISP1 and Mali ones and will help\n> unifying the handling of sensor configuration data through a common\n> type.\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/ipa/ipu3/algorithms/agc.cpp |  8 ++++----\n>  src/ipa/ipu3/ipa_context.cpp    | 27 +++++++++++----------------\n>  src/ipa/ipu3/ipa_context.h      |  9 +++------\n>  src/ipa/ipu3/ipu3.cpp           |  8 ++++----\n>  4 files changed, 22 insertions(+), 30 deletions(-)\n> \n> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\n> index b0d89541da8550bd50472779da7fa8e33b96e2f0..4574f3a1a9cd3f40b1b1402238809ee1a777946d 100644\n> --- a/src/ipa/ipu3/algorithms/agc.cpp\n> +++ b/src/ipa/ipu3/algorithms/agc.cpp\n> @@ -101,12 +101,12 @@ int Agc::configure(IPAContext &context,\n>         stride_ = configuration.grid.stride;\n>         bdsGrid_ = configuration.grid.bdsGrid;\n>  \n> -       minExposureTime_ = configuration.agc.minExposureTime;\n> -       maxExposureTime_ = std::min(configuration.agc.maxExposureTime,\n> +       minExposureTime_ = configuration.sensor.minExposureTime;\n> +       maxExposureTime_ = std::min(configuration.sensor.maxExposureTime,\n>                                     kMaxExposureTime);\n>  \n> -       minAnalogueGain_ = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);\n> -       maxAnalogueGain_ = configuration.agc.maxAnalogueGain;\n> +       minAnalogueGain_ = std::max(configuration.sensor.minAnalogueGain, kMinAnalogueGain);\n> +       maxAnalogueGain_ = configuration.sensor.maxAnalogueGain;\n>  \n>         /* Configure the default exposure and gain. */\n>         activeState.agc.gain = minAnalogueGain_;\n> diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp\n> index 5d0ebaaec454fca823851228614a3eb229f0132b..47ae750f0ddb859e1a08e75e255b8decacd730a1 100644\n> --- a/src/ipa/ipu3/ipa_context.cpp\n> +++ b/src/ipa/ipu3/ipa_context.cpp\n> @@ -96,8 +96,17 @@ namespace libcamera::ipa::ipu3 {\n>   */\n>  \n>  /**\n> - * \\var IPASessionConfiguration::agc\n> - * \\brief AGC parameters configuration of the IPA\n> + * \\var IPASessionConfiguration::sensor\n> + * \\brief Sensor-specific configuration of the IPA\n> + *\n> + * \\var IPASessionConfiguration::sensor.lineDuration\n> + * \\brief Line duration in microseconds\n> + *\n> + * \\var IPASessionConfiguration::sensor.defVBlank\n> + * \\brief The default vblank value of the sensor\n> + *\n> + * \\var IPASessionConfiguration::sensor.size\n> + * \\brief Sensor output resolution\n>   *\n>   * \\var IPASessionConfiguration::agc.minExposureTime\n>   * \\brief Minimum exposure time supported with the configured sensor\n> @@ -112,20 +121,6 @@ namespace libcamera::ipa::ipu3 {\n>   * \\brief Maximum analogue gain supported with the configured sensor\n>   */\n>  \n> -/**\n> - * \\var IPASessionConfiguration::sensor\n> - * \\brief Sensor-specific configuration of the IPA\n> - *\n> - * \\var IPASessionConfiguration::sensor.lineDuration\n> - * \\brief Line duration in microseconds\n> - *\n> - * \\var IPASessionConfiguration::sensor.defVBlank\n> - * \\brief The default vblank value of the sensor\n> - *\n> - * \\var IPASessionConfiguration::sensor.size\n> - * \\brief Sensor output resolution\n> - */\n> -\n>  /**\n>   * \\var IPAActiveState::agc\n>   * \\brief Context for the Automatic Gain Control algorithm\n> diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h\n> index 4544d663642fb6fde1cf69a32f1c0fbb2fbd98f6..baf84b8cbc9a1ff9411c0a994e35317b613580dd 100644\n> --- a/src/ipa/ipu3/ipa_context.h\n> +++ b/src/ipa/ipu3/ipa_context.h\n> @@ -34,16 +34,13 @@ struct IPASessionConfiguration {\n>         } af;\n>  \n>         struct {\n> +               int32_t defVBlank;\n> +               utils::Duration lineDuration;\n> +               Size size;\n>                 utils::Duration minExposureTime;\n>                 utils::Duration maxExposureTime;\n>                 double minAnalogueGain;\n>                 double maxAnalogueGain;\n> -       } agc;\n> -\n> -       struct {\n> -               int32_t defVBlank;\n> -               utils::Duration lineDuration;\n> -               Size size;\n>         } sensor;\n>  };\n>  \n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index 36d8f0da430a3d4f94e2a3f760850519742ea992..60f22727a0f75e374b53fb6d3185946b70c25582 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -217,10 +217,10 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)\n>          *\n>          * \\todo take VBLANK into account for maximum exposure time\n>          */\n> -       context_.configuration.agc.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;\n> -       context_.configuration.agc.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;\n> -       context_.configuration.agc.minAnalogueGain = context_.camHelper->gain(minGain);\n> -       context_.configuration.agc.maxAnalogueGain = context_.camHelper->gain(maxGain);\n> +       context_.configuration.sensor.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;\n> +       context_.configuration.sensor.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;\n> +       context_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain);\n> +       context_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain);\n>  }\n>  \n>  /**\n> \n> -- \n> 2.51.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 EE00CC32EF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  6 Feb 2026 15:30:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 189536209C;\n\tFri,  6 Feb 2026 16:30:38 +0100 (CET)","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 54C9E62093\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Feb 2026 16:30:36 +0100 (CET)","from neptunite.rasen.tech (unknown\n\t[IPv6:2404:7a81:160:2100:5247:7b72:2b7:10da])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 4B58FA06;\n\tFri,  6 Feb 2026 16:29:52 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"unG+UYdm\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1770391792;\n\tbh=bHVziOZ7ZQpV2/2+pVOEWwwyErKEuOfb2U+yW8tkdVM=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=unG+UYdmwxWmuACljv/mmj+X57JFxae7PbyigXcJ05j9/tQVEXdqEI9nHEq0J6Krm\n\tlHWQeM30qGZE0eN87UwVJJrKkmd2CNk/EefgYg3P+xEXUXonfd+yMS69yzHJnjw5eC\n\t9FBaC8k8DK0LxK4qWtsSkvuBJpt5g9vPT04kQRDA=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com>","References":"<20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com>\n\t<20251114-exposure-limits-v3-5-b7c07feba026@ideasonboard.com>","Subject":"Re: [PATCH v3 05/19] ipa: ipu3: Move exposure limits to sensor\n\tconfig","From":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, Niklas =?utf-8?b?U8O2?=\n\t=?utf-8?q?derlund?= <niklas.soderlund@ragnatech.se>, Robert Mader\n\t<robert.mader@collabora.com>, libcamera-devel@lists.libcamera.org","Date":"Sat, 07 Feb 2026 00:30:30 +0900","Message-ID":"<177039183096.607498.1562880211346313567@neptunite.rasen.tech>","User-Agent":"alot/0.0.0","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]