[libcamera-devel] [PATCH 10/12] ipa: ipu3: awb: Introduce Black Level Correction

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Sep 28 18:10:56 CEST 2021


On Thu, Sep 23, 2021 at 10:16:23AM +0200, Jean-Michel Hautbois wrote:
> The pixels output by the camera normally include a black level, because
> sensors do not always report a signal level of '0' for black. Pixels at
> or below this level should be considered black and to achieve that, we
> need to substract an offset to all the pixels. This can be taken into
> account by reading the lowest value of a special region on sensors which
> is not exposed to the lens. This provides a substracting factor to be
> able to adjust the expected black levels in the resultant images.
> 
> For a camera outputting 10-bit pixel values (in the range 0 to 1023) a
> typical black level might be 64. It is a fixed value, obtained by
> capturing a raw frame with minimum exposure and gain fixed to 1.0 while
> covering the sensor (the darker the better). We consider it good enough
> as a very first approximation, until we measure it during a tuning
> process and include it in a configuration file
> 
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
> ---
>  src/ipa/ipu3/algorithms/awb.cpp | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
> index a5391653..3013870b 100644
> --- a/src/ipa/ipu3/algorithms/awb.cpp
> +++ b/src/ipa/ipu3/algorithms/awb.cpp
> @@ -388,9 +388,17 @@ void Awb::prepare(IPAContext &context, ipu3_uapi_params *params)
>  	/* The CCM matrix may change when color temperature will be used */
>  	params->acc_param.ccm = imguCssCcmDefault;
>  
> +	/* The Optical Black Level correction values */

I think I'd like to see a clear todo highlighting that these values are
ad-hoc:

	/*
	 * \todo The correction values should come from sensor specific
	 * tuning processes. This is a first approximation
	 */

> +	params->obgrid_param.gr = 64;
> +	params->obgrid_param.r = 64;
> +	params->obgrid_param.b = 64;
> +	params->obgrid_param.gb = 64;
> +
>  	params->use.acc_awb = 1;
>  	params->use.acc_bnr = 1;
>  	params->use.acc_ccm = 1;

I'd be tempted by a blank line here to split out the obgrid to make it
clear that it's a separate component.

With those:

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> +	params->use.obgrid = 1;
> +	params->use.obgrid_param = 1;
>  }
>  
>  } /* namespace ipa::ipu3::algorithms */
> -- 
> 2.30.2
> 

-- 
--
Kieran



More information about the libcamera-devel mailing list