[{"id":38528,"web_url":"https://patchwork.libcamera.org/comment/38528/","msgid":"<adYPWAb1iblVBncU@zed>","date":"2026-04-08T08:24:00","subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Kieran\n\nOn Tue, Apr 07, 2026 at 11:01:09PM +0100, Kieran Bingham wrote:\n> Move the ActiveState and FrameContext as used by the RKISP1 lux\n> to be exposed by the libipa implementation for re-use.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/ipa/libipa/lux.cpp       | 16 ++++++++++++++++\n>  src/ipa/libipa/lux.h         | 12 ++++++++++++\n>  src/ipa/rkisp1/ipa_context.h | 13 +++++--------\n>  3 files changed, 33 insertions(+), 8 deletions(-)\n>\n> diff --git a/src/ipa/libipa/lux.cpp b/src/ipa/libipa/lux.cpp\n> index 899e88248f04fbe0d6986528c81b468384fe4a9f..012c6fb367142ce40f60f5e102e3addb142c4a6b 100644\n> --- a/src/ipa/libipa/lux.cpp\n> +++ b/src/ipa/libipa/lux.cpp\n> @@ -33,6 +33,22 @@ LOG_DEFINE_CATEGORY(Lux)\n>\n>  namespace ipa {\n>\n> +/**\n> + * \\struct lux::ActiveState\n> + * \\brief Active lux estimation state shared across frames\n\nnit: I would not reuse the \"Active\" and \"state\" words. Same below for\n\"frame\" and \"context\".\n\n        \\brief The most recent lux estimation\n\n> + *\n> + * \\var lux::ActiveState::lux\n> + * \\brief The most recently estimated lux value\n\n        \\brief The estimated lux value\n\n> + */\n> +\n> +/**\n> + * \\struct lux::FrameContext\n> + * \\brief Per-frame lux estimation context\n\n        \\brief Per-frame lux estimation\n\n> + *\n> + * \\var lux::FrameContext::lux\n> + * \\brief The lux value estimation used for processing the frame\n\n        \\brief The estimated lux value\n\nJust ideas, up to you\n\n> + */\n> +\n>  /**\n>   * \\class Lux\n>   * \\brief Class that implements lux estimation\n> diff --git a/src/ipa/libipa/lux.h b/src/ipa/libipa/lux.h\n> index d95bcdafcfcdb44641ddb12306e4705157dc09ae..2aa630a1097e4bc672c792395d2d179dc084c7d8 100644\n> --- a/src/ipa/libipa/lux.h\n> +++ b/src/ipa/libipa/lux.h\n> @@ -16,6 +16,18 @@ class YamlObject;\n>\n>  namespace ipa {\n>\n> +namespace lux {\n> +\n> +struct ActiveState {\n> +\tdouble lux;\n> +};\n> +\n> +struct FrameContext {\n> +\tdouble lux;\n> +};\n> +\n> +} /* namespace lux */\n> +\n>  class Histogram;\n>\n>  class Lux\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index e61391bb1510bb642dafc544ee7775390e6948d6..63a6f2b7d884bfff2553175fa32e45ae747fb4c7 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -28,6 +28,7 @@\n>  #include \"libipa/camera_sensor_helper.h\"\n>  #include \"libipa/fc_queue.h\"\n>  #include \"libipa/fixedpoint.h\"\n> +#include \"libipa/lux.h\"\n>\n>  namespace libcamera {\n>\n> @@ -78,6 +79,8 @@ struct IPASessionConfiguration {\n>  };\n>\n>  struct IPAActiveState {\n> +\tipa::lux::ActiveState lux;\n> +\n\nIt's a shame we didn't order the struct members\n\n>  \tstruct {\n>  \t\tstruct {\n>  \t\t\tuint32_t exposure;\n> @@ -137,10 +140,6 @@ struct IPAActiveState {\n>  \t\tdouble gamma;\n>  \t} goc;\n>\n> -\tstruct {\n> -\t\tdouble lux;\n> -\t} lux;\n> -\n\nit could also be kept here though\n\n>  \tstruct {\n>  \t\tcontrols::WdrModeEnum mode;\n>  \t\tAgcMeanLuminance::AgcConstraint constraint;\n> @@ -154,6 +153,8 @@ struct IPAActiveState {\n>  };\n>\n>  struct IPAFrameContext : public FrameContext {\n> +\tipa::lux::FrameContext lux;\n> +\n>  \tstruct {\n>  \t\tuint32_t exposure;\n>  \t\tdouble gain;\n> @@ -219,10 +220,6 @@ struct IPAFrameContext : public FrameContext {\n>  \t\tMatrix<float, 3, 3> ccm;\n>  \t} ccm;\n>\n> -\tstruct {\n> -\t\tdouble lux;\n> -\t} lux;\n> -\n\nSame here.\n\nI like this!\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\n>  \tstruct {\n>  \t\tcontrols::WdrModeEnum mode;\n>  \t\tdouble strength;\n>\n> --\n> 2.53.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 BCE02BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 08:24:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E80DF62DA6;\n\tWed,  8 Apr 2026 10:24:05 +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 42B3762DA6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 10:24:04 +0200 (CEST)","from ideasonboard.com (mob-109-113-47-41.net.vodafone.it\n\t[109.113.47.41])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 090A91E7;\n\tWed,  8 Apr 2026 10:22:35 +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=\"lX85DyeZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775636556;\n\tbh=MG8ADzHNRZCh82Li0GOzpM0OT1rf/mus4j61k0OP6R8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=lX85DyeZEu2Xasca9Htyme0X1sw5PQJ2sI1vcNXquadEo8NPIwmgoAgrUN5PUSUYA\n\tLPW5ivkt7MnJRfrIDW4DoWdrjjHeo0VxaB5U/x7WV8Zs39DFwrXem69fbSfrzXfcN2\n\tzMnBf3N7btbYu6lhy/hYHc3bzd4cz6nQpMi4IrAE=","Date":"Wed, 8 Apr 2026 10:24:00 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","Message-ID":"<adYPWAb1iblVBncU@zed>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@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":38544,"web_url":"https://patchwork.libcamera.org/comment/38544/","msgid":"<177566941204.575056.3314850658155284557@ping.linuxembedded.co.uk>","date":"2026-04-08T17:30:12","subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2026-04-08 09:24:00)\n> Hi Kieran\n> \n> On Tue, Apr 07, 2026 at 11:01:09PM +0100, Kieran Bingham wrote:\n> > Move the ActiveState and FrameContext as used by the RKISP1 lux\n> > to be exposed by the libipa implementation for re-use.\n> >\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> >  src/ipa/libipa/lux.cpp       | 16 ++++++++++++++++\n> >  src/ipa/libipa/lux.h         | 12 ++++++++++++\n> >  src/ipa/rkisp1/ipa_context.h | 13 +++++--------\n> >  3 files changed, 33 insertions(+), 8 deletions(-)\n> >\n> > diff --git a/src/ipa/libipa/lux.cpp b/src/ipa/libipa/lux.cpp\n> > index 899e88248f04fbe0d6986528c81b468384fe4a9f..012c6fb367142ce40f60f5e102e3addb142c4a6b 100644\n> > --- a/src/ipa/libipa/lux.cpp\n> > +++ b/src/ipa/libipa/lux.cpp\n> > @@ -33,6 +33,22 @@ LOG_DEFINE_CATEGORY(Lux)\n> >\n> >  namespace ipa {\n> >\n> > +/**\n> > + * \\struct lux::ActiveState\n> > + * \\brief Active lux estimation state shared across frames\n> \n> nit: I would not reuse the \"Active\" and \"state\" words. Same below for\n> \"frame\" and \"context\".\n> \n>         \\brief The most recent lux estimation\n> \n> > + *\n> > + * \\var lux::ActiveState::lux\n> > + * \\brief The most recently estimated lux value\n> \n>         \\brief The estimated lux value\n> \n> > + */\n> > +\n> > +/**\n> > + * \\struct lux::FrameContext\n> > + * \\brief Per-frame lux estimation context\n> \n>         \\brief Per-frame lux estimation\n> \n> > + *\n> > + * \\var lux::FrameContext::lux\n> > + * \\brief The lux value estimation used for processing the frame\n> \n>         \\brief The estimated lux value\n> \n> Just ideas, up to you\n> \n> > + */\n> > +\n> >  /**\n> >   * \\class Lux\n> >   * \\brief Class that implements lux estimation\n> > diff --git a/src/ipa/libipa/lux.h b/src/ipa/libipa/lux.h\n> > index d95bcdafcfcdb44641ddb12306e4705157dc09ae..2aa630a1097e4bc672c792395d2d179dc084c7d8 100644\n> > --- a/src/ipa/libipa/lux.h\n> > +++ b/src/ipa/libipa/lux.h\n> > @@ -16,6 +16,18 @@ class YamlObject;\n> >\n> >  namespace ipa {\n> >\n> > +namespace lux {\n> > +\n> > +struct ActiveState {\n> > +     double lux;\n> > +};\n> > +\n> > +struct FrameContext {\n> > +     double lux;\n> > +};\n> > +\n> > +} /* namespace lux */\n> > +\n> >  class Histogram;\n> >\n> >  class Lux\n> > diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> > index e61391bb1510bb642dafc544ee7775390e6948d6..63a6f2b7d884bfff2553175fa32e45ae747fb4c7 100644\n> > --- a/src/ipa/rkisp1/ipa_context.h\n> > +++ b/src/ipa/rkisp1/ipa_context.h\n> > @@ -28,6 +28,7 @@\n> >  #include \"libipa/camera_sensor_helper.h\"\n> >  #include \"libipa/fc_queue.h\"\n> >  #include \"libipa/fixedpoint.h\"\n> > +#include \"libipa/lux.h\"\n> >\n> >  namespace libcamera {\n> >\n> > @@ -78,6 +79,8 @@ struct IPASessionConfiguration {\n> >  };\n> >\n> >  struct IPAActiveState {\n> > +     ipa::lux::ActiveState lux;\n> > +\n> \n> It's a shame we didn't order the struct members\n\nI've intentionally pulled the new additions up to the top to make it\nclearer, as I sort of hope/expect all of them to be convertable. But I\nguess I don't know yet.\n\nWould you order in processing order or alphabetical ? or other?\n\n\n> \n> >       struct {\n> >               struct {\n> >                       uint32_t exposure;\n> > @@ -137,10 +140,6 @@ struct IPAActiveState {\n> >               double gamma;\n> >       } goc;\n> >\n> > -     struct {\n> > -             double lux;\n> > -     } lux;\n> > -\n> \n> it could also be kept here though\n> \n> >       struct {\n> >               controls::WdrModeEnum mode;\n> >               AgcMeanLuminance::AgcConstraint constraint;\n> > @@ -154,6 +153,8 @@ struct IPAActiveState {\n> >  };\n> >\n> >  struct IPAFrameContext : public FrameContext {\n> > +     ipa::lux::FrameContext lux;\n> > +\n> >       struct {\n> >               uint32_t exposure;\n> >               double gain;\n> > @@ -219,10 +220,6 @@ struct IPAFrameContext : public FrameContext {\n> >               Matrix<float, 3, 3> ccm;\n> >       } ccm;\n> >\n> > -     struct {\n> > -             double lux;\n> > -     } lux;\n> > -\n> \n> Same here.\n> \n> I like this!\n> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nGreat, I've posted early to find out if I should continue so thanks - I\nshall!\n--\nKieran\n\n> \n> >       struct {\n> >               controls::WdrModeEnum mode;\n> >               double strength;\n> >\n> > --\n> > 2.53.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 AE016BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 17:30:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B725562DFE;\n\tWed,  8 Apr 2026 19:30:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0A32162CE6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 19:30:15 +0200 (CEST)","from monstersaurus.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 A85D52D5;\n\tWed,  8 Apr 2026 19:28:46 +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=\"Eg1RpHRN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775669326;\n\tbh=QmgnTZdR9z+KCBEQHV9xUbe9VZaGpngu5qpBtnfOrVo=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=Eg1RpHRNWwqqImISOUBLmWoXBPensBc04geJIJjuOoCAhzU9sagN2aVuDI6mz1zEY\n\t33kiwHcRWZHDon04nZIcUacuiNQgZ1qSadCA3BylyyqYb11aNadQjrZB184ukUDg9i\n\tA6e3iWhY6oVB3eLFpJk0ejV0peGpWsDNoQ1HFv7A=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<adYPWAb1iblVBncU@zed>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@ideasonboard.com>\n\t<adYPWAb1iblVBncU@zed>","Subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Date":"Wed, 08 Apr 2026 18:30:12 +0100","Message-ID":"<177566941204.575056.3314850658155284557@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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":38553,"web_url":"https://patchwork.libcamera.org/comment/38553/","msgid":"<20260408211059.GH1965119@killaraus.ideasonboard.com>","date":"2026-04-08T21:10:59","subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Wed, Apr 08, 2026 at 06:30:12PM +0100, Kieran Bingham wrote:\n> Quoting Jacopo Mondi (2026-04-08 09:24:00)\n> > On Tue, Apr 07, 2026 at 11:01:09PM +0100, Kieran Bingham wrote:\n> > > Move the ActiveState and FrameContext as used by the RKISP1 lux\n> > > to be exposed by the libipa implementation for re-use.\n> > >\n> > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > ---\n> > >  src/ipa/libipa/lux.cpp       | 16 ++++++++++++++++\n> > >  src/ipa/libipa/lux.h         | 12 ++++++++++++\n> > >  src/ipa/rkisp1/ipa_context.h | 13 +++++--------\n> > >  3 files changed, 33 insertions(+), 8 deletions(-)\n> > >\n> > > diff --git a/src/ipa/libipa/lux.cpp b/src/ipa/libipa/lux.cpp\n> > > index 899e88248f04fbe0d6986528c81b468384fe4a9f..012c6fb367142ce40f60f5e102e3addb142c4a6b 100644\n> > > --- a/src/ipa/libipa/lux.cpp\n> > > +++ b/src/ipa/libipa/lux.cpp\n> > > @@ -33,6 +33,22 @@ LOG_DEFINE_CATEGORY(Lux)\n> > >\n> > >  namespace ipa {\n> > >\n> > > +/**\n> > > + * \\struct lux::ActiveState\n> > > + * \\brief Active lux estimation state shared across frames\n> > \n> > nit: I would not reuse the \"Active\" and \"state\" words. Same below for\n> > \"frame\" and \"context\".\n> > \n> >         \\brief The most recent lux estimation\n> > \n> > > + *\n> > > + * \\var lux::ActiveState::lux\n> > > + * \\brief The most recently estimated lux value\n> > \n> >         \\brief The estimated lux value\n> > \n> > > + */\n> > > +\n> > > +/**\n> > > + * \\struct lux::FrameContext\n> > > + * \\brief Per-frame lux estimation context\n> > \n> >         \\brief Per-frame lux estimation\n> > \n> > > + *\n> > > + * \\var lux::FrameContext::lux\n> > > + * \\brief The lux value estimation used for processing the frame\n> > \n> >         \\brief The estimated lux value\n> > \n> > Just ideas, up to you\n> > \n> > > + */\n> > > +\n> > >  /**\n> > >   * \\class Lux\n> > >   * \\brief Class that implements lux estimation\n> > > diff --git a/src/ipa/libipa/lux.h b/src/ipa/libipa/lux.h\n> > > index d95bcdafcfcdb44641ddb12306e4705157dc09ae..2aa630a1097e4bc672c792395d2d179dc084c7d8 100644\n> > > --- a/src/ipa/libipa/lux.h\n> > > +++ b/src/ipa/libipa/lux.h\n> > > @@ -16,6 +16,18 @@ class YamlObject;\n> > >\n> > >  namespace ipa {\n> > >\n> > > +namespace lux {\n> > > +\n> > > +struct ActiveState {\n> > > +     double lux;\n> > > +};\n> > > +\n> > > +struct FrameContext {\n> > > +     double lux;\n> > > +};\n> > > +\n> > > +} /* namespace lux */\n> > > +\n> > >  class Histogram;\n> > >\n> > >  class Lux\n> > > diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> > > index e61391bb1510bb642dafc544ee7775390e6948d6..63a6f2b7d884bfff2553175fa32e45ae747fb4c7 100644\n> > > --- a/src/ipa/rkisp1/ipa_context.h\n> > > +++ b/src/ipa/rkisp1/ipa_context.h\n> > > @@ -28,6 +28,7 @@\n> > >  #include \"libipa/camera_sensor_helper.h\"\n> > >  #include \"libipa/fc_queue.h\"\n> > >  #include \"libipa/fixedpoint.h\"\n> > > +#include \"libipa/lux.h\"\n> > >\n> > >  namespace libcamera {\n> > >\n> > > @@ -78,6 +79,8 @@ struct IPASessionConfiguration {\n> > >  };\n> > >\n> > >  struct IPAActiveState {\n> > > +     ipa::lux::ActiveState lux;\n> > > +\n> > \n> > It's a shame we didn't order the struct members\n> \n> I've intentionally pulled the new additions up to the top to make it\n> clearer, as I sort of hope/expect all of them to be convertable. But I\n> guess I don't know yet.\n> \n> Would you order in processing order or alphabetical ? or other?\n\nI think processing order would be best, although the processing order\ncurrently depends on the tuning file.\n\n> > >       struct {\n> > >               struct {\n> > >                       uint32_t exposure;\n> > > @@ -137,10 +140,6 @@ struct IPAActiveState {\n> > >               double gamma;\n> > >       } goc;\n> > >\n> > > -     struct {\n> > > -             double lux;\n> > > -     } lux;\n> > > -\n> > \n> > it could also be kept here though\n> > \n> > >       struct {\n> > >               controls::WdrModeEnum mode;\n> > >               AgcMeanLuminance::AgcConstraint constraint;\n> > > @@ -154,6 +153,8 @@ struct IPAActiveState {\n> > >  };\n> > >\n> > >  struct IPAFrameContext : public FrameContext {\n> > > +     ipa::lux::FrameContext lux;\n> > > +\n> > >       struct {\n> > >               uint32_t exposure;\n> > >               double gain;\n> > > @@ -219,10 +220,6 @@ struct IPAFrameContext : public FrameContext {\n> > >               Matrix<float, 3, 3> ccm;\n> > >       } ccm;\n> > >\n> > > -     struct {\n> > > -             double lux;\n> > > -     } lux;\n> > > -\n> > \n> > Same here.\n> > \n> > I like this!\n> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> \n> Great, I've posted early to find out if I should continue so thanks - I\n> shall!\n\nIt's promising, let's see what happens in the next patches :-)\n\n> > >       struct {\n> > >               controls::WdrModeEnum mode;\n> > >               double strength;\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 047FEBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Apr 2026 21:11:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4D86662E31;\n\tWed,  8 Apr 2026 23:11:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EB00362CE6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2026 23:11:00 +0200 (CEST)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 5DB2D1BA;\n\tWed,  8 Apr 2026 23:09:32 +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=\"R+Gy1XKL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775682572;\n\tbh=oOaicm3ksGIhjnuu09CfFISkQ112L038K6pA9O1sYnU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=R+Gy1XKLPQFTqubfyTYKNit5vVhnYAGUyL3tV5AJgq6SmB8TfK2BtbD9CrTuOvMbz\n\tcdDbQlxWBZD6Vu/YS2/Zpi7O6Ler20PkNZNdzj0BL/tJRvJ+Pas407Tmdjxp3aeIWo\n\tVI/EM4lEmAfGYkaH6UsgL6nHVUpZh7/BxfX52T/I=","Date":"Thu, 9 Apr 2026 00:10:59 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","Message-ID":"<20260408211059.GH1965119@killaraus.ideasonboard.com>","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@ideasonboard.com>\n\t<adYPWAb1iblVBncU@zed>\n\t<177566941204.575056.3314850658155284557@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<177566941204.575056.3314850658155284557@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":38783,"web_url":"https://patchwork.libcamera.org/comment/38783/","msgid":"<2b53bfa3-bc4e-4608-a2fe-9cae8faa37a6@oss.qualcomm.com>","date":"2026-05-07T14:27:40","subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","submitter":{"id":242,"url":"https://patchwork.libcamera.org/api/people/242/","name":"Hans de Goede","email":"johannes.goede@oss.qualcomm.com"},"content":"Hi,\n\nOn 8-Apr-26 00:01, Kieran Bingham wrote:\n> Move the ActiveState and FrameContext as used by the RKISP1 lux\n> to be exposed by the libipa implementation for re-use.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nThanks, patch looks good to me:\n\nReviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\n\nRegards,\n\nHans\n\n\n> ---\n>  src/ipa/libipa/lux.cpp       | 16 ++++++++++++++++\n>  src/ipa/libipa/lux.h         | 12 ++++++++++++\n>  src/ipa/rkisp1/ipa_context.h | 13 +++++--------\n>  3 files changed, 33 insertions(+), 8 deletions(-)\n> \n> diff --git a/src/ipa/libipa/lux.cpp b/src/ipa/libipa/lux.cpp\n> index 899e88248f04fbe0d6986528c81b468384fe4a9f..012c6fb367142ce40f60f5e102e3addb142c4a6b 100644\n> --- a/src/ipa/libipa/lux.cpp\n> +++ b/src/ipa/libipa/lux.cpp\n> @@ -33,6 +33,22 @@ LOG_DEFINE_CATEGORY(Lux)\n>  \n>  namespace ipa {\n>  \n> +/**\n> + * \\struct lux::ActiveState\n> + * \\brief Active lux estimation state shared across frames\n> + *\n> + * \\var lux::ActiveState::lux\n> + * \\brief The most recently estimated lux value\n> + */\n> +\n> +/**\n> + * \\struct lux::FrameContext\n> + * \\brief Per-frame lux estimation context\n> + *\n> + * \\var lux::FrameContext::lux\n> + * \\brief The lux value estimation used for processing the frame\n> + */\n> +\n>  /**\n>   * \\class Lux\n>   * \\brief Class that implements lux estimation\n> diff --git a/src/ipa/libipa/lux.h b/src/ipa/libipa/lux.h\n> index d95bcdafcfcdb44641ddb12306e4705157dc09ae..2aa630a1097e4bc672c792395d2d179dc084c7d8 100644\n> --- a/src/ipa/libipa/lux.h\n> +++ b/src/ipa/libipa/lux.h\n> @@ -16,6 +16,18 @@ class YamlObject;\n>  \n>  namespace ipa {\n>  \n> +namespace lux {\n> +\n> +struct ActiveState {\n> +\tdouble lux;\n> +};\n> +\n> +struct FrameContext {\n> +\tdouble lux;\n> +};\n> +\n> +} /* namespace lux */\n> +\n>  class Histogram;\n>  \n>  class Lux\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index e61391bb1510bb642dafc544ee7775390e6948d6..63a6f2b7d884bfff2553175fa32e45ae747fb4c7 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -28,6 +28,7 @@\n>  #include \"libipa/camera_sensor_helper.h\"\n>  #include \"libipa/fc_queue.h\"\n>  #include \"libipa/fixedpoint.h\"\n> +#include \"libipa/lux.h\"\n>  \n>  namespace libcamera {\n>  \n> @@ -78,6 +79,8 @@ struct IPASessionConfiguration {\n>  };\n>  \n>  struct IPAActiveState {\n> +\tipa::lux::ActiveState lux;\n> +\n>  \tstruct {\n>  \t\tstruct {\n>  \t\t\tuint32_t exposure;\n> @@ -137,10 +140,6 @@ struct IPAActiveState {\n>  \t\tdouble gamma;\n>  \t} goc;\n>  \n> -\tstruct {\n> -\t\tdouble lux;\n> -\t} lux;\n> -\n>  \tstruct {\n>  \t\tcontrols::WdrModeEnum mode;\n>  \t\tAgcMeanLuminance::AgcConstraint constraint;\n> @@ -154,6 +153,8 @@ struct IPAActiveState {\n>  };\n>  \n>  struct IPAFrameContext : public FrameContext {\n> +\tipa::lux::FrameContext lux;\n> +\n>  \tstruct {\n>  \t\tuint32_t exposure;\n>  \t\tdouble gain;\n> @@ -219,10 +220,6 @@ struct IPAFrameContext : public FrameContext {\n>  \t\tMatrix<float, 3, 3> ccm;\n>  \t} ccm;\n>  \n> -\tstruct {\n> -\t\tdouble lux;\n> -\t} lux;\n> -\n>  \tstruct {\n>  \t\tcontrols::WdrModeEnum mode;\n>  \t\tdouble strength;\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 F3A05BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 14:27:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8A3096302B;\n\tThu,  7 May 2026 16:27:47 +0200 (CEST)","from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n\t[205.220.168.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B684A62FEC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 16:27:45 +0200 (CEST)","from pps.filterd (m0279867.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t647Bb5dk682766 for <libcamera-devel@lists.libcamera.org>;\n\tThu, 7 May 2026 14:27:44 GMT","from mail-ua1-f70.google.com (mail-ua1-f70.google.com\n\t[209.85.222.70])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e0mhasyt1-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 07 May 2026 14:27:44 +0000 (GMT)","by mail-ua1-f70.google.com with SMTP id\n\ta1e0cc1a2514c-95ce6d50ea7so345990241.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 07 May 2026 07:27:43 -0700 (PDT)","from ?IPV6:2001:1c00:c32:7800:5bfa:a036:83f0:f9ec?\n\t(2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:5bfa:a036:83f0:f9ec])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-bc81d5e9583sm85284266b.17.2026.05.07.07.27.40\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tThu, 07 May 2026 07:27:40 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"V2KtI0fJ\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"dHkgtstH\"; dkim-atps=neutral","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcontent-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\tz6D+TbqWXmkS2GB7o9y6UrccEcyvNK98HuH617pessA=; b=V2KtI0fJAmTQXJGU\n\t118XMdhZ8algVeG0tdJqjg58Q6CI81ZZiWUChNvKPbGdMxIjFVXclYQuWZEE8SQv\n\ttWWLaGn48Ih6DsZoYlfvR27e8YbPwdzUVxR1sBZEdtJOkwWY/pi+/619VOb95p6I\n\t3pmlzytRcTyq4m4ikJnwAOYyYgN6bQv9MgG2NofSTszMxkp+w/QLaQ05hlALZ5Jj\n\tYdRFcF4CaYIhn7ILgYi6m0/dJ6RGiANp/9JJoqab4ENbJrK6UVM7PqHGB5CYDw+i\n\ttvPzhyHcublxZmut1q7ksxvArArYxzKMvWLAIT6+/oGmjzWy99CWVAaQY01lsFY+\n\t5ESkaA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1778164062; x=1778768862;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:to:subject:from:user-agent:mime-version:date:message-id:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=z6D+TbqWXmkS2GB7o9y6UrccEcyvNK98HuH617pessA=;\n\tb=dHkgtstHyELLAteFVsB4070mCYLADWXPsn1k+bLgQEpShe/KfQqIzlGN3zzglNEljk\n\t038dv0xqBSNA8o0lfZPACrOv9XoPO08D9GyqXVB+q//ZQ5GQPbVvvXJPj0iqUY1ieMkz\n\tZBkb48lyKFUx+R1r1GZsbYPzPjeP5XfnVGGQtB5sx8iEHteeVihGFf/fTq1CJgh7VcT9\n\tdwzPgxShqlzjppCq4NIiVIB+DXjXa4B3Tef1s9BmydFE4qr70tQ9clucYz8F9zqZAZfa\n\t/wa1qVHbVouR7WniF4TqhXaBY/Lu1faYtCTfXRNsZOKv6SKPpv3r4AyuqBmzvamB+1mD\n\t1b8A=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1778164062; x=1778768862;\n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:to:subject:from:user-agent:mime-version:date:message-id:x-gm-gg\n\t:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n\tbh=z6D+TbqWXmkS2GB7o9y6UrccEcyvNK98HuH617pessA=;\n\tb=QuM6gQ/EdmVqFsaZI2cn+3492KKfm6/7E3UO4V/tI7MA2hnSS8FfJKzyoylrW2Q1oP\n\ttLu1kN8CQ/je81pQYg8TbYLOK+ThxoZH6k4QZiRZJLWxoaMlv9InviWSEf+w9u+KZ77O\n\tQUBqaKCP+gQQdRkuHW8TWivbTTld64Myap4/O4jcckL2n9V+JRi1SJT3/VJPcaCVaPly\n\tt0oh/5hDHcvUPsofxgL6T/x9l/yXUuYckjIr7AtXe4tstnu9MLEgZ4dFL8kXgxBTGPzP\n\tb27Q0SjTVW8Djtq5I+UnS+yLuiXVcWiX7nLgL9kNbYl1oex6WZWN8RDPXG4JviibtNXv\n\t+FUw==","X-Forwarded-Encrypted":"i=1;\n\tAFNElJ94J2wPtxgaCmysN1ZebHWR/dkQDd0dt33wDPH3EzPaHGUhOyMoPbTSMbNmFLgUrsQcr+ylzgHW4zm+o5qshyo=@lists.libcamera.org","X-Gm-Message-State":"AOJu0YzjV3ZasQmIsJocgROBEcugEFUTnBJ0mfIbQxUmA/piaowthCkx\n\tPWUh3zyQhlMZQk4p9YKHrQuBO2heGwAkTQKu7jHiA7+KzBkgcP99GRaukO6n5dm9nlz3iD7aKT6\n\ts3+hpAr3IjD2nDgnpDOybsnYq77RK/L8v27DAuxgzaPsCW3JGNVTOkRUORb1Qu560PtBKDOcRLK\n\t3F","X-Gm-Gg":"AeBDietbGdAQoEo6hboZvsXumfUYr86AViWRobAzkjDhIqSKyyRf5c1UyMSO1xfDjPL\n\tSamY5Dr0q3Y+c+LmIcjEUUu+qihI2MxwL9IB4AQ5jqhm8JXuqxHCm7U082SR/1pkcAi8csCnIrl\n\t8y21EiwIWSDeUO5o+vZx2y/BgSljh950xCyTcph2kBwQmtCWL2yTvEPj3KihmRQ5p3OUjxU+3zM\n\tEHbJQTmiSZx+kovtVSKd9YZyR+w2JSXcz6n8MwDZmLjaDQyAzAzNtWgjdRz5uXWtPQyF+xFpMf+\n\tUm5ESUqg4ThmObGl+7mBc0LovhD5hRvPdVyzqmkwOswsnyAWDE9h0u2FHuP82LxqyImbRZ8YKjl\n\toIxLO4w3zplXM2Di6W0ow3dRT9LtXqOk7mNNf+YjRcmR2WaZ20404zmrBsgK3LAyJmG7m9gVIyx\n\taR9OZQlGmX58mmK7eI/gAH7a2l2dKe1SjCymklswgywxs5RWOQvcTNwIuyMC0kOZzs8XqFLlszJ\n\tTfdPxr7j3Q6ukuZkERuoOg0RX0=","X-Received":["by 2002:a05:6122:243:b0:56f:2aaa:450c with SMTP id\n\t71dfb90a1353d-57559544547mr5043106e0c.1.1778164062498; \n\tThu, 07 May 2026 07:27:42 -0700 (PDT)","by 2002:a05:6122:243:b0:56f:2aaa:450c with SMTP id\n\t71dfb90a1353d-57559544547mr5043065e0c.1.1778164062015; \n\tThu, 07 May 2026 07:27:42 -0700 (PDT)"],"Message-ID":"<2b53bfa3-bc4e-4608-a2fe-9cae8faa37a6@oss.qualcomm.com>","Date":"Thu, 7 May 2026 16:27:40 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","From":"johannes.goede@oss.qualcomm.com","Subject":"Re: [PATCH 06/13] ipa: libipa: provide lux context structures","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20260407-kbingham-awb-split-v1-0-a39af3f4dc20@ideasonboard.com>\n\t<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@ideasonboard.com>","Content-Language":"en-US, nl","In-Reply-To":"<20260407-kbingham-awb-split-v1-6-a39af3f4dc20@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNTA3MDE0NSBTYWx0ZWRfXxfAv9bfOUHeg\n\tKnmtWTWvFjspryQ/kTqjXqg4YNq+RRmYpGG0Ranrv5r74cS7efYztErKfTOSdt6AbLNJcnCRMP5\n\tIdgcYRKdwSVoYLt7rNf0VhV6W5vRmxoxjgZ/SuYPnVZy3pix74fUpAGoAAp9DS1sMocMlI+OkjW\n\tQnmhio621n4k3O/ndYMJktMtxIcaXXaWAcMK6mJcExzN609DDrLBA9yLLGAFLk8CcbUE/ta/sex\n\tx8My3UpUE/caIJbAJH9jEfml2luGjfIB++3UMUmdYtJaB9hfNcS8PGfMzYhXdFS9EzhKlnaK2p7\n\tvxRsAgpcSmWonfokeGiO83vtU76XBLA8+SDgEP9qkSbXIR8oMGATpTj/yDrdtMAbI1PA00f49U2\n\tIWdtjZvphQg0nH1MzLpCrpeDtyHNCKqra/SD9pl4VttwdQrnSMnWzySLlqicN5/cGZyZRcs9DNg\n\tf+H3cvkJhC00FDHuOVw==","X-Proofpoint-ORIG-GUID":"rHeYRxY8shHkYTC_yFLIJIClTG2Yt_5q","X-Proofpoint-GUID":"rHeYRxY8shHkYTC_yFLIJIClTG2Yt_5q","X-Authority-Analysis":"v=2.4 cv=ReWgzVtv c=1 sm=1 tr=0 ts=69fca160 cx=c_pps\n\ta=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n\ta=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n\ta=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=P1BnusSwAAAA:8\n\ta=EUspDBNiAAAA:8 a=fNgUVh_Ozg82oY4kruwA:9 a=QEXdDO2ut3YA:10\n\ta=TD8TdBvy0hsOASGTdmB-:22 a=D0XLA9XvdZm18NrgonBM:22","X-Proofpoint-Virus-Version":"vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.51,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-05-07_01,2026-05-06_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tclxscore=1015 priorityscore=1501 impostorscore=0 lowpriorityscore=0\n\tspamscore=0 suspectscore=0 adultscore=0 phishscore=0 malwarescore=0\n\tbulkscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n\troute=outbound\n\tadjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n\tdefinitions=main-2605070145","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>"}}]