[{"id":33786,"web_url":"https://patchwork.libcamera.org/comment/33786/","msgid":"<174343985456.3394313.9869983033639067628@ping.linuxembedded.co.uk>","date":"2025-03-31T16:50:54","subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Stefan Klug (2025-03-31 15:43:48)\n> Now that agc_mean_luminance supports exposure correction, implement the\n> corresponding ExposureValue control for rkisp1.\n\nOh, that's an exciting development ...\n\n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> ---\n>  src/ipa/rkisp1/algorithms/agc.cpp | 10 ++++++++++\n>  src/ipa/rkisp1/ipa_context.h      |  2 ++\n>  2 files changed, 12 insertions(+)\n> \n> diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\n> index b3ac9400b74f..8e77455e7afd 100644\n> --- a/src/ipa/rkisp1/algorithms/agc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/agc.cpp\n> @@ -158,6 +158,7 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)\n>                             ControlValue(controls::AnalogueGainModeAuto));\n>         /* \\todo Move this to the Camera class */\n>         context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true, true);\n> +       context.ctrlMap[&controls::ExposureValue] = ControlInfo(-8.0f, 8.0f, 0.0f);\n>         context.ctrlMap.merge(controls());\n>  \n>         return 0;\n> @@ -180,6 +181,7 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n>         context.activeState.agc.manual.exposure = context.activeState.agc.automatic.exposure;\n>         context.activeState.agc.autoExposureEnabled = !context.configuration.raw;\n>         context.activeState.agc.autoGainEnabled = !context.configuration.raw;\n> +       context.activeState.agc.exposureValue = 0.0;\n>  \n>         context.activeState.agc.constraintMode =\n>                 static_cast<controls::AeConstraintModeEnum>(constraintModes().begin()->first);\n> @@ -302,6 +304,11 @@ void Agc::queueRequest(IPAContext &context,\n>                         static_cast<controls::AeConstraintModeEnum>(*constraintMode);\n>         frameContext.agc.constraintMode = agc.constraintMode;\n>  \n> +       const auto &exposureValue = controls.get(controls::ExposureValue);\n> +       if (exposureValue)\n> +               agc.exposureValue = *exposureValue;\n> +       frameContext.agc.exposureValue = agc.exposureValue;\n> +\n>         const auto &frameDurationLimits = controls.get(controls::FrameDurationLimits);\n>         if (frameDurationLimits) {\n>                 /* Limit the control value to the limits in ControlInfo */\n> @@ -408,6 +415,7 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,\n>         metadata.set(controls::AeMeteringMode, frameContext.agc.meteringMode);\n>         metadata.set(controls::AeExposureMode, frameContext.agc.exposureMode);\n>         metadata.set(controls::AeConstraintMode, frameContext.agc.constraintMode);\n> +       metadata.set(controls::ExposureValue, frameContext.agc.exposureValue);\n>  }\n>  \n>  /**\n> @@ -557,6 +565,8 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,\n>         double analogueGain = frameContext.sensor.gain;\n>         utils::Duration effectiveExposureValue = exposureTime * analogueGain;\n>  \n> +       setExposureCompensation(pow(2.0, frameContext.agc.exposureValue));\n> +\n\nwhile the patch overall sounds and looks pretty good - I'm not sure I've\nseen setExposureCompensation() added to the helpers yet - so perhaps\nthis patch is supposed to be on a different series?\n\n--\nKieran\n\n\n>         utils::Duration newExposureTime;\n>         double aGain, dGain;\n>         std::tie(newExposureTime, aGain, dGain) =\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index f0d504215d34..7ccc7b501aff 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -81,6 +81,7 @@ struct IPAActiveState {\n>  \n>                 bool autoExposureEnabled;\n>                 bool autoGainEnabled;\n> +               double exposureValue;\n>                 controls::AeConstraintModeEnum constraintMode;\n>                 controls::AeExposureModeEnum exposureMode;\n>                 controls::AeMeteringModeEnum meteringMode;\n> @@ -129,6 +130,7 @@ struct IPAFrameContext : public FrameContext {\n>         struct {\n>                 uint32_t exposure;\n>                 double gain;\n> +               double exposureValue;\n>                 uint32_t vblank;\n>                 bool autoExposureEnabled;\n>                 bool autoGainEnabled;\n> -- \n> 2.43.0\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 863FBC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 31 Mar 2025 16:51:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5AA9468981;\n\tMon, 31 Mar 2025 18:50:59 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AE92B68967\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 31 Mar 2025 18:50:57 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 05144725;\n\tMon, 31 Mar 2025 18:49:05 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"bfzFmw4F\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1743439746;\n\tbh=XIw4cisK7KXOtLUvIyaKaMgPWH9zyiJgDHt+stNzpdQ=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=bfzFmw4FDNJw4sQKMm9C8rm8qzRLOaUbzRJsF8S4qAbZ9O8Bqm6WiYb610N5cw5W0\n\t8QTKAKeEscHbNtFlbWuu2KKbnixFspMVYM/boYx/mv6xNRdauO8s+GK9V7h+Fb3Dc+\n\tW42WtPAW8c6pttbX4pZOc6mDqHHJwMOOXR0nE3sI=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250331144352.736700-10-stefan.klug@ideasonboard.com>","References":"<20250331144352.736700-1-stefan.klug@ideasonboard.com>\n\t<20250331144352.736700-10-stefan.klug@ideasonboard.com>","Subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 31 Mar 2025 17:50:54 +0100","Message-ID":"<174343985456.3394313.9869983033639067628@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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":33931,"web_url":"https://patchwork.libcamera.org/comment/33931/","msgid":"<dvlofd2j6bnni3jgr2o5pw3lhz2ixjgszcgerwzpwp7imuprn2@izpcaoetz3vg>","date":"2025-04-11T10:42:33","subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi Kieran,\n\nThank you for the review. \n\nOn Mon, Mar 31, 2025 at 05:50:54PM +0100, Kieran Bingham wrote:\n> Quoting Stefan Klug (2025-03-31 15:43:48)\n> > Now that agc_mean_luminance supports exposure correction, implement the\n> > corresponding ExposureValue control for rkisp1.\n> \n> Oh, that's an exciting development ...\n> \n> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > ---\n> >  src/ipa/rkisp1/algorithms/agc.cpp | 10 ++++++++++\n> >  src/ipa/rkisp1/ipa_context.h      |  2 ++\n> >  2 files changed, 12 insertions(+)\n> > \n> > diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\n> > index b3ac9400b74f..8e77455e7afd 100644\n> > --- a/src/ipa/rkisp1/algorithms/agc.cpp\n> > +++ b/src/ipa/rkisp1/algorithms/agc.cpp\n> > @@ -158,6 +158,7 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)\n> >                             ControlValue(controls::AnalogueGainModeAuto));\n> >         /* \\todo Move this to the Camera class */\n> >         context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true, true);\n> > +       context.ctrlMap[&controls::ExposureValue] = ControlInfo(-8.0f, 8.0f, 0.0f);\n> >         context.ctrlMap.merge(controls());\n> >  \n> >         return 0;\n> > @@ -180,6 +181,7 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n> >         context.activeState.agc.manual.exposure = context.activeState.agc.automatic.exposure;\n> >         context.activeState.agc.autoExposureEnabled = !context.configuration.raw;\n> >         context.activeState.agc.autoGainEnabled = !context.configuration.raw;\n> > +       context.activeState.agc.exposureValue = 0.0;\n> >  \n> >         context.activeState.agc.constraintMode =\n> >                 static_cast<controls::AeConstraintModeEnum>(constraintModes().begin()->first);\n> > @@ -302,6 +304,11 @@ void Agc::queueRequest(IPAContext &context,\n> >                         static_cast<controls::AeConstraintModeEnum>(*constraintMode);\n> >         frameContext.agc.constraintMode = agc.constraintMode;\n> >  \n> > +       const auto &exposureValue = controls.get(controls::ExposureValue);\n> > +       if (exposureValue)\n> > +               agc.exposureValue = *exposureValue;\n> > +       frameContext.agc.exposureValue = agc.exposureValue;\n> > +\n> >         const auto &frameDurationLimits = controls.get(controls::FrameDurationLimits);\n> >         if (frameDurationLimits) {\n> >                 /* Limit the control value to the limits in ControlInfo */\n> > @@ -408,6 +415,7 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,\n> >         metadata.set(controls::AeMeteringMode, frameContext.agc.meteringMode);\n> >         metadata.set(controls::AeExposureMode, frameContext.agc.exposureMode);\n> >         metadata.set(controls::AeConstraintMode, frameContext.agc.constraintMode);\n> > +       metadata.set(controls::ExposureValue, frameContext.agc.exposureValue);\n> >  }\n> >  \n> >  /**\n> > @@ -557,6 +565,8 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,\n> >         double analogueGain = frameContext.sensor.gain;\n> >         utils::Duration effectiveExposureValue = exposureTime * analogueGain;\n> >  \n> > +       setExposureCompensation(pow(2.0, frameContext.agc.exposureValue));\n> > +\n> \n> while the patch overall sounds and looks pretty good - I'm not sure I've\n> seen setExposureCompensation() added to the helpers yet - so perhaps\n> this patch is supposed to be on a different series?\n\nsetExposureCompensation() was added in the patch before. It works\nbecause the algorithm is derived from AgcMeanLuminance.\n\nBest regards,\nStefan\n\n> \n> --\n> Kieran\n> \n> \n> >         utils::Duration newExposureTime;\n> >         double aGain, dGain;\n> >         std::tie(newExposureTime, aGain, dGain) =\n> > diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> > index f0d504215d34..7ccc7b501aff 100644\n> > --- a/src/ipa/rkisp1/ipa_context.h\n> > +++ b/src/ipa/rkisp1/ipa_context.h\n> > @@ -81,6 +81,7 @@ struct IPAActiveState {\n> >  \n> >                 bool autoExposureEnabled;\n> >                 bool autoGainEnabled;\n> > +               double exposureValue;\n> >                 controls::AeConstraintModeEnum constraintMode;\n> >                 controls::AeExposureModeEnum exposureMode;\n> >                 controls::AeMeteringModeEnum meteringMode;\n> > @@ -129,6 +130,7 @@ struct IPAFrameContext : public FrameContext {\n> >         struct {\n> >                 uint32_t exposure;\n> >                 double gain;\n> > +               double exposureValue;\n> >                 uint32_t vblank;\n> >                 bool autoExposureEnabled;\n> >                 bool autoGainEnabled;\n> > -- \n> > 2.43.0\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 D15C4C3213\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 11 Apr 2025 10:42:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 30CF268A4C;\n\tFri, 11 Apr 2025 12:42:38 +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 E04FF689A5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 11 Apr 2025 12:42:36 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:5b21:2ad5:1023:7179])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 79E77667;\n\tFri, 11 Apr 2025 12:40:37 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"n3WN+pf+\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1744368037;\n\tbh=Wg0tWkZv+QOsR/IiI5FAD6a3JJJYPvEaKiRn0Pv5PHk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=n3WN+pf+H+jp/radYKCn94zNLyBoHHtBfQ4WpvHiXPV2bOC0Fq91dfYMjRaiZAsK0\n\t6egxhLDJTTfnOEWoOMFUcMNyzujgQCpZP2nNaPtDFUEBfH1kmAyiGbx+yZXItbnWwj\n\tEaThccjny53rMjw7KEgEON+Oj1KZ+S1/Ysm/aWRM=","Date":"Fri, 11 Apr 2025 12:42:33 +0200","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","Message-ID":"<dvlofd2j6bnni3jgr2o5pw3lhz2ixjgszcgerwzpwp7imuprn2@izpcaoetz3vg>","References":"<20250331144352.736700-1-stefan.klug@ideasonboard.com>\n\t<20250331144352.736700-10-stefan.klug@ideasonboard.com>\n\t<174343985456.3394313.9869983033639067628@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<174343985456.3394313.9869983033639067628@ping.linuxembedded.co.uk>","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":33933,"web_url":"https://patchwork.libcamera.org/comment/33933/","msgid":"<174446203669.722505.10503020186668538503@ping.linuxembedded.co.uk>","date":"2025-04-12T12:47:16","subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Stefan Klug (2025-04-11 11:42:33)\n> Hi Kieran,\n> \n> Thank you for the review. \n> \n> On Mon, Mar 31, 2025 at 05:50:54PM +0100, Kieran Bingham wrote:\n> > Quoting Stefan Klug (2025-03-31 15:43:48)\n> > > Now that agc_mean_luminance supports exposure correction, implement the\n> > > corresponding ExposureValue control for rkisp1.\n> > \n> > Oh, that's an exciting development ...\n> > \n> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > ---\n> > >  src/ipa/rkisp1/algorithms/agc.cpp | 10 ++++++++++\n> > >  src/ipa/rkisp1/ipa_context.h      |  2 ++\n> > >  2 files changed, 12 insertions(+)\n> > > \n> > > diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\n> > > index b3ac9400b74f..8e77455e7afd 100644\n> > > --- a/src/ipa/rkisp1/algorithms/agc.cpp\n> > > +++ b/src/ipa/rkisp1/algorithms/agc.cpp\n> > > @@ -158,6 +158,7 @@ int Agc::init(IPAContext &context, const YamlObject &tuningData)\n> > >                             ControlValue(controls::AnalogueGainModeAuto));\n> > >         /* \\todo Move this to the Camera class */\n> > >         context.ctrlMap[&controls::AeEnable] = ControlInfo(false, true, true);\n> > > +       context.ctrlMap[&controls::ExposureValue] = ControlInfo(-8.0f, 8.0f, 0.0f);\n> > >         context.ctrlMap.merge(controls());\n> > >  \n> > >         return 0;\n> > > @@ -180,6 +181,7 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n> > >         context.activeState.agc.manual.exposure = context.activeState.agc.automatic.exposure;\n> > >         context.activeState.agc.autoExposureEnabled = !context.configuration.raw;\n> > >         context.activeState.agc.autoGainEnabled = !context.configuration.raw;\n> > > +       context.activeState.agc.exposureValue = 0.0;\n> > >  \n> > >         context.activeState.agc.constraintMode =\n> > >                 static_cast<controls::AeConstraintModeEnum>(constraintModes().begin()->first);\n> > > @@ -302,6 +304,11 @@ void Agc::queueRequest(IPAContext &context,\n> > >                         static_cast<controls::AeConstraintModeEnum>(*constraintMode);\n> > >         frameContext.agc.constraintMode = agc.constraintMode;\n> > >  \n> > > +       const auto &exposureValue = controls.get(controls::ExposureValue);\n> > > +       if (exposureValue)\n> > > +               agc.exposureValue = *exposureValue;\n> > > +       frameContext.agc.exposureValue = agc.exposureValue;\n> > > +\n> > >         const auto &frameDurationLimits = controls.get(controls::FrameDurationLimits);\n> > >         if (frameDurationLimits) {\n> > >                 /* Limit the control value to the limits in ControlInfo */\n> > > @@ -408,6 +415,7 @@ void Agc::fillMetadata(IPAContext &context, IPAFrameContext &frameContext,\n> > >         metadata.set(controls::AeMeteringMode, frameContext.agc.meteringMode);\n> > >         metadata.set(controls::AeExposureMode, frameContext.agc.exposureMode);\n> > >         metadata.set(controls::AeConstraintMode, frameContext.agc.constraintMode);\n> > > +       metadata.set(controls::ExposureValue, frameContext.agc.exposureValue);\n> > >  }\n> > >  \n> > >  /**\n> > > @@ -557,6 +565,8 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,\n> > >         double analogueGain = frameContext.sensor.gain;\n> > >         utils::Duration effectiveExposureValue = exposureTime * analogueGain;\n> > >  \n> > > +       setExposureCompensation(pow(2.0, frameContext.agc.exposureValue));\n> > > +\n> > \n> > while the patch overall sounds and looks pretty good - I'm not sure I've\n> > seen setExposureCompensation() added to the helpers yet - so perhaps\n> > this patch is supposed to be on a different series?\n> \n> setExposureCompensation() was added in the patch before. It works\n> because the algorithm is derived from AgcMeanLuminance.\n\nAha, it looks like I completely missed that :D Sorry - but indeed.\n\nI'll take a look at the new version I see for any tagging opportunities\n;-)\n\n--\nKieran","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 897BEC327D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 12 Apr 2025 12:47:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B706268AAF;\n\tSat, 12 Apr 2025 14:47:22 +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 36D1868A7B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 12 Apr 2025 14:47:20 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id ABA5D50A;\n\tSat, 12 Apr 2025 14:45:19 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"n5YpaDZt\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1744461919;\n\tbh=ozMbYPrBFXW7ivmxsRwbXUy4WBb5X99MOnkCTtfqwc8=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=n5YpaDZtRClBoRQafF4cZIRdWFNLzp0be94iEy9v8vKj7qZtpegzrUd/Yniewzst4\n\tB35xLOKjZlwWZhF9YpxvClf5fUnqnysr5UVz8aPb46wPVDJu54dmnojMFxFOgLpe4i\n\tyNV32R20rjwLj0G9a0KLU15FeKXZydzVcwA/ucXo=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<dvlofd2j6bnni3jgr2o5pw3lhz2ixjgszcgerwzpwp7imuprn2@izpcaoetz3vg>","References":"<20250331144352.736700-1-stefan.klug@ideasonboard.com>\n\t<20250331144352.736700-10-stefan.klug@ideasonboard.com>\n\t<174343985456.3394313.9869983033639067628@ping.linuxembedded.co.uk>\n\t<dvlofd2j6bnni3jgr2o5pw3lhz2ixjgszcgerwzpwp7imuprn2@izpcaoetz3vg>","Subject":"Re: [PATCH 9/9] ipa: rkisp1: agc: Implement ExposureValue control","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","To":"Stefan Klug <stefan.klug@ideasonboard.com>","Date":"Sat, 12 Apr 2025 13:47:16 +0100","Message-ID":"<174446203669.722505.10503020186668538503@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}}]