[PATCH 07/10] ipa: rkisp1: Damp color temperature regulation
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Mar 19 16:37:46 CET 2025
Quoting Stefan Klug (2025-03-19 15:33:48)
> Hi Kieran,
>
> Thank you for the review.
>
> On Thu, Feb 20, 2025 at 12:20:18PM +0000, Kieran Bingham wrote:
> > Quoting Stefan Klug (2025-02-17 10:01:48)
> > > 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.
> >
> > Interesting, I thought we had something on the CCM interplotator so it
> > wouldn't change too much on small movements of the colour temperature,
> > but I guess smoothing out the colour temperature is reasonable anyway -
> > especially as it's an estimate. I wonder if we should have some sort of
> > IIR instances to make these a bit more specific, but the speed is fine
> > now.
>
> The interpolator has support for quantizations. On lsc we use that. But
> I'm not really confident if that is the best strategy. The damping is
> merely to damp larger spikes, which wouldn't get caught by quantization.
> With the IIR instance you are completely right. I even had some
> prototype somewhere. But properly tuning an IIR filter can also be a
> pain :-)
Yes, indeed! they're difficult to get right for sure.
No need to complicate things here now.
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >
> >
> > Or maybe we should report the real calculated value to metadata, but
> > filter it on the input to the CCM interpolator ?
>
> I'm quite undecided here. The filtered data might be better than the
> unfiltered one? I think I'd stick to the filtered one, as it is in sync
> with the gains.
I think that makes a lot of sense! If we report a colour temperature, we
should make sure the gains we use correspond to it!
>
> Regards,
> Stefan
>
> >
> > >
> > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > ---
> > > src/ipa/rkisp1/algorithms/awb.cpp | 5 +++--
> > > 1 file changed, 3 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> > > index 9244a1e64f41..347d38d226b4 100644
> > > --- a/src/ipa/rkisp1/algorithms/awb.cpp
> > > +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> > > @@ -320,8 +320,6 @@ void Awb::process(IPAContext &context,
> > > rgbMeans.b() < kMeanMinThreshold)
> > > return;
> > >
> > > - activeState.awb.automatic.temperatureK = estimateCCT(rgbMeans);
> > > -
> > > /*
> > > * Estimate the red and blue gains to apply in a grey world. The green
> > > * gain is hardcoded to 1.0. Avoid divisions by zero by clamping the
> > > @@ -343,8 +341,11 @@ 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);
> > > gains = gains * speed + activeState.awb.automatic.gains * (1 - speed);
> > >
> > > + activeState.awb.automatic.temperatureK = static_cast<unsigned int>(ct);
> > > activeState.awb.automatic.gains = gains;
> > >
> > > LOG(RkISP1Awb, Debug)
> > > --
> > > 2.43.0
> > >
More information about the libcamera-devel
mailing list