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

Umang Jain umang.jain at ideasonboard.com
Tue Oct 26 10:58:04 CEST 2021


Hi JM,

On 10/26/21 2:24 PM, Jean-Michel Hautbois wrote:
>
>
> On 26/10/2021 10:52, Umang Jain wrote:
>> 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)
>
> Is "most" meaning "all the ones introduced by this new series" or is 
> there still new ones ?


Sorry, I mean the latter. All the regressions I saw with AGC fix 
series(merged), were fixed by this patch.

>
>>
>> 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