Message ID | 20211013154125.133419-10-jeanmichel.hautbois@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Quoting Jean-Michel Hautbois (2021-10-13 16:41:21) > We have mixed terms between gain, analogue gain and the exposure value > gain. > > Makes it clear when we are using the analogue gain from the sensor, and s/Makes/Make/ > when we are using the calculated gain to be applied to the exposure > value to reach the target. > Sounds helpful to me. Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> > --- > src/ipa/ipu3/algorithms/agc.cpp | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp > index 3ec1c60c..bd28998a 100644 > --- a/src/ipa/ipu3/algorithms/agc.cpp > +++ b/src/ipa/ipu3/algorithms/agc.cpp > @@ -123,7 +123,7 @@ void Agc::filterExposure() > LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_; > } > > -void Agc::lockExposureGain(uint32_t &exposure, double &gain) > +void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain) > { > /* Algorithm initialization should wait for first valid frames */ > /* \todo - have a number of frames given by DelayedControls ? > @@ -135,16 +135,17 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > if (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) { > LOG(IPU3Agc, Debug) << "!!! Good exposure with iqMean = " << iqMean_; > } else { > - double newGain = kEvGainTarget * knumHistogramBins / iqMean_; > + double evGain = kEvGainTarget * knumHistogramBins / iqMean_; > > /* extracted from Rpi::Agc::computeTargetExposure */ > Duration currentShutter = exposure * lineDuration_; > - currentExposureNoDg_ = currentShutter * gain; > + currentExposureNoDg_ = currentShutter * analogueGain; > LOG(IPU3Agc, Debug) << "Actual total exposure " << currentExposureNoDg_ > << " Shutter speed " << currentShutter > - << " Gain " << gain; > + << " Gain " << analogueGain > + << " Needed ev gain " << evGain; > > - currentExposure_ = currentExposureNoDg_ * newGain; > + currentExposure_ = currentExposureNoDg_ * evGain; > Duration maxTotalExposure = kMaxShutterSpeed * kMaxGain; > currentExposure_ = std::min(currentExposure_, maxTotalExposure); > LOG(IPU3Agc, Debug) << "Target total exposure " << currentExposure_ > @@ -180,7 +181,7 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > << stepGain; > > exposure = shutterTime / lineDuration_; > - gain = stepGain; > + analogueGain = stepGain; > } > lastFrame_ = frameCount_; > } > @@ -188,9 +189,9 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) > { > uint32_t &exposure = context.frameContext.agc.exposure; > - double &gain = context.frameContext.agc.gain; > + double &analogueGain = context.frameContext.agc.gain; > processBrightness(stats, context.configuration.grid.bdsGrid); > - lockExposureGain(exposure, gain); > + lockExposureGain(exposure, analogueGain); > frameCount_++; > } > > -- > 2.30.2 >
Hi Jean-Michel, Thank you for the patch. On Wed, Oct 13, 2021 at 05:41:21PM +0200, Jean-Michel Hautbois wrote: > We have mixed terms between gain, analogue gain and the exposure value > gain. > > Makes it clear when we are using the analogue gain from the sensor, and > when we are using the calculated gain to be applied to the exposure > value to reach the target. > > Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/ipa/ipu3/algorithms/agc.cpp | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp > index 3ec1c60c..bd28998a 100644 > --- a/src/ipa/ipu3/algorithms/agc.cpp > +++ b/src/ipa/ipu3/algorithms/agc.cpp > @@ -123,7 +123,7 @@ void Agc::filterExposure() > LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_; > } > > -void Agc::lockExposureGain(uint32_t &exposure, double &gain) > +void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain) > { > /* Algorithm initialization should wait for first valid frames */ > /* \todo - have a number of frames given by DelayedControls ? > @@ -135,16 +135,17 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > if (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) { > LOG(IPU3Agc, Debug) << "!!! Good exposure with iqMean = " << iqMean_; > } else { > - double newGain = kEvGainTarget * knumHistogramBins / iqMean_; > + double evGain = kEvGainTarget * knumHistogramBins / iqMean_; > > /* extracted from Rpi::Agc::computeTargetExposure */ > Duration currentShutter = exposure * lineDuration_; > - currentExposureNoDg_ = currentShutter * gain; > + currentExposureNoDg_ = currentShutter * analogueGain; > LOG(IPU3Agc, Debug) << "Actual total exposure " << currentExposureNoDg_ > << " Shutter speed " << currentShutter > - << " Gain " << gain; > + << " Gain " << analogueGain > + << " Needed ev gain " << evGain; > > - currentExposure_ = currentExposureNoDg_ * newGain; > + currentExposure_ = currentExposureNoDg_ * evGain; > Duration maxTotalExposure = kMaxShutterSpeed * kMaxGain; > currentExposure_ = std::min(currentExposure_, maxTotalExposure); > LOG(IPU3Agc, Debug) << "Target total exposure " << currentExposure_ > @@ -180,7 +181,7 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > << stepGain; > > exposure = shutterTime / lineDuration_; > - gain = stepGain; > + analogueGain = stepGain; > } > lastFrame_ = frameCount_; > } > @@ -188,9 +189,9 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) > void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) > { > uint32_t &exposure = context.frameContext.agc.exposure; > - double &gain = context.frameContext.agc.gain; > + double &analogueGain = context.frameContext.agc.gain; > processBrightness(stats, context.configuration.grid.bdsGrid); > - lockExposureGain(exposure, gain); > + lockExposureGain(exposure, analogueGain); > frameCount_++; > } >
diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp index 3ec1c60c..bd28998a 100644 --- a/src/ipa/ipu3/algorithms/agc.cpp +++ b/src/ipa/ipu3/algorithms/agc.cpp @@ -123,7 +123,7 @@ void Agc::filterExposure() LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_; } -void Agc::lockExposureGain(uint32_t &exposure, double &gain) +void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain) { /* Algorithm initialization should wait for first valid frames */ /* \todo - have a number of frames given by DelayedControls ? @@ -135,16 +135,17 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) if (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) { LOG(IPU3Agc, Debug) << "!!! Good exposure with iqMean = " << iqMean_; } else { - double newGain = kEvGainTarget * knumHistogramBins / iqMean_; + double evGain = kEvGainTarget * knumHistogramBins / iqMean_; /* extracted from Rpi::Agc::computeTargetExposure */ Duration currentShutter = exposure * lineDuration_; - currentExposureNoDg_ = currentShutter * gain; + currentExposureNoDg_ = currentShutter * analogueGain; LOG(IPU3Agc, Debug) << "Actual total exposure " << currentExposureNoDg_ << " Shutter speed " << currentShutter - << " Gain " << gain; + << " Gain " << analogueGain + << " Needed ev gain " << evGain; - currentExposure_ = currentExposureNoDg_ * newGain; + currentExposure_ = currentExposureNoDg_ * evGain; Duration maxTotalExposure = kMaxShutterSpeed * kMaxGain; currentExposure_ = std::min(currentExposure_, maxTotalExposure); LOG(IPU3Agc, Debug) << "Target total exposure " << currentExposure_ @@ -180,7 +181,7 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) << stepGain; exposure = shutterTime / lineDuration_; - gain = stepGain; + analogueGain = stepGain; } lastFrame_ = frameCount_; } @@ -188,9 +189,9 @@ void Agc::lockExposureGain(uint32_t &exposure, double &gain) void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) { uint32_t &exposure = context.frameContext.agc.exposure; - double &gain = context.frameContext.agc.gain; + double &analogueGain = context.frameContext.agc.gain; processBrightness(stats, context.configuration.grid.bdsGrid); - lockExposureGain(exposure, gain); + lockExposureGain(exposure, analogueGain); frameCount_++; }
We have mixed terms between gain, analogue gain and the exposure value gain. Makes it clear when we are using the analogue gain from the sensor, and when we are using the calculated gain to be applied to the exposure value to reach the target. Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> --- src/ipa/ipu3/algorithms/agc.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)