ipa: rkisp1: algorithms: awb: Check for correct stats type
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. For simpler code structure, the ColourTemperature metadata entry gets written unconditionally and overwritten later if needed. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
0e0e32b189
commit
4c131dfa5c
1 changed files with 7 additions and 3 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue