[PATCH v1 2/4] ipa: rkisp1: algorithms: awb: Check for correct stats type

Stefan Klug stefan.klug at ideasonboard.com
Tue Oct 15 22:38:13 CEST 2024


Sometimes the ISP produces statistics only with a subset of statistic
types being valid. It doesn't happen often, but it happens.  Check for
the RKISP1_CIF_ISP_STAT_AWB bit to prevent using invalid or outdated
data.

For simpler code structure, the ColourTemperature metadata entry gets
written unconditionally and overwritten later if needed.

Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
---
 src/ipa/rkisp1/algorithms/awb.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 955a9ff4a897..86bcf20f6527 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -215,6 +215,10 @@ void Awb::process(IPAContext &context,
 			static_cast<float>(frameContext.awb.gains.red),
 			static_cast<float>(frameContext.awb.gains.blue)
 		});
+	metadata.set(controls::ColourTemperature, activeState.awb.temperatureK);
+
+	if (!(stats && stats->meas_type & RKISP1_CIF_ISP_STAT_AWB))
+		return;
 
 	if (rgbMode_) {
 		greenMean = awb->awb_mean[0].mean_y_or_g;
@@ -270,10 +274,8 @@ void Awb::process(IPAContext &context,
 	 * meaningfully calculate gains. Freeze the algorithm in that case.
 	 */
 	if (redMean < kMeanMinThreshold && greenMean < kMeanMinThreshold &&
-	    blueMean < kMeanMinThreshold) {
-		metadata.set(controls::ColourTemperature, activeState.awb.temperatureK);
+	    blueMean < kMeanMinThreshold)
 		return;
-	}
 
 	activeState.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);
 
-- 
2.43.0



More information about the libcamera-devel mailing list