[PATCH v3 15/16] ipa: rkisp1: awb: Take the CCM into account for the AWB gains calculation

Stefan Klug stefan.klug at ideasonboard.com
Thu Apr 3 17:49:20 CEST 2025


The AWB measurements are taken after the CCM. This can be seen by
enabling debug logging on AWB, disabling AWB (stats will still be
processed) and manually chaning the CCM.

This means that the estimated colour temperature and the corresponding
CCM also lead to changed rgbMeans which in turn leads to oscillations.
Fix that by applying the inverse transform on the rgbMeans.

Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

---

Changes in v2:
- Improved commit message
- Added comment in the code

Changes in v3:
- Fixed typo in comment
---
 src/ipa/rkisp1/algorithms/awb.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 47b29725af51..03449e87e1a0 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -397,6 +397,12 @@ RGB<double> Awb::calculateRgbMeans(const IPAFrameContext &frameContext, const rk
 		rgbMeans = rgbMeans.max(0.0);
 	}
 
+	/*
+	 * The ISP computes the AWB means after applying the CCM. Apply the
+	 * inverse as we want to get the raw means before the colour gains.
+	 */
+	rgbMeans = frameContext.ccm.ccm.inverse() * rgbMeans;
+
 	/*
 	 * The ISP computes the AWB means after applying the colour gains,
 	 * divide by the gains that were used to get the raw means from the
-- 
2.43.0



More information about the libcamera-devel mailing list