[RFC,v3,00/50] ipa: libipa: agc rework
mbox series

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

Message

Barnabás Pőcze Aug. 3, 2026, 1:13 p.m. UTC
This 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 versions, 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.

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

Barnabás Pőcze (49):
  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: Omit `setLimits()` in `configure()`
  ipa: libipa: agc: Use default exposure
  ipa: libipa: agc: Use full range as default `FrameDurationLimits`
  ipa: libipa: agc: Adjust debug messages slightly
  ipa: libipa: agc: Store digital gain
  ipa: libipa: agc: Use minimum line length
  ipa: libipa: agc: Fix multiplication type
  ipa: libipa: agc: Calculate vblank and frame duration sooner
  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: libipa: agc: Take parameters from active state for calculation
  ipa: simple: agc: Port to `AgcAlgorithm`
  libcamera: pipeline: Set vblank on more platforms

Jacopo Mondi (1):
  ipa: libipa: agc_mean_luminance: Fold resetFrameCount() in configure()

 .../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                         | 138 +---
 src/ipa/libipa/agc.cpp                        | 723 ++++++++++++++++++
 src/ipa/libipa/agc.h                          | 160 ++++
 src/ipa/libipa/agc_mean_luminance.cpp         | 254 +++---
 src/ipa/libipa/agc_mean_luminance.h           |  61 +-
 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           | 206 ++---
 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                     | 128 +---
 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/ipu3/ipu3.cpp          |   1 +
 src/libcamera/pipeline/mali-c55/mali-c55.cpp  |   1 +
 src/libcamera/pipeline/simple/simple.cpp      |   3 +-
 src/libcamera/software_isp/software_isp.cpp   |  12 +-
 37 files changed, 1853 insertions(+), 1676 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