[PATCH v3 2/4] ipa: rkisp1: algorithms: awb: Check for correct stats type
Stefan Klug
stefan.klug at ideasonboard.com
Fri Oct 18 17:30:58 CEST 2024
Sometimes the ISP produces statistics only with a subset of statistic
types being valid. It doesn't happen normally, but was observed in the
wild. Check for the RKISP1_CIF_ISP_STAT_AWB bit to prevent using invalid
or outdated data. As it doesn't happen regularly add an error message to
get notified when it happens.
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>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v2:
- Added error message
- Made condition more readable
- Collected tags
---
src/ipa/rkisp1/algorithms/awb.cpp | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index 955a9ff4a897..b3c00bef9b7e 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -215,6 +215,12 @@ 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)) {
+ LOG(RkISP1Awb, Error) << "AWB data is missing in statistics";
+ return;
+ }
if (rgbMode_) {
greenMean = awb->awb_mean[0].mean_y_or_g;
@@ -270,10 +276,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