[libcamera-devel] [PATCH 05/13] ipa: ipu3: agc: Rename exposure values properly

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Oct 15 00:58:36 CEST 2021


Hi Jean-Michel,

Thank you for the patch.

On Wed, Oct 13, 2021 at 05:41:17PM +0200, Jean-Michel Hautbois wrote:
> The exposure value is filtered in filterExposure() using the
> currentExposure_ and setting a prevExposure_ variable. This is misnamed
> as it is not the previous exposure, but a filtered value.
> 
> Rename it accordingly.
> 
> 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 | 28 ++++++++++++++--------------
>  src/ipa/ipu3/algorithms/agc.h   |  4 ++--
>  2 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
> index 5eafe82c..7c2d4201 100644
> --- a/src/ipa/ipu3/algorithms/agc.cpp
> +++ b/src/ipa/ipu3/algorithms/agc.cpp
> @@ -49,7 +49,7 @@ static constexpr double kEvGainTarget = 0.5;
>  
>  Agc::Agc()
>  	: frameCount_(0), lastFrame_(0), iqMean_(0.0), lineDuration_(0s),
> -	  maxExposureTime_(0s), prevExposure_(0s), prevExposureNoDg_(0s),
> +	  maxExposureTime_(0s), filteredExposure_(0s), filteredExposureNoDg_(0s),
>  	  currentExposure_(0s), currentExposureNoDg_(0s)
>  {
>  }
> @@ -94,24 +94,24 @@ void Agc::processBrightness(const ipu3_uapi_stats_3a *stats,
>  void Agc::filterExposure()
>  {
>  	double speed = 0.2;
> -	if (prevExposure_ == 0s) {
> +	if (filteredExposure_ == 0s) {
>  		/* DG stands for digital gain.*/
> -		prevExposure_ = currentExposure_;
> -		prevExposureNoDg_ = currentExposureNoDg_;
> +		filteredExposure_ = currentExposure_;
> +		filteredExposureNoDg_ = currentExposureNoDg_;
>  	} else {
>  		/*
>  		 * If we are close to the desired result, go faster to avoid making
>  		 * multiple micro-adjustments.
>  		 * \ todo: Make this customisable?
>  		 */
> -		if (prevExposure_ < 1.2 * currentExposure_ &&
> -		    prevExposure_ > 0.8 * currentExposure_)
> +		if (filteredExposure_ < 1.2 * currentExposure_ &&
> +		    filteredExposure_ > 0.8 * currentExposure_)
>  			speed = sqrt(speed);
>  
> -		prevExposure_ = speed * currentExposure_ +
> -				prevExposure_ * (1.0 - speed);
> -		prevExposureNoDg_ = speed * currentExposureNoDg_ +
> -				prevExposureNoDg_ * (1.0 - speed);
> +		filteredExposure_ = speed * currentExposure_ +
> +				filteredExposure_ * (1.0 - speed);
> +		filteredExposureNoDg_ = speed * currentExposureNoDg_ +
> +				filteredExposureNoDg_ * (1.0 - speed);
>  	}
>  	/*
>  	 * We can't let the no_dg exposure deviate too far below the
> @@ -119,10 +119,10 @@ void Agc::filterExposure()
>  	 * in the ISP to hide it (which will cause nasty oscillation).
>  	 */
>  	double fastReduceThreshold = 0.4;
> -	if (prevExposureNoDg_ <
> -	    prevExposure_ * fastReduceThreshold)
> -		prevExposureNoDg_ = prevExposure_ * fastReduceThreshold;
> -	LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << prevExposure_;
> +	if (filteredExposureNoDg_ <
> +	    filteredExposure_ * fastReduceThreshold)
> +		filteredExposureNoDg_ = filteredExposure_ * fastReduceThreshold;
> +	LOG(IPU3Agc, Debug) << "After filtering, total_exposure " << filteredExposure_;
>  }
>  
>  void Agc::lockExposureGain(uint32_t &exposure, double &gain)
> diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h
> index 64b71c65..cd4d4855 100644
> --- a/src/ipa/ipu3/algorithms/agc.h
> +++ b/src/ipa/ipu3/algorithms/agc.h
> @@ -46,8 +46,8 @@ private:
>  	Duration lineDuration_;
>  	Duration maxExposureTime_;
>  
> -	Duration prevExposure_;
> -	Duration prevExposureNoDg_;
> +	Duration filteredExposure_;
> +	Duration filteredExposureNoDg_;
>  	Duration currentExposure_;
>  	Duration currentExposureNoDg_;
>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list