[v7,00/32] ipa: libipa: Introduce libipa algorithms
mbox series

Message ID 20260805-libipa-algorithms-v7-0-7425b5b795d4@ideasonboard.com
Headers show
Series
  • ipa: libipa: Introduce libipa algorithms
Related show

Message

Jacopo Mondi Aug. 5, 2026, 4:12 p.m. UTC
v7 builds on v6 but removes the requirement for IPA modules to define
their own Interpolatator overloads.

The interface for IPA modules is similar to v5, but the quantization of
gain values happens in LscAlgorithm like in v6.

I think this is a nice compromise, and I hope we can move forwards with
this and merge it soon.

Milan: I haven't take you Simple patches (as I promised to) because your
series has other commits that I know not much about. However, rebasing
should hopefully be simple enough ? Sorry for pulling you in too many
directions!

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
Changes in v7:
- Address Barnabas' comments on using try_emplace and avoid copies when
  populating maps
- Move Components<> and ComponentsMap<> outside of LscAlgorithm to avoid
  IPA to define their own Interpolator::interpolate<> overloads

Changes in v6:
- Address comments received on v5, mostly on documentation
- Remove templating of LscPolynomial and perform quantization in
  LscAlgorithm

Changes in v5:
- Add "ipa: libipa: lsc_polynomial: Fix polynomial parsing error"
  to fix and exiting potential issue with Polynomial parsing
- Fix Simple, which I broke in v4, thanks Milan

Changes in v4:
- s/awb/AWB in comments everywhere, same for CCM and LSC
- Awb: changelog per patch
  - Make AwbStats pure virtual and move stats parsing logic to the IPA
    modules
  - Reduce comments/renames to reduce patch size and comments
- Collect tags

Changes in v3:
- Address comments on Awb from Stefan:
  - Introduce AwbImplementation::Result
  - Move AwbStats implementation to IPAs
  - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly
- Fix Saturation bug in Simple Ccm algorithm
- Fix Simple Ccm gain limits using Q<2, 8>
- Update Mali CCM and Gamma to latest uAPI patch version
- Fix Mali CCM gain masking as reported by Dan
- Break down libIPA Lsc implementation as requested by Stefan

Changes in v2:
- Introduce awb::Context to simplify ActiveState and FrameContext
  definition
- Add mali uAPI header for CCM and Gamma
- Do not rename Mali functions for hardware configuration in awb and lsc
- Spelling and documentation

---
Jacopo Mondi (29):
      ipa: libipa: awb: Reimplement AwbAlgorithm
      ipa: mali-c55: awb: Port to use libipa AwbAlgorithm
      ipa: libipa: Add CcmAlgorithm to libipa
      ipa: rkisp1: ccm: Port to use CcmAlgorithm
      include: linux: mali-c55: Update to support CCM and Gamma
      ipa: mali-c55: Implement Ccm algorithm
      ipa: rkisp1: lsc: Re-architecture Lsc support
      ipa: libipa: Introduce lsc_base.h
      ipa: libipa: lsc_polynomial: Fix polynomial parsing error
      ipa: libipa: lsc_polynomial: Rename LscPolynomial
      ipa: libipa: lsc_polynomial: Do not inline functions
      ipa: libipa: lsc: Move Interpolator<lsc::Components> to lsc_base
      ipa: rkisp1: lsc: Remove rogue empty line
      ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1
      ipa: libipa: lsc_table: Move LscTable from RkISP1
      ipa: libipa: lsc_base: Add sampleForCrop documentation
      ipa: libipa: lsc: Introduce LscAlgorithm
      ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1
      ipa: rkisp1: lsc: Port to use LscAlgorithm
      ipa: libipa: lsc: Make Components a map<>
      ipa: libipa: lsc: Document Components parsing
      ipa: libipa: lsc_polynomial: Remove sensorSize_
      ipa: libipa: lsc: Document LscDescriptor::sensorSize usage
      ipa: libipa: lsc: Quantize gains in IPA
      ipa: libipa: lsc: Quantize gains in LscAlgorithm
      ipa: libipa: lsc: Re-sort LscAlgorithmBase documentation
      ipa: mali-c55: Add sensorInfo to IPAContext
      ipa: mali-c55: Port to use LscAlgorithm
      ipa: libipa: lsc: Specialize Interpolator for uint8_t

