[libcamera-devel] [PATCH 09/13] ipa: ipu3: agc: Rename gains properly
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Oct 15 03:16:19 CEST 2021
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 at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at 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_++;
> }
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list