[libcamera-devel] [PATCH 1/2] ipa: ipu3: agc: Drop hard-codec analogue gain max

Jean-Michel Hautbois jeanmichel.hautbois at yoseli.org
Thu Jun 1 07:32:08 CEST 2023


Hi guys,

On 29/05/2023 14:44, Laurent Pinchart via libcamera-devel wrote:
> Hi Jacopo,
> 
> Thank you for the patch.
> 
> On Mon, May 29, 2023 at 02:39:25PM +0200, Jacopo Mondi via libcamera-devel wrote:
>> As the sensor's analogue gain range is known, drop the arbitrary
>> maximum limit for the sensor analogue gain.
>>
>> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> 
> I'm pretty sure that as soon as we'll merge this patch we'll get a
> regression report and will need to implement proper AGC tuning. Oh well
> :-)

This limit was, if I recall correctly, set to limit the gain as we could 
for instance have a driver (or sensor) setting a maximum of 16 while 
after 8 it is not behaving correctly (hello Omnivision). On the sgo2, 
the ov sensor is going full white for a too high gain (again, if I 
recall correctly). One could argue this is a driver issue, but the 
datasheet says it can do it.

The other reason was that multiplying by more than 8 is really a lot of 
amplification for such sensors. Maybe having the possibility to add a 
tuning value for this would make sense (ie, having a maximum default 
which can be overridden) ?

Wait and see then, if there is a regression, this should be seen quite 
easily (just put your device in a black room :-D).

JM

> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
>> ---
>>   src/ipa/ipu3/algorithms/agc.cpp | 7 +++----
>>   1 file changed, 3 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
>> index b5309bdbea25..606a237a4a59 100644
>> --- a/src/ipa/ipu3/algorithms/agc.cpp
>> +++ b/src/ipa/ipu3/algorithms/agc.cpp
>> @@ -47,9 +47,8 @@ namespace ipa::ipu3::algorithms {
>>   
>>   LOG_DEFINE_CATEGORY(IPU3Agc)
>>   
>> -/* Limits for analogue gain values */
>> +/* Minimum limit for analogue gain value */
>>   static constexpr double kMinAnalogueGain = 1.0;
>> -static constexpr double kMaxAnalogueGain = 8.0;
>>   
>>   /* \todo Honour the FrameDurationLimits control instead of hardcoding a limit */
>>   static constexpr utils::Duration kMaxShutterSpeed = 60ms;
>> @@ -97,10 +96,10 @@ int Agc::configure(IPAContext &context,
>>   				    kMaxShutterSpeed);
>>   
>>   	minAnalogueGain_ = std::max(configuration.agc.minAnalogueGain, kMinAnalogueGain);
>> -	maxAnalogueGain_ = std::min(configuration.agc.maxAnalogueGain, kMaxAnalogueGain);
>> +	maxAnalogueGain_ = configuration.agc.maxAnalogueGain;
>>   
>>   	/* Configure the default exposure and gain. */
>> -	activeState.agc.gain = std::max(minAnalogueGain_, kMinAnalogueGain);
>> +	activeState.agc.gain = minAnalogueGain_;
>>   	activeState.agc.exposure = 10ms / configuration.sensor.lineDuration;
>>   
>>   	frameCount_ = 0;
> 


More information about the libcamera-devel mailing list