[libcamera-devel] [PATCH 03/13] ipa: ipu3: awb: Use saturation under 90%

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Oct 14 12:32:37 CEST 2021


Quoting Jean-Michel Hautbois (2021-10-13 16:41:15)
> The AWB grey world algorithm tries to find a grey value and it can't do
> it on over-exposed images. To exclude those, the saturation ratio is
> used for each cell, and the cell is included only if this ratio is 0.
> 
> Now that we have changed the threshold, more cells may be considered as
> partially saturated and excluded, making the algorithm to not run.

", preventing the algorithm from running efficiently." ?

or s/efficiently/correctly/ ?

> 
> Change that behaviour, and consider 90% as a good enough ratio.
> 
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
> ---
>  src/ipa/ipu3/algorithms/awb.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
> index 5574bd44..30693923 100644
> --- a/src/ipa/ipu3/algorithms/awb.cpp
> +++ b/src/ipa/ipu3/algorithms/awb.cpp
> @@ -161,6 +161,7 @@ int Awb::configure(IPAContext &context,
>          * \todo This proportion could be configured.
>          */
>         cellsPerZoneThreshold_ = cellsPerZoneX_ * cellsPerZoneY_ * 80 / 100;
> +       LOG(IPU3Awb, Debug) << "Threshold for AWB is set to " << cellsPerZoneThreshold_;

This is now a bit confusing. Your commit message mentions 90%, but the
cellsPerZoneThreshold is 80%?

I guess these are two different thresholds...


>  
>         return 0;
>  }
> @@ -232,7 +233,7 @@ void Awb::generateAwbStats(const ipu3_uapi_stats_3a *stats)
>                                 reinterpret_cast<const ipu3_uapi_awb_set_item *>(
>                                         &stats->awb_raw_buffer.meta_data[cellPosition]
>                                 );

This probably now deserves a comment explaining why 90% is used.

			  /*
			   * Use cells which have less than 90%
			   * saturation as an initial means to include
			   * otherwise bright cells which are not fully
			   * saturated.
			   *
			   * \todo The 90% saturation rate may require
			   * further empirical measurements and
			   * optimisation during camera tuning phases.
			   */

> -                       if (currentCell->sat_ratio == 0) {
> +                       if (currentCell->sat_ratio <= 255 * 90 / 100) {
>                                 /* The cell is not saturated, use the current cell */
>                                 awbStats_[awbZonePosition].counted++;
>                                 uint32_t greenValue = currentCell->Gr_avg + currentCell->Gb_avg;
> -- 
> 2.30.2
>


More information about the libcamera-devel mailing list