[libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold for the histogram calculation

Jean-Michel Hautbois jeanmichel.hautbois at ideasonboard.com
Tue Nov 16 16:20:13 CET 2021


Hi Laurent,

On 16/11/2021 15:59, Laurent Pinchart wrote:
> Hello,
> 
> On Tue, Nov 16, 2021 at 02:41:14PM +0000, Kieran Bingham wrote:
>> Quoting Jean-Michel Hautbois (2021-11-16 08:09:56)
>>> Until f8f07f94 (ipa: ipu3: agc: Improve gain calculation, 2021-11-04)
> 
> s/Until/Until commit/
> 
> I'd drop the date, and expand the commit ID to 12 characters as usual.

OK, this is what git log --pretty=reference returned, I will use 
--abbrev instead.

> 
>>> the gain to apply on the exposure value was only using the histogram.
>>> Now that the global brightness of the frame is estimated too, we don't
>>> need to remove part of the saturated pixels from the equation anymore.
> 
> I'm not sure to understand why the above commit changed the situation,
> but I also don't understand why we needed to take saturation into
> account here in the first place, so the change looks good to me overall.
> 
> Commit f8f07f94 also added a histogram empty check. Do we still need it
> ?

I don't think we need it anymore... as I can't see why the histogram 
could be empty now. I may remove it too in v2 then.

> 
>>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
>>
>> This is still working quite well here. No perceived regression as far
>> as I can tell, and it's still coping well with backlights and skylights.
>>
>> Tested-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>>
>>> ---
>>>   src/ipa/ipu3/algorithms/agc.cpp | 24 ++++++++----------------
>>>   1 file changed, 8 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
>>> index 4e424857..f67a79d3 100644
>>> --- a/src/ipa/ipu3/algorithms/agc.cpp
>>> +++ b/src/ipa/ipu3/algorithms/agc.cpp
>>> @@ -58,12 +58,6 @@ static constexpr uint32_t knumHistogramBins = 256;
>>>   /* Target value to reach for the top 2% of the histogram */
>>>   static constexpr double kEvGainTarget = 0.5;
>>>   
>>> -/*
>>> - * Maximum ratio of saturated pixels in a cell for the cell to be considered
>>> - * non-saturated and counted by the AGC algorithm.
>>> - */
>>> -static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 20 / 100;
>>> -
>>>   /* Number of frames to wait before calculating stats on minimum exposure */
>>>   static constexpr uint32_t kNumStartupFrames = 10;
>>>   
>>> @@ -133,16 +127,14 @@ void Agc::measureBrightness(const ipu3_uapi_stats_3a *stats,
>>>                                          &stats->awb_raw_buffer.meta_data[cellPosition]
>>>                                  );
>>>   
>>> -                       if (cell->sat_ratio <= kMinCellsPerZoneRatio) {
>>> -                               uint8_t gr = cell->Gr_avg;
>>> -                               uint8_t gb = cell->Gb_avg;
>>> -                               /*
>>> -                                * Store the average green value to estimate the
>>> -                                * brightness. Even the overexposed pixels are
>>> -                                * taken into account.
>>> -                                */
>>> -                               hist[(gr + gb) / 2]++;
>>> -                       }
>>> +                       uint8_t gr = cell->Gr_avg;
>>> +                       uint8_t gb = cell->Gb_avg;
>>> +                       /*
>>> +                        * Store the average green value to estimate the
>>> +                        * brightness. Even the overexposed pixels are
>>> +                        * taken into account.
>>> +                        */
>>> +                       hist[(gr + gb) / 2]++;
>>>                  }
>>>          }
>>>   
> 


More information about the libcamera-devel mailing list