[{"id":39597,"web_url":"https://patchwork.libcamera.org/comment/39597/","msgid":"<akuXZBzVZAhcBfW8@zed>","date":"2026-07-06T12:34:37","subject":"Re: [RFC PATCH v1 00/17] ipa: libipa: agc rework","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Barnabas,\n   let's discuss the architecture before getting into the details of\neach single patch\n\nOn Fri, Jul 03, 2026 at 05:38:02PM +0200, Barnabás Pőcze wrote:\n> This is a first early of the AGC rework that is supposed to remove duplication\n> of AGC related code from multiple IPA modules.\n>\n> It also enables the use of AgcMeanLuminance in the simple pipeline handler\n> if a camera sensor helper is available.\n>\n> This applies on top of the current master branch, not rebased on any of\n> the libipa rework yet. Conflicts should be minimal.\n\nThis series implements libIPA agc support as:\n\n+--------------+\n| AgcAlgorithm |\n+--------------+\n       ^\n       |\n       |\n+-----------------+        +------------------+\n| AgcMeanLuminance|-------o| AgcMeanLuminance |\n|     Algorithm   |        +------------------+\n+-----------------+\n        o\n\t|\n\t|\n+-----------------+\n| RkISP1 AGC      |\n+-----------------+\n\nAgcAlgorithm\n  - defines and interface similar in spirit to libipa::Algorithm\n  - implements the controls handling state machine\n  - Defines ActiveState FrameContext and SessionConfiguration\n\nAgcMeanLuminanceAlgorithm:\n  - inherits from AgcAlgorithm\n  - extends ActiveState FrameContext and SessionConfiguration with\n    AeConstraintModeEnum and AeExposureModeEnum\n  - implements handling of AeExposureModeEnum and AeExposureModeEnum\n    and ExposureValue\n  - embeds and instance of AgcMeanLuminance\n\nAgcMeanLuminance:\n  - implements the algorithm logic\n\nLet me start with a comparison with Agc and Lsc.\nThey do implement something like\n\n+--------------+      +------------------+\n| LscAlgorithm |-----o| LscImplementation|\n+--------------+      +------------------+\n      o                        ^\n      |                        |\n      |                ------------------\n+---------------+      |                 |\n|  RkISP1 LSC   |    +------+       +------------+\n+---------------+    | Grid |       | Polynomial |\n                     +------+       +------------+\n\n\nThe difference here is that IPA algorithm use by composition and\ninstance of [Awb|Lsc]Algorithm which instantiate an instance of\none the back-ends according to the tuning file content: Gray or Bayes\nfor Awb and Grid or Polynomial for Lsc.\n\nThis allows to add more back-ends behding a single\n[Awb|Lsc]Implementation and hide the implementation details inside the\n[Awb|Lsc]Algorithm class.\n\nIn the Agc implementation instead the IPA embeds an\nAgcMeanLuminanceAlgorithm and decides then to use the MeanLuminance\nmethod. If any other back-end is introduced, IPAs will have to be\nmodified instead of simply updating the tuning files.\n\nThe same goes for the IPA context. IPAs will use\nAgcMeanLuminanceAlgorithm::FrameContext and\nAgcMeanLuminanceAlgorithm::ActiveState and once they do so, they're\nbound to use AgcMeanLuminance.\n\nWhat are the reasons that prevent implementing a logic-agnostic\nAgcAlgorithm that instantiate AgcMeanLuminance internally ?\n\nDo we expext more implementations of AgcAlgorithm or will\nMeanLuminance be the only one in libIPA so we don't need to abstract\nit away ?\n\nWhat do other think ?\n\nA few more questions more specifical to the implmentation:\n\n-------------------------------------------------------------------------------\n\nclass AgcAlgorithm\n{\npublic:\n\tstruct Session {\n\t};\n\n\tstruct ActiveState {\n\t};\n\n\tstruct FrameContext {\n\t};\n\n\tstruct ConfigurationParams {\n\t};\n};\n\nFor all the other algorithms the Session, ActiveState and FrameContext\ndefinitions that will be used by IPAs in ipa_context.h have been\nplaced outside of the class defintion in a dedicated namespace.\n\nnamespace libcamera {\nnamespace ipa {\nnamespace awb {\n\nstruct Session {\n};\n\nstruct ActiveState {\n};\n\nstruct FrameContext {\n};\n\n} /* namespace awb */\n\nclass AwbAlgorithm\n{\n\n};\n\n} /* namespace ipa */\n\n} /* namespace libcamera */\n\nWhat are the reasons to do it differently here ?\n-------------------------------------------------------------------------------\n\n-------------------------------------------------------------------------------\nYou have split AgcMeanLuminance in two classes. What is the purpose of\nAgcMeanLuminanceAlgorithm and AgcMeanLuminance. Can the two be used\nseparately ?\n-------------------------------------------------------------------------------\n\n-------------------------------------------------------------------------------\nWhy are libcamera generic controls like ExposureValue,\nAeConstraintMode and AeExposureMode handled in\nAgcMeanLuminanceAlgorithm and not in AgcAlgorithm like other ones ?\n\nWhat's special about them ?\n-------------------------------------------------------------------------------\n\nI would like to clarify these questions before getting into a more\ndetailed review if possible.\n\nThanks\n  j\n\n\n>\n> TODO: handling of DigitalGain + AeEnable needs to be clarified\n>\n> Barnabás Pőcze (17):\n>   ipa: simple: Fix control presence sanity check\n>   ipa: rkisp1: Remove `IPASessionConfiguration::sensor.defVBlank`\n>   ipa: simple: agc: Do not overwrite sensor exposure/gain\n>   ipa: libipa: agc_mean_luminance: Remove the need for inheritance\n>   ipa: rkisp1: Move sensor control info map to context\n>   ipa: rkisp1: Update sensor info when configuring\n>   ipa: rkisp1: updateControls(): Use sensor info from context\n>   ipa: rkisp1: Move AGC related controls into AGC algorithm\n>   ipa: mali-c55: Remove `DigitalGain` support\n>   ipa: libipa: Add `AgcMeanLuminance` wrapper\n>   ipa: rkisp1: Port to `AgcMeanLuminanceAlgorithm`\n>   ipa: mali-c55: Port to `AgcMeanLuminanceAlgorithm`\n>   ipa: ipu3: Port to `AgcMeanLuminanceAlgorithm`\n>   ipa: libipa: agc_mean_luminance: controls(): Return const ref\n>   ipa: libipa: Add `AgcAlgorithm`\n>   ipa: simple: agc: Port to `AgcAlgorithm`\n>   ipa: simple: agc: Use `AgcMeanLuminance` if sensor helper is available\n>\n>  src/ipa/ipu3/algorithms/agc.cpp       | 199 +++++------\n>  src/ipa/ipu3/algorithms/agc.h         |  19 +-\n>  src/ipa/ipu3/ipa_context.cpp          |  49 +--\n>  src/ipa/ipu3/ipa_context.h            |  27 +-\n>  src/ipa/ipu3/ipu3.cpp                 | 138 ++------\n>  src/ipa/libipa/agc.cpp                | 488 ++++++++++++++++++++++++++\n>  src/ipa/libipa/agc.h                  | 100 ++++++\n>  src/ipa/libipa/agc_mean_luminance.cpp | 268 ++++++++++++--\n>  src/ipa/libipa/agc_mean_luminance.h   |  65 +++-\n>  src/ipa/libipa/meson.build            |   2 +\n>  src/ipa/mali-c55/algorithms/agc.cpp   | 205 +++--------\n>  src/ipa/mali-c55/algorithms/agc.h     |   7 +-\n>  src/ipa/mali-c55/ipa_context.h        |  38 +-\n>  src/ipa/mali-c55/mali-c55.cpp         | 163 ++-------\n>  src/ipa/rkisp1/algorithms/agc.cpp     | 478 ++++++-------------------\n>  src/ipa/rkisp1/algorithms/agc.h       |  13 +-\n>  src/ipa/rkisp1/algorithms/lux.cpp     |   2 +-\n>  src/ipa/rkisp1/algorithms/wdr.cpp     |   2 +-\n>  src/ipa/rkisp1/ipa_context.cpp        | 104 +-----\n>  src/ipa/rkisp1/ipa_context.h          |  48 +--\n>  src/ipa/rkisp1/rkisp1.cpp             | 120 +------\n>  src/ipa/simple/agc_simple.cpp         | 197 +++++++++++\n>  src/ipa/simple/agc_simple.h           |  59 ++++\n>  src/ipa/simple/algorithms/agc.cpp     | 296 ++++++++--------\n>  src/ipa/simple/algorithms/agc.h       |  16 +-\n>  src/ipa/simple/ipa_context.h          |  25 +-\n>  src/ipa/simple/meson.build            |   1 +\n>  src/ipa/simple/soft_simple.cpp        |  80 ++---\n>  28 files changed, 1743 insertions(+), 1466 deletions(-)\n>  create mode 100644 src/ipa/libipa/agc.cpp\n>  create mode 100644 src/ipa/libipa/agc.h\n>  create mode 100644 src/ipa/simple/agc_simple.cpp\n>  create mode 100644 src/ipa/simple/agc_simple.h\n>\n> --\n> 2.54.0","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 4CB98C3308\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  6 Jul 2026 12:34:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 440DE66022;\n\tMon,  6 Jul 2026 14:34:42 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 879C26601C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  6 Jul 2026 14:34:41 +0200 (CEST)","from ideasonboard.com (mob-109-113-60-81.net.vodafone.it\n\t[109.113.60.81])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E59B233D;\n\tMon,  6 Jul 2026 14:33:52 +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=\"kKtGwjeN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783341233;\n\tbh=iIAv5EhG60miGukVyktQ9yyiBcDe5jipwlbOpYunu3c=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=kKtGwjeNOH4XBR9AvRp+491YsUGczEw7p2pgCCSIITmTNeTGxrtu2bghdNzO0Mp2e\n\tX5zcgQVA9/HnofX0QmlZ4w0QHRdjM53MS0HITyiyEPnaP8DbW7dDskjdd0ERZArnCK\n\t++dDdjyb+0PiyUK6uE4Q4Nb7TD5kvLyIQe95NNEA=","Date":"Mon, 6 Jul 2026 14:34:37 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 00/17] ipa: libipa: agc rework","Message-ID":"<akuXZBzVZAhcBfW8@zed>","References":"<20260703153819.1088752-1-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260703153819.1088752-1-barnabas.pocze@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":39717,"web_url":"https://patchwork.libcamera.org/comment/39717/","msgid":"<f56d16f2-4fc3-48b6-b1cf-64f1b0381089@ideasonboard.com>","date":"2026-07-15T09:18:10","subject":"Re: [RFC PATCH v1 00/17] ipa: libipa: agc rework","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 07. 06. 14:34 keltezéssel, Jacopo Mondi írta:\n> Hi Barnabas,\n>     let's discuss the architecture before getting into the details of\n> each single patch\n> \n> On Fri, Jul 03, 2026 at 05:38:02PM +0200, Barnabás Pőcze wrote:\n>> This is a first early of the AGC rework that is supposed to remove duplication\n>> of AGC related code from multiple IPA modules.\n>>\n>> It also enables the use of AgcMeanLuminance in the simple pipeline handler\n>> if a camera sensor helper is available.\n>>\n>> This applies on top of the current master branch, not rebased on any of\n>> the libipa rework yet. Conflicts should be minimal.\n> \n> This series implements libIPA agc support as:\n> \n> +--------------+\n> | AgcAlgorithm |\n> +--------------+\n>         ^\n>         |\n>         |\n> +-----------------+        +------------------+\n> | AgcMeanLuminance|-------o| AgcMeanLuminance |\n> |     Algorithm   |        +------------------+\n> +-----------------+\n>          o\n> \t|\n> \t|\n> +-----------------+\n> | RkISP1 AGC      |\n> +-----------------+\n> \n> AgcAlgorithm\n>    - defines and interface similar in spirit to libipa::Algorithm\n>    - implements the controls handling state machine\n>    - Defines ActiveState FrameContext and SessionConfiguration\n> \n> AgcMeanLuminanceAlgorithm:\n>    - inherits from AgcAlgorithm\n>    - extends ActiveState FrameContext and SessionConfiguration with\n>      AeConstraintModeEnum and AeExposureModeEnum\n>    - implements handling of AeExposureModeEnum and AeExposureModeEnum\n>      and ExposureValue\n>    - embeds and instance of AgcMeanLuminance\n> \n> AgcMeanLuminance:\n>    - implements the algorithm logic\n> \n> Let me start with a comparison with Agc and Lsc.\n> They do implement something like\n> \n> +--------------+      +------------------+\n> | LscAlgorithm |-----o| LscImplementation|\n> +--------------+      +------------------+\n>        o                        ^\n>        |                        |\n>        |                ------------------\n> +---------------+      |                 |\n> |  RkISP1 LSC   |    +------+       +------------+\n> +---------------+    | Grid |       | Polynomial |\n>                       +------+       +------------+\n> \n> \n> The difference here is that IPA algorithm use by composition and\n> instance of [Awb|Lsc]Algorithm which instantiate an instance of\n> one the back-ends according to the tuning file content: Gray or Bayes\n> for Awb and Grid or Polynomial for Lsc.\n> \n> This allows to add more back-ends behding a single\n> [Awb|Lsc]Implementation and hide the implementation details inside the\n> [Awb|Lsc]Algorithm class.\n> \n> In the Agc implementation instead the IPA embeds an\n> AgcMeanLuminanceAlgorithm and decides then to use the MeanLuminance\n> method. If any other back-end is introduced, IPAs will have to be\n> modified instead of simply updating the tuning files.\n> \n> The same goes for the IPA context. IPAs will use\n> AgcMeanLuminanceAlgorithm::FrameContext and\n> AgcMeanLuminanceAlgorithm::ActiveState and once they do so, they're\n> bound to use AgcMeanLuminance.\n> \n> What are the reasons that prevent implementing a logic-agnostic\n> AgcAlgorithm that instantiate AgcMeanLuminance internally ?\n> \n> Do we expext more implementations of AgcAlgorithm or will\n> MeanLuminance be the only one in libIPA so we don't need to abstract\n> it away ?\n> \n> What do other think ?\n\nThe way I see it, different algorithms will need different inputs / have\ndifferent requirements. Hence I am not sure one can easily define a generic\ninterface that works for all. This is already somewhat visible with `AgcMeanLuminance`\nand the current algorithm in the simple ipa module. Another reason was\nto keep these changes simpler.\n\n\n\n\n> \n> A few more questions more specifical to the implmentation:\n> \n> -------------------------------------------------------------------------------\n> \n> class AgcAlgorithm\n> {\n> public:\n> \tstruct Session {\n> \t};\n> \n> \tstruct ActiveState {\n> \t};\n> \n> \tstruct FrameContext {\n> \t};\n> \n> \tstruct ConfigurationParams {\n> \t};\n> };\n> \n> For all the other algorithms the Session, ActiveState and FrameContext\n> definitions that will be used by IPAs in ipa_context.h have been\n> placed outside of the class defintion in a dedicated namespace.\n> \n> namespace libcamera {\n> namespace ipa {\n> namespace awb {\n> \n> struct Session {\n> };\n> \n> struct ActiveState {\n> };\n> \n> struct FrameContext {\n> };\n> \n> } /* namespace awb */\n> \n> class AwbAlgorithm\n> {\n> \n> };\n> \n> } /* namespace ipa */\n> \n> } /* namespace libcamera */\n> \n> What are the reasons to do it differently here ?\n> -------------------------------------------------------------------------------\n\nI think it was done this way because there are multiple ones for each kind, in\nAgcAlgorithm, AgcMeanLuminanceAlgorithm, etc.\n\n\n> \n> -------------------------------------------------------------------------------\n> You have split AgcMeanLuminance in two classes. What is the purpose of\n> AgcMeanLuminanceAlgorithm and AgcMeanLuminance. Can the two be used\n> separately ?\n> -------------------------------------------------------------------------------\n\nThe idea was to keep the actual algorithm in `AgcMeanLuminance` and not modify it\ntoo much. And then what's needed to fit into the libipa algorithm format is in\n`AgcMeanLuminanceAlgorithm`.\n\n\n> \n> -------------------------------------------------------------------------------\n> Why are libcamera generic controls like ExposureValue,\n> AeConstraintMode and AeExposureMode handled in\n> AgcMeanLuminanceAlgorithm and not in AgcAlgorithm like other ones ?\n> \n> What's special about them ?\n> -------------------------------------------------------------------------------\n\nFor example, I would argue that the constraint mode handling is very much defined with\n`AgcMeanLuminance` in mind. So I took the short path and kept them there instead of\ntrying to generalize them. Similar considerations apply to the others.\n\n\n\n> \n> I would like to clarify these questions before getting into a more\n> detailed review if possible.\n> \n> Thanks\n>    j\n> \n> \n>>\n>> TODO: handling of DigitalGain + AeEnable needs to be clarified\n>>\n>> Barnabás Pőcze (17):\n>>    ipa: simple: Fix control presence sanity check\n>>    ipa: rkisp1: Remove `IPASessionConfiguration::sensor.defVBlank`\n>>    ipa: simple: agc: Do not overwrite sensor exposure/gain\n>>    ipa: libipa: agc_mean_luminance: Remove the need for inheritance\n>>    ipa: rkisp1: Move sensor control info map to context\n>>    ipa: rkisp1: Update sensor info when configuring\n>>    ipa: rkisp1: updateControls(): Use sensor info from context\n>>    ipa: rkisp1: Move AGC related controls into AGC algorithm\n>>    ipa: mali-c55: Remove `DigitalGain` support\n>>    ipa: libipa: Add `AgcMeanLuminance` wrapper\n>>    ipa: rkisp1: Port to `AgcMeanLuminanceAlgorithm`\n>>    ipa: mali-c55: Port to `AgcMeanLuminanceAlgorithm`\n>>    ipa: ipu3: Port to `AgcMeanLuminanceAlgorithm`\n>>    ipa: libipa: agc_mean_luminance: controls(): Return const ref\n>>    ipa: libipa: Add `AgcAlgorithm`\n>>    ipa: simple: agc: Port to `AgcAlgorithm`\n>>    ipa: simple: agc: Use `AgcMeanLuminance` if sensor helper is available\n>>\n>>   src/ipa/ipu3/algorithms/agc.cpp       | 199 +++++------\n>>   src/ipa/ipu3/algorithms/agc.h         |  19 +-\n>>   src/ipa/ipu3/ipa_context.cpp          |  49 +--\n>>   src/ipa/ipu3/ipa_context.h            |  27 +-\n>>   src/ipa/ipu3/ipu3.cpp                 | 138 ++------\n>>   src/ipa/libipa/agc.cpp                | 488 ++++++++++++++++++++++++++\n>>   src/ipa/libipa/agc.h                  | 100 ++++++\n>>   src/ipa/libipa/agc_mean_luminance.cpp | 268 ++++++++++++--\n>>   src/ipa/libipa/agc_mean_luminance.h   |  65 +++-\n>>   src/ipa/libipa/meson.build            |   2 +\n>>   src/ipa/mali-c55/algorithms/agc.cpp   | 205 +++--------\n>>   src/ipa/mali-c55/algorithms/agc.h     |   7 +-\n>>   src/ipa/mali-c55/ipa_context.h        |  38 +-\n>>   src/ipa/mali-c55/mali-c55.cpp         | 163 ++-------\n>>   src/ipa/rkisp1/algorithms/agc.cpp     | 478 ++++++-------------------\n>>   src/ipa/rkisp1/algorithms/agc.h       |  13 +-\n>>   src/ipa/rkisp1/algorithms/lux.cpp     |   2 +-\n>>   src/ipa/rkisp1/algorithms/wdr.cpp     |   2 +-\n>>   src/ipa/rkisp1/ipa_context.cpp        | 104 +-----\n>>   src/ipa/rkisp1/ipa_context.h          |  48 +--\n>>   src/ipa/rkisp1/rkisp1.cpp             | 120 +------\n>>   src/ipa/simple/agc_simple.cpp         | 197 +++++++++++\n>>   src/ipa/simple/agc_simple.h           |  59 ++++\n>>   src/ipa/simple/algorithms/agc.cpp     | 296 ++++++++--------\n>>   src/ipa/simple/algorithms/agc.h       |  16 +-\n>>   src/ipa/simple/ipa_context.h          |  25 +-\n>>   src/ipa/simple/meson.build            |   1 +\n>>   src/ipa/simple/soft_simple.cpp        |  80 ++---\n>>   28 files changed, 1743 insertions(+), 1466 deletions(-)\n>>   create mode 100644 src/ipa/libipa/agc.cpp\n>>   create mode 100644 src/ipa/libipa/agc.h\n>>   create mode 100644 src/ipa/simple/agc_simple.cpp\n>>   create mode 100644 src/ipa/simple/agc_simple.h\n>>\n>> --\n>> 2.54.0","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 61D41C32CE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 15 Jul 2026 09:18:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 912C666167;\n\tWed, 15 Jul 2026 11:18: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 AABA36614E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Jul 2026 11:18:14 +0200 (CEST)","from [192.168.33.27] (185.221.140.128.nat.pool.zt.hu\n\t[185.221.140.128])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B9EF1104C;\n\tWed, 15 Jul 2026 11:17: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=\"XWeoQg5o\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1784107039;\n\tbh=ATN3a7xkIAz/Wg/kNtQOqrQgqqhYh22wy4Ao+gqKLZg=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=XWeoQg5oiEzBUHyOQJVWLXHh1sBkqdQ4qHsPtOi/BRSF9gTOarfHpD2xWdp5m+NPd\n\thwKOD77OiVaFBLMQ9xpMEZQ8m2etTM7/z0YGGZagjIlz5WoDHkQqB8UX/Q9svzHjua\n\t+skSVzffA0FY/J5xs3dsGAgdHYItLV/QxVCHM6eY=","Message-ID":"<f56d16f2-4fc3-48b6-b1cf-64f1b0381089@ideasonboard.com>","Date":"Wed, 15 Jul 2026 11:18:10 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [RFC PATCH v1 00/17] ipa: libipa: agc rework","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<20260703153819.1088752-1-barnabas.pocze@ideasonboard.com>\n\t<akuXZBzVZAhcBfW8@zed>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<akuXZBzVZAhcBfW8@zed>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>"}}]