[v2,00/17] Some rkisp1 awb improvements
mbox series

Message ID 20250319161152.63625-1-stefan.klug@ideasonboard.com
Headers show
Series
  • Some rkisp1 awb improvements
Related show

Message

Stefan Klug March 19, 2025, 4:11 p.m. UTC
Hi all,

This series contains a few fixes that greatly improve and stabilize the
AWB handling on rkisp1.

After the feedback from the first version, some parts were rewritten and
Laurent added a generic matrix inverse function.

Patches 1-8 add utility functions to Vector and Matrix.

The rest fixes some bugs and generally improves the AWB on rkisp1.
Please see the individual patches for details.

Best regards,
Stefan

Changes in v2:

- Replaced the matrix cast() and inverse() functions by better alternatives
- Added a manual CCM control
- Some small fixes (see logs in individual patches)


Laurent Pinchart (2):
  libcamera: matrix: Extend multiplication operator to heterogenous
    types
  libcamera: vector: Extend matrix multiplication operator to
    heterogenous types

Stefan Klug (15):
  libcamera: matrix: Replace SFINAE with static_asserts
  libcamera: matrix: Make most functions constexpr
  libcamera: matrix: Add a Span based constructor
  libcamera: vector: Add a Span based constructor
  libcamera: matrix: Add inverse() function
  test: Add minimal test for Matrix
  ipa: rkisp1: Refactor automatic/manual structure in IPAActiveState
  ipa: rkisp1: ccm/lsc: Fix CCM/LSC based on manual color temperature
  ipa: rkisp1: Implement manual ColourCorrectionMatrix control
  libipa: awb: Make result of gainsFromColourTemp optional
  ipa: rkisp1: awb: Use gains from color temperature curve
  ipa: rkisp1: Damp color temperature regulation
  ipa: rkisp1: awb: Set rgb mean limits to 180
  ipa: rkisp1: awb: Take the CCM into account for the AWB gains
    calculation
  ipa: rkisp1: awb: Avoid division by zero

 include/libcamera/internal/matrix.h |  82 ++++++-------
 include/libcamera/internal/vector.h |  21 ++--
 src/ipa/libipa/awb.cpp              |   2 +-
 src/ipa/libipa/awb.h                |   2 +-
 src/ipa/libipa/awb_bayes.cpp        |   4 +-
 src/ipa/libipa/awb_bayes.h          |   2 +-
 src/ipa/libipa/awb_grey.cpp         |   6 +-
 src/ipa/libipa/awb_grey.h           |   2 +-
 src/ipa/rkisp1/algorithms/awb.cpp   |  79 ++++++++-----
 src/ipa/rkisp1/algorithms/ccm.cpp   |  63 ++++++++--
 src/ipa/rkisp1/algorithms/ccm.h     |   6 +
 src/ipa/rkisp1/algorithms/lsc.cpp   |   6 +-
 src/ipa/rkisp1/ipa_context.h        |  15 ++-
 src/libcamera/matrix.cpp            | 175 +++++++++++++++++++++++++++-
 src/libcamera/vector.cpp            |  13 ++-
 test/matrix.cpp                     |  53 +++++++++
 test/meson.build                    |   1 +
 17 files changed, 427 insertions(+), 105 deletions(-)
 create mode 100644 test/matrix.cpp