ipa: rkisp1: awb: Freeze AWB when means are too small
When the RGB means are too small, gains and color temperature can't be meaningfully calculated. Freeze the AWB in that case, using the previously calculated values. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
7dc60a5a27
commit
9b389ce79e
3 changed files with 20 additions and 1 deletions
|
@ -31,6 +31,9 @@ namespace ipa::rkisp1::algorithms {
|
|||
|
||||
LOG_DEFINE_CATEGORY(RkISP1Awb)
|
||||
|
||||
/* Minimum mean value below which AWB can't operate. */
|
||||
constexpr double kMeanMinThreshold = 2.0;
|
||||
|
||||
Awb::Awb()
|
||||
: rgbMode_(false)
|
||||
{
|
||||
|
@ -263,7 +266,17 @@ void Awb::process(IPAContext &context,
|
|||
greenMean /= frameContext.awb.gains.green;
|
||||
blueMean /= frameContext.awb.gains.blue;
|
||||
|
||||
frameContext.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);
|
||||
/*
|
||||
* If the means are too small we don't have enough information to
|
||||
* meaningfully calculate gains. Freeze the algorithm in that case.
|
||||
*/
|
||||
if (redMean < kMeanMinThreshold && greenMean < kMeanMinThreshold &&
|
||||
blueMean < kMeanMinThreshold) {
|
||||
frameContext.awb.temperatureK = activeState.awb.temperatureK;
|
||||
return;
|
||||
}
|
||||
|
||||
activeState.awb.temperatureK = estimateCCT(redMean, greenMean, blueMean);
|
||||
|
||||
/*
|
||||
* Estimate the red and blue gains to apply in a grey world. The green
|
||||
|
@ -290,6 +303,8 @@ void Awb::process(IPAContext &context,
|
|||
activeState.awb.gains.automatic.blue = blueGain;
|
||||
activeState.awb.gains.automatic.green = 1.0;
|
||||
|
||||
frameContext.awb.temperatureK = activeState.awb.temperatureK;
|
||||
|
||||
LOG(RkISP1Awb, Debug) << std::showpoint
|
||||
<< "Means [" << redMean << ", " << greenMean << ", " << blueMean
|
||||
<< "], gains [" << activeState.awb.gains.automatic.red << ", "
|
||||
|
|
|
@ -156,6 +156,9 @@ namespace libcamera::ipa::rkisp1 {
|
|||
* \var IPAActiveState::awb.gains.automatic.blue
|
||||
* \brief Automatic white balance gain for B channel
|
||||
*
|
||||
* \var IPAActiveState::awb.temperatureK
|
||||
* \brief Estimated color temperature
|
||||
*
|
||||
* \var IPAActiveState::awb.autoEnabled
|
||||
* \brief Whether the Auto White Balance algorithm is enabled
|
||||
*/
|
||||
|
|
|
@ -68,6 +68,7 @@ struct IPAActiveState {
|
|||
} automatic;
|
||||
} gains;
|
||||
|
||||
unsigned int temperatureK;
|
||||
bool autoEnabled;
|
||||
} awb;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue