[libcamera-devel] [PATCH v4 08/14] ipa: ipu3: agc: Update previous exposure value

Umang Jain umang.jain at ideasonboard.com
Fri Nov 12 09:53:10 CET 2021


Hi JM,

Thank you for the patch.

On 11/11/21 7:39 PM, Jean-Michel Hautbois wrote:
> Previously, the exposure value was calculated based on the estimated
> shutter time and gain applied. Now that we have the real values for the
> current frame, use those before estimating the next one and rename the
> variable accordingly.
>
> As the exposure value is updated in the beginning of the computation,
> there is no need to initialize effectiveExposureValue anymore in the
> configure call, and it can be a local variable and not a class variable
> anymore.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>


Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>

>
> ---
> v3: make effectiveExposureValue a local variable
> ---
>   src/ipa/ipu3/algorithms/agc.cpp | 26 +++++++++-----------------
>   src/ipa/ipu3/algorithms/agc.h   |  1 -
>   2 files changed, 9 insertions(+), 18 deletions(-)
>
> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
> index a34f070e..d736f21c 100644
> --- a/src/ipa/ipu3/algorithms/agc.cpp
> +++ b/src/ipa/ipu3/algorithms/agc.cpp
> @@ -80,8 +80,7 @@ static constexpr double kNormalizedLumaTarget = 0.16;
>   
>   Agc::Agc()
>   	: frameCount_(0), iqMean_(0.0), lineDuration_(0s), minExposureLines_(0),
> -	  maxExposureLines_(0), filteredExposure_(0s), currentExposure_(0s),
> -	  prevExposureValue_(0s)
> +	  maxExposureLines_(0), filteredExposure_(0s), currentExposure_(0s)
>   {
>   }
>   
> @@ -112,10 +111,6 @@ int Agc::configure(IPAContext &context, const IPAConfigInfo &configInfo)
>   	context.frameContext.agc.gain = minAnalogueGain_;
>   	context.frameContext.agc.exposure = minExposureLines_;
>   
> -	prevExposureValue_ = context.frameContext.agc.gain
> -			   * context.frameContext.agc.exposure
> -			   * lineDuration_;
> -
>   	return 0;
>   }
>   
> @@ -222,6 +217,13 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
>   
>   	/* Calculate the shutter time in seconds */
>   	utils::Duration currentShutter = exposure * lineDuration_;
> +
> +	/*
> +	 * Update the exposure value for the next computation using the values
> +	 * of exposure and gain really used by the sensor.
> +	 */
> +	utils::Duration effectiveExposureValue = currentShutter * analogueGain;
> +
>   	LOG(IPU3Agc, Debug) << "Actual total exposure " << currentShutter * analogueGain
>   			    << " Shutter speed " << currentShutter
>   			    << " Gain " << analogueGain
> @@ -239,7 +241,7 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
>   	 * Calculate the current exposure value for the scene as the latest
>   	 * exposure value applied multiplied by the new estimated gain.
>   	 */
> -	currentExposure_ = prevExposureValue_ * evGain;
> +	currentExposure_ = effectiveExposureValue * evGain;
>   	utils::Duration minShutterSpeed = minExposureLines_ * lineDuration_;
>   	utils::Duration maxShutterSpeed = maxExposureLines_ * lineDuration_;
>   
> @@ -271,16 +273,6 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain)
>   	/* Update the estimated exposure and gain. */
>   	frameContext.agc.exposure = shutterTime / lineDuration_;
>   	frameContext.agc.gain = stepGain;
> -
> -	/*
> -	 * Update the exposure value for the next process call.
> -	 *
> -	 * \todo Obtain the values of the exposure time and analog gain
> -	 * that were actually used by the sensor, either from embedded
> -	 * data when available, or from the delayed controls
> -	 * infrastructure in case a slow down caused a mismatch.
> -	 */
> -	prevExposureValue_ = shutterTime * analogueGain;
>   }
>   
>   /**
> diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h
> index 79736283..1d085b40 100644
> --- a/src/ipa/ipu3/algorithms/agc.h
> +++ b/src/ipa/ipu3/algorithms/agc.h
> @@ -54,7 +54,6 @@ private:
>   
>   	utils::Duration filteredExposure_;
>   	utils::Duration currentExposure_;
> -	utils::Duration prevExposureValue_;
>   
>   	uint32_t stride_;
>   };


More information about the libcamera-devel mailing list