{"id":27549,"url":"https://patchwork.libcamera.org/api/covers/27549/?format=json","web_url":"https://patchwork.libcamera.org/cover/27549/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260803131435.153927-1-barnabas.pocze@ideasonboard.com>","date":"2026-08-03T13:13:45","name":"[RFC,v3,00/50] ipa: libipa: agc rework","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/?format=json","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/27549/mbox/","series":[{"id":6103,"url":"https://patchwork.libcamera.org/api/series/6103/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=6103","date":"2026-08-03T13:13:45","name":"ipa: libipa: agc rework","version":3,"mbox":"https://patchwork.libcamera.org/series/6103/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/27549/comments/","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 038C5BDE4C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  3 Aug 2026 13:14:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 015C367EE4;\n\tMon,  3 Aug 2026 15:14:41 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E391067EE4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 Aug 2026 15:14:38 +0200 (CEST)","from pb-laptop.local (185.221.141.208.nat.pool.zt.hu\n\t[185.221.141.208])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D7724512\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 Aug 2026 15:13:29 +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=\"E8Yt0Yc/\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1785762809;\n\tbh=Y8WxZA0XN8c4EXPpAHqw9zT4QUk8Aj5JVtcKjrdBMTI=;\n\th=From:To:Subject:Date:From;\n\tb=E8Yt0Yc/2KLxCvnESBcoo1k3gEmXP5ujF4NZjPKWCoh6tHv1lKhmgmppYQ3R1nb2J\n\tQXnwwU3lh/KPm473oGtUvkukapkGxZji2VnDsqGTLWbFVoOxmiaSnxjSqBYiD4ysaH\n\twgkutZDVAOh3lYmjeH/Src3/lLfbSMBUs51e9EO4=","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Subject":"[RFC PATCH v3 00/50] ipa: libipa: agc rework","Date":"Mon,  3 Aug 2026 15:13:45 +0200","Message-ID":"<20260803131435.153927-1-barnabas.pocze@ideasonboard.com>","X-Mailer":"git-send-email 2.55.0","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","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>"},"content":"This adds an `AgcAlgorithm` that is essentially a copy of the rkisp1 agc algorithm,\nonly that it can either use AgcMeanLuminance or the agc algorithm from the simple ipa\nmodule (which is now moved into libipa).\n\nSimilarly to the previous versions, the following ipa modules are converted:\n  * ipu3\n  * mali-c55\n  * rkisp1\n  * simple\n\nThis applies on top of the current master branch, not rebased on any of the libipa\nrework yet. Conflicts should be minimal.\n\nv2: https://patchwork.libcamera.org/cover/27449/\nv1: https://patchwork.libcamera.org/cover/27179/\n\nBarnabás Pőcze (49):\n  libcamera: software_isp: init(): Fix documentation typo\n  ipa: simple: Remove control presence sanity check\n  ipa: simple: agc: Do not overwrite sensor exposure/gain\n  ipa: rkisp1: Remove `IPASessionConfiguration::sensor.defVBlank`\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: agc_mean_luminance: Avoid some duplicate lookups\n  ipa: libipa: agc_mean_luminance: Remove unnecessary `std::shared_ptr`\n  ipa: libipa: agc_mean_luminance: calculateNewEv(): Fix typo\n  ipa: libipa: agc_mean_luminance: calculateNewEv(): Collect params\n  ipa: libipa: agc_mean_luminance: constraintClampGain(): Mark `const`\n  ipa: libipa: agc_mean_luminance: calculateNewEv(): Collect results\n  ipa: libipa: agc_mean_luminance: calculateNewEv(): Return y target\n  ipa: libipa: agc_mean_luminance: Remove persistent params\n  ipa: libipa: agc_mean_luminance: Reset `filteredExposure_` when\n    configuring\n  ipa: Simplify sensor exposure/gain setting/getting\n  ipa: libipa: Add `AgcAlgorithm`\n  ipa: libipa: agc: Omit `setLimits()` in `configure()`\n  ipa: libipa: agc: Use default exposure\n  ipa: libipa: agc: Use full range as default `FrameDurationLimits`\n  ipa: libipa: agc: Adjust debug messages slightly\n  ipa: libipa: agc: Store digital gain\n  ipa: libipa: agc: Use minimum line length\n  ipa: libipa: agc: Fix multiplication type\n  ipa: libipa: agc: Calculate vblank and frame duration sooner\n  ipa: rkisp1: agc: Port to `AgcAlgorithm`\n  ipa: mali-c55: agc: Port to `AgcAlgorithm`\n  ipa: ipu3: agc: Port to `AgcAlgorithm`\n  ipa: libipa: agc_mean_luminance: Remove control handling\n  ipa: libipa: histogram: total(): Use `back()`\n  ipa: libipa: histogram: Add `operator[]` to query bin\n  ipa: simple: Store exposure as `uint32_t`\n  ipa: simple: agc: Separate MSV calculation\n  ipa: simple: agc: Simplify min gain step handling\n  ipa: simple: agc: Use `Histogram`\n  ipa: simple: agc: Adjust histogram for black level\n  ipa: simple: agc: Move to libipa\n  ipa: libipa: agc_msv: Ensure limits are always respected\n  ipa: libipa: agc_msv: Handle min gain > 1.0 case\n  ipa: simple: Move sensor helper and controls to context\n  ipa: simple: Update controls after configuration\n  ipa: libipa: agc: Work without `CameraSensorHelper`\n  ipa: libipa: agc: Take parameters from active state for calculation\n  ipa: simple: agc: Port to `AgcAlgorithm`\n  libcamera: pipeline: Set vblank on more platforms\n\nJacopo Mondi (1):\n  ipa: libipa: agc_mean_luminance: Fold resetFrameCount() in configure()\n\n .../internal/software_isp/software_isp.h      |   3 +-\n include/libcamera/ipa/soft.mojom              |   2 +-\n src/ipa/ipu3/algorithms/agc.cpp               | 197 +++--\n src/ipa/ipu3/algorithms/agc.h                 |  21 +-\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                        | 723 ++++++++++++++++++\n src/ipa/libipa/agc.h                          | 160 ++++\n src/ipa/libipa/agc_mean_luminance.cpp         | 254 +++---\n src/ipa/libipa/agc_mean_luminance.h           |  61 +-\n src/ipa/libipa/agc_msv.cpp                    | 224 ++++++\n src/ipa/libipa/agc_msv.h                      |  51 ++\n src/ipa/libipa/exposure_mode_helper.cpp       |  19 +-\n src/ipa/libipa/exposure_mode_helper.h         |  11 +-\n src/ipa/libipa/histogram.cpp                  |   6 +\n src/ipa/libipa/histogram.h                    |   9 +-\n src/ipa/libipa/meson.build                    |   4 +\n src/ipa/mali-c55/algorithms/agc.cpp           | 206 ++---\n src/ipa/mali-c55/algorithms/agc.h             |   9 +-\n src/ipa/mali-c55/ipa_context.h                |  38 +-\n src/ipa/mali-c55/mali-c55.cpp                 | 165 +---\n src/ipa/rkisp1/algorithms/agc.cpp             | 460 +++--------\n src/ipa/rkisp1/algorithms/agc.h               |  15 +-\n src/ipa/rkisp1/algorithms/lux.cpp             |   2 +-\n src/ipa/rkisp1/ipa_context.cpp                | 104 +--\n src/ipa/rkisp1/ipa_context.h                  |  50 +-\n src/ipa/rkisp1/rkisp1.cpp                     | 128 +---\n src/ipa/simple/algorithms/agc.cpp             | 226 ++----\n src/ipa/simple/algorithms/agc.h               |  15 +-\n src/ipa/simple/algorithms/blc.cpp             |  12 +\n src/ipa/simple/ipa_context.h                  |  22 +-\n src/ipa/simple/soft_simple.cpp                | 101 +--\n src/libcamera/pipeline/ipu3/ipu3.cpp          |   1 +\n src/libcamera/pipeline/mali-c55/mali-c55.cpp  |   1 +\n src/libcamera/pipeline/simple/simple.cpp      |   3 +-\n src/libcamera/software_isp/software_isp.cpp   |  12 +-\n 37 files changed, 1853 insertions(+), 1676 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/libipa/agc_msv.cpp\n create mode 100644 src/ipa/libipa/agc_msv.h\n\n--\n2.55.0"}