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

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Oct 14 12:51:47 CEST 2021


Quoting Jean-Michel Hautbois (2021-10-13 16:41:17)
> 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.
> 

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois 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_;
>  
> -- 
> 2.30.2
>


More information about the libcamera-devel mailing list