[PATCH v2 16/17] ipa: rkisp1: awb: Take the CCM into account for the AWB gains calculation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Apr 1 03:47:57 CEST 2025


On Mon, Mar 31, 2025 at 06:56:27PM +0100, Kieran Bingham wrote:
> Quoting Stefan Klug (2025-03-19 16:11:21)
> > The AWB measurements are taken after the CCM. This can be seen by
> > enabling debug logging on AWB, disabling AWB (stats will still be
> > processed) and manually chaning the CCM.
> > 
> > This means that the estimated colour temperature and the corresponding
> > CCM also lead to changed rgbMeans which in turn leads to oscillations.
> > Fix that by applying the inverse transform on the rgbMeans.
> 
> I'm happy to see this one!
> 
> > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > 
> > ---
> > 
> > Changes in v2:
> > - Improved commit message
> > - Added comment in the code
> > ---
> >  src/ipa/rkisp1/algorithms/awb.cpp | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> > index 324bc14b42a0..e8b04d03748d 100644
> > --- a/src/ipa/rkisp1/algorithms/awb.cpp
> > +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> > @@ -412,6 +412,12 @@ RGB<double> Awb::calculateRgbMeans(const IPAFrameContext &frameContext, const rk
> >                 rgbMeans = rgbMeans.max(0.0);
> >         }
> >  
> > +       /*
> > +        * The ISP computes the AWB means after applying the ccm. Apply the

s/ccm/CCM/

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> > +        * inverse as we want to get the raw means before the colour gains.
> > +        */
> > +       rgbMeans = frameContext.ccm.ccm.inverse() * rgbMeans;
> > +
> 
> So 'simple' yet so powerful thanks to the helpers before.
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> 
> Sounds silly, but I would have written this as :
> 
> 	rgbMeans = rgbMeans * frameContext.ccm.ccm.inverse();
> 
> But I (very much) hope that's identical,

It's not :-)

> but reads as 'multiply the rgb
> by the inverse ccm' to me, (as opposed to 'multiply the inverse CCM by
> the rgbMeans).
> 
> Anyway, it shouldn't make a difference so it's fine either way to me.
> 
> >         /*
> >          * The ISP computes the AWB means after applying the colour gains,
> >          * divide by the gains that were used to get the raw means from the

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list