[RFC,v2,00/43] ipa: libipa: agc rework
mbox series

Message ID 20260723154327.1357866-1-barnabas.pocze@ideasonboard.com
Headers show
Series
  • ipa: libipa: agc rework
Related show

Message

Barnabás Pőcze July 23, 2026, 3:42 p.m. UTC
Unfortunately the first version did not work out because there is a desire
for at least some kind of rudimentary operation even without a CameraSensorHelper
in the general algorithm.

So this version adds an `AgcAlgorithm` that is essentially a copy of the rkisp1
agc algorithm, only that it can either use AgcMeanLuminance or the agc algorithm
from the simple ipa module (which is now moved into libipa).

Similarly to the previous version, the following ipa modules are converted:
  * ipu3
  * mali-c55
  * rkisp1
  * simple

This applies on top of the current master branch, not rebased on any of the libipa
rework yet. Conflicts should be minimal.

v1: https://patchwork.libcamera.org/cover/27179/

Barnabás Pőcze (43):
  libcamera: software_isp: init(): Fix documentation typo
  ipa: simple: Remove control presence sanity check
  ipa: simple: agc: Do not overwrite sensor exposure/gain
  ipa: rkisp1: Remove `IPASessionConfiguration::sensor.defVBlank`
  ipa: libipa: agc_mean_luminance: Remove the need for inheritance
  ipa: rkisp1: Move sensor control info map to context
  ipa: rkisp1: Update sensor info when configuring
  ipa: rkisp1: updateControls(): Use sensor info from context
  ipa: rkisp1: Move AGC related controls into AGC algorithm
  ipa: mali-c55: Remove `DigitalGain` support
  ipa: libipa: agc_mean_luminance: Avoid some duplicate lookups
  ipa: libipa: agc_mean_luminance: Remove unnecessary `std::shared_ptr`
  ipa: libipa: agc_mean_luminance: calculateNewEv(): Fix typo
  ipa: libipa: agc_mean_luminance: calculateNewEv(): Collect params
  ipa: libipa: agc_mean_luminance: constraintClampGain(): Mark `const`
  ipa: libipa: agc_mean_luminance: calculateNewEv(): Collect results
  ipa: libipa: agc_mean_luminance: calculateNewEv(): Return y target
  ipa: libipa: agc_mean_luminance: Remove persistent params
  ipa: libipa: agc_mean_luminance: Reset `filteredExposure_` when
    configuring
  ipa: Simplify sensor exposure/gain setting/getting
  ipa: libipa: Add `AgcAlgorithm`
  ipa: libipa: agc: Clamp exposure value
  ipa: libipa: agc: Adjust debug messages slightly
  ipa: libipa: agc: Use full range as default `FrameDurationLimits`
  ipa: libipa: agc: Use default exposure
  ipa: rkisp1: agc: Port to `AgcAlgorithm`
  ipa: mali-c55: agc: Port to `AgcAlgorithm`
  ipa: ipu3: agc: Port to `AgcAlgorithm`
  ipa: libipa: agc_mean_luminance: Remove control handling
  ipa: libipa: histogram: total(): Use `back()`
  ipa: libipa: histogram: Add `operator[]` to query bin
  ipa: simple: Store exposure as `uint32_t`
  ipa: simple: agc: Separate MSV calculation
  ipa: simple: agc: Simplify min gain step handling
  ipa: simple: agc: Use `Histogram`
  ipa: simple: agc: Adjust histogram for black level
  ipa: simple: agc: Move to libipa
  ipa: libipa: agc_msv: Ensure limits are always respected
  ipa: libipa: agc_msv: Handle min gain > 1.0 case
  ipa: simple: Move sensor helper and controls to context
  ipa: simple: Update controls after configuration
  ipa: libipa: agc: Work without `CameraSensorHelper`
  ipa: simple: agc: Port to `AgcAlgorithm`

 .../internal/software_isp/software_isp.h      |   3 +-
 include/libcamera/ipa/soft.mojom              |   2 +-
 src/ipa/ipu3/algorithms/agc.cpp               | 197 +++--
 src/ipa/ipu3/algorithms/agc.h                 |  21 +-
 src/ipa/ipu3/ipa_context.cpp                  |  49 +-
 src/ipa/ipu3/ipa_context.h                    |  27 +-
 src/ipa/ipu3/ipu3.cpp                         | 141 +---
 src/ipa/libipa/agc.cpp                        | 756 ++++++++++++++++++
 src/ipa/libipa/agc.h                          | 152 ++++
 src/ipa/libipa/agc_mean_luminance.cpp         | 229 +++---
 src/ipa/libipa/agc_mean_luminance.h           |  58 +-
 src/ipa/libipa/agc_msv.cpp                    | 224 ++++++
 src/ipa/libipa/agc_msv.h                      |  51 ++
 src/ipa/libipa/exposure_mode_helper.cpp       |  19 +-
 src/ipa/libipa/exposure_mode_helper.h         |  11 +-
 src/ipa/libipa/histogram.cpp                  |   6 +
 src/ipa/libipa/histogram.h                    |   9 +-
 src/ipa/libipa/meson.build                    |   4 +
 src/ipa/mali-c55/algorithms/agc.cpp           | 203 ++---
 src/ipa/mali-c55/algorithms/agc.h             |   9 +-
 src/ipa/mali-c55/ipa_context.h                |  38 +-
 src/ipa/mali-c55/mali-c55.cpp                 | 165 +---
 src/ipa/rkisp1/algorithms/agc.cpp             | 460 +++--------
 src/ipa/rkisp1/algorithms/agc.h               |  15 +-
 src/ipa/rkisp1/algorithms/lux.cpp             |   2 +-
 src/ipa/rkisp1/ipa_context.cpp                | 104 +--
 src/ipa/rkisp1/ipa_context.h                  |  50 +-
 src/ipa/rkisp1/rkisp1.cpp                     | 127 +--
 src/ipa/simple/algorithms/agc.cpp             | 226 ++----
 src/ipa/simple/algorithms/agc.h               |  15 +-
 src/ipa/simple/algorithms/blc.cpp             |  12 +
 src/ipa/simple/ipa_context.h                  |  22 +-
 src/ipa/simple/soft_simple.cpp                | 101 +--
 src/libcamera/pipeline/simple/simple.cpp      |   2 +-
 src/libcamera/software_isp/software_isp.cpp   |  12 +-
 35 files changed, 1871 insertions(+), 1651 deletions(-)
 create mode 100644 src/ipa/libipa/agc.cpp
 create mode 100644 src/ipa/libipa/agc.h
 create mode 100644 src/ipa/libipa/agc_msv.cpp
 create mode 100644 src/ipa/libipa/agc_msv.h

--
2.55.0