ipa: ipu3: agc: Refactor ev gain calculation and testing

When we compute the new gain, we use the iqMean_ and estimate an
exposure value gain to apply. Return early when the gain is less than
1%.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
Jean-Michel Hautbois 2021-11-04 14:22:37 +01:00
parent 4fdf1e4f5e
commit 3d81620b20

View file

@ -188,14 +188,6 @@ void Agc::filterExposure()
*/
void Agc::computeExposure(IPAFrameContext &frameContext)
{
/* Are we correctly exposed ? */
if (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) {
LOG(IPU3Agc, Debug) << "We are well exposed (iqMean = "
<< iqMean_ << ")";
return;
}
/* Get the effective exposure and gain applied on the sensor. */
uint32_t exposure = frameContext.sensor.exposure;
double analogueGain = frameContext.sensor.gain;
@ -203,6 +195,12 @@ void Agc::computeExposure(IPAFrameContext &frameContext)
/* Estimate the gain needed to have the proportion wanted */
double evGain = kEvGainTarget * knumHistogramBins / iqMean_;
if (std::abs(evGain - 1.0) < 0.01) {
LOG(IPU3Agc, Debug) << "We are well exposed (iqMean = "
<< iqMean_ << ")";
return;
}
/* extracted from Rpi::Agc::computeTargetExposure */
/* Calculate the shutter time in seconds */
utils::Duration currentShutter = exposure * lineDuration_;