[PATCH v2 14/17] ipa: rkisp1: Damp color temperature regulation

Kieran Bingham kieran.bingham at ideasonboard.com
Mon Mar 31 19:50:27 CEST 2025


Quoting Stefan Klug (2025-03-19 16:11:19)
> Damp the regulation of the color temperature with the same factor as the
> gains.  Not damping the color temperature leads to visible flicker, as
> the CCM changes too much.
> 
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> ---
> 
> Changes in v2:
> - Collected tags
> ---
>  src/ipa/rkisp1/algorithms/awb.cpp | 3 +++
>  src/ipa/rkisp1/algorithms/ccm.cpp | 4 ----
>  2 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> index 286d9e3e2018..149c6aa59c8d 100644
> --- a/src/ipa/rkisp1/algorithms/awb.cpp
> +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> @@ -342,9 +342,12 @@ void Awb::process(IPAContext &context,
>  
>         /* Filter the values to avoid oscillations. */
>         double speed = 0.2;
> +       double ct = estimateCCT(rgbMeans);
> +       ct = ct * speed + activeState.awb.automatic.temperatureK * (1 - speed);
>         awbResult.gains = awbResult.gains * speed +
>                           activeState.awb.automatic.gains * (1 - speed);
>  
> +       activeState.awb.automatic.temperatureK = static_cast<unsigned int>(ct);

I'm confused by this patch being late in the series and adding a
calculation of temperature, without removing or modifying an existing
calculation.

Is this duplicating where the automatic color temperature is estimated?
Do we now call estimateCCT twice ?

>         activeState.awb.automatic.gains = awbResult.gains;
>  
>         LOG(RkISP1Awb, Debug)
> diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
> index 303ac3dd2fe2..b7f32f0d5d8a 100644
> --- a/src/ipa/rkisp1/algorithms/ccm.cpp
> +++ b/src/ipa/rkisp1/algorithms/ccm.cpp
> @@ -139,10 +139,6 @@ void Ccm::prepare(IPAContext &context, const uint32_t frame,
>         }
>  
>         uint32_t ct = frameContext.awb.temperatureK;
> -       /*
> -        * \todo The colour temperature will likely be noisy, add filtering to
> -        * avoid updating the CCM matrix all the time.
> -        */
>         if (frame > 0 && ct == ct_) {
>                 frameContext.ccm.ccm = context.activeState.ccm.automatic;
>                 return;
> -- 
> 2.43.0
>


More information about the libcamera-devel mailing list