[libcamera-devel] [PATCH] ipa: ipu3: agc: Clamp shutter speed

Umang Jain umang.jain at ideasonboard.com
Tue Oct 26 10:52:30 CEST 2021


Hi JM,

On 10/26/21 1:51 PM, Jean-Michel Hautbois wrote:
> In case the maximum exposure received from the sensor is very high, we
> can have a very high shutter speed with a small analogue gain, and it
> may result in very slow framerate. We are not really supporting it for
> the moment, so clamp the shutter speed to an arbitrary value of 60ms.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>


Tested on nautilus and most of the CTS regressions were fixed (which 
were https://i.imgur.com/vv9Sjyh.png)

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

I'll be trying to run low-light situations too, will keep you updated on 
the results.

> ---
>   src/ipa/ipu3/algorithms/agc.cpp | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
> index 6c151232..5927b5d3 100644
> --- a/src/ipa/ipu3/algorithms/agc.cpp
> +++ b/src/ipa/ipu3/algorithms/agc.cpp
> @@ -34,6 +34,9 @@ static constexpr uint32_t kFrameSkipCount = 6;
>   static constexpr double kMinAnalogueGain = 1.0;
>   static constexpr double kMaxAnalogueGain = 8.0;
>   
> +/* Maximum shutter speed allowed */
> +static constexpr utils::Duration kMaxShutterSpeed = 60ms;
> +
>   /* Histogram constants */
>   static constexpr uint32_t knumHistogramBins = 256;
>   static constexpr double kEvGainTarget = 0.5;
> @@ -54,7 +57,8 @@ int Agc::configure(IPAContext &context, const IPAConfigInfo &configInfo)
>   
>   	/* \todo replace the exposure in lines storage with time based ones. */
>   	minExposureLines_ = context.configuration.agc.minShutterSpeed / lineDuration_;
> -	maxExposureLines_ = context.configuration.agc.maxShutterSpeed / lineDuration_;
> +	maxExposureLines_ = std::min(context.configuration.agc.maxShutterSpeed / lineDuration_,
> +				     kMaxShutterSpeed / lineDuration_);
>   
>   	minAnalogueGain_ = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);
>   	maxAnalogueGain_ = std::min(context.configuration.agc.maxAnalogueGain, kMaxAnalogueGain);


More information about the libcamera-devel mailing list