Kieran Bingham (2):
      ipa: simple: awb: Port to use libipa AwbAlgorithm
      ipa: simple: Port to use libipa CcmAlgorithm

Laurent Pinchart (1):
      ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor

 .../internal/software_isp/debayer_params.h         |   4 +-
 include/linux/media/arm/mali-c55-config.h          |  86 +++-
 src/ipa/libipa/awb.cpp                             | 418 ++++++++++++++++---
 src/ipa/libipa/awb.h                               | 100 ++++-
 src/ipa/libipa/awb_bayes.cpp                       |  52 +--
 src/ipa/libipa/awb_bayes.h                         |  12 +-
 src/ipa/libipa/awb_grey.cpp                        |  16 +-
 src/ipa/libipa/awb_grey.h                          |   6 +-
 src/ipa/libipa/ccm.cpp                             | 245 +++++++++++
 src/ipa/libipa/ccm.h                               |  77 ++++
 src/ipa/libipa/lsc.cpp                             | 447 +++++++++++++++++++++
 src/ipa/libipa/lsc.h                               | 137 +++++++
 src/ipa/libipa/lsc_base.cpp                        | 138 +++++++
 src/ipa/libipa/lsc_base.h                          |  52 +++
 src/ipa/libipa/lsc_polynomial.cpp                  | 202 +++++++++-
 src/ipa/libipa/lsc_polynomial.h                    | 100 ++---
 src/ipa/libipa/lsc_table.cpp                       | 117 ++++++
 src/ipa/libipa/lsc_table.h                         |  55 +++
 src/ipa/libipa/meson.build                         |   8 +
 src/ipa/mali-c55/algorithms/awb.cpp                | 223 +++++-----
 src/ipa/mali-c55/algorithms/awb.h                  |  28 +-
 src/ipa/mali-c55/algorithms/ccm.cpp                | 173 ++++++++
 src/ipa/mali-c55/algorithms/ccm.h                  |  66 +++
 src/ipa/mali-c55/algorithms/lsc.cpp                | 160 +++++---
 src/ipa/mali-c55/algorithms/lsc.h                  |  32 +-
 src/ipa/mali-c55/algorithms/meson.build            |   1 +
 src/ipa/mali-c55/ipa_context.cpp                   |   3 +
 src/ipa/mali-c55/ipa_context.h                     |  20 +-
 src/ipa/mali-c55/mali-c55.cpp                      |   2 +
 src/ipa/mali-c55/params.h                          |   2 +
 src/ipa/rkisp1/algorithms/awb.cpp                  | 191 ++-------
 src/ipa/rkisp1/algorithms/awb.h                    |  18 +-
 src/ipa/rkisp1/algorithms/ccm.cpp                  |  97 +----
 src/ipa/rkisp1/algorithms/ccm.h                    |  17 +-
 src/ipa/rkisp1/algorithms/lsc.cpp                  | 428 +++-----------------
 src/ipa/rkisp1/algorithms/lsc.h                    |  38 +-
 src/ipa/rkisp1/ipa_context.h                       |  49 +--
 src/ipa/simple/algorithms/awb.cpp                  | 140 +++++--
 src/ipa/simple/algorithms/awb.h                    |  28 ++
 src/ipa/simple/algorithms/blc.cpp                  |   2 +-
 src/ipa/simple/algorithms/ccm.cpp                  |  74 ++--
 src/ipa/simple/algorithms/ccm.h                    |  22 +-
 src/ipa/simple/ipa_context.h                       |  15 +-
 src/libcamera/software_isp/debayer_cpu.cpp         |  12 +-
 44 files changed, 2976 insertions(+), 1137 deletions(-)
---
base-commit: 93bed4da915c8c88d68d1a286048f10147cc831a
change-id: 20260615-libipa-algorithms-59666bca0a2f

Best regards,
--  
Jacopo Mondi <jacopo.mondi@ideasonboard.com>