[PATCH v1 2/6] ipa: rkisp1: awb: Load white balance gains from tuning file
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Aug 6 10:52:25 CEST 2024
Quoting Stefan Klug (2024-08-06 07:26:59)
> On Mon, Aug 05, 2024 at 02:43:39PM +0100, Kieran Bingham wrote:
> > Quoting Stefan Klug (2024-08-05 13:05:03)
> > > For the implementation of a manual colour temperature setting, it is
> > > necessary to read predefined colour gains per colour temperature from
> > > the tuning file. Implement this in a backwards compatible way. If no
> > > gains are contained in the tuning file, loading just continues as
> > > before.
> > >
> > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > ---
> > > src/ipa/rkisp1/algorithms/awb.cpp | 18 ++++++++++++++++++
> > > src/ipa/rkisp1/algorithms/awb.h | 6 ++++++
> > > 2 files changed, 24 insertions(+)
> > >
> > > diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
> > > index 4ccafd48dedd..957d24fe3425 100644
> > > --- a/src/ipa/rkisp1/algorithms/awb.cpp
> > > +++ b/src/ipa/rkisp1/algorithms/awb.cpp
> > > @@ -39,6 +39,24 @@ Awb::Awb()
> > > {
> > > }
> > >
> > > +/**
> > > + * \copydoc libcamera::ipa::Algorithm::init
> > > + */
> > > +int Awb::init(IPAContext &context, const YamlObject &tuningData)
> > > +{
> > > + MatrixInterpolator<double, 2, 1> gains;
> > > + int ret = gains.readYaml(tuningData["gains"], "ct", "gains");
> >
> > Do we have a way to check if there are gains set at all? If there are no
> > gains set in the yaml - we wouldn't report a warning at all I'd expect?
>
> If there are no gains in the yaml, readYaml returns an error. We could
> add a check for that specific case and silence the warning. But do we
> really want to silence that? It basically says "You have an old tuning
> file, some features are limited but I'll continue". So I think it's
> reasonable - up to you.
I think if we can get the schema validation then we can add this as an
expected/required tuning entry then and maybe that also solves the issue
as then the warning really would be a warning, so I'm fine with leaving
this as it is given we're aiming in that direction.
>
> >
> > (And presumably we wouldn't expose/report a manual color temperature
> > control as setable either?)
>
> That's a bit difficult here as the temperature also controls the ccm.
> So we would need to check the existence of ccms also. As the ccms are
> necessary for a properly tuned sensor, I think it is ok to
> unconditionally add the control.
Ok so we have a dependency on both algo's for the suitable / acceptable
parameters for the control? That makes me think back to how we determine
what the min/max values can be - but that's in a later patch I think ;-)
>
> >
> > > + if (ret < 0)
> > > + LOG(RkISP1Awb, Warning)
> > > + << "Failed to parse 'gains' "
> > > + << "parameter from tuning file; "
> > > + << "rgb gains will not be set based on colour temperature";
> > > + else
> > > + gains_ = gains;
> > > +
> > > + return 0;
> > > +}
> > > +
> > > /**
> > > * \copydoc libcamera::ipa::Algorithm::configure
> > > */
> > > diff --git a/src/ipa/rkisp1/algorithms/awb.h b/src/ipa/rkisp1/algorithms/awb.h
> > > index 06c92896e2dc..a010e6d1cb3c 100644
> > > --- a/src/ipa/rkisp1/algorithms/awb.h
> > > +++ b/src/ipa/rkisp1/algorithms/awb.h
> > > @@ -7,6 +7,10 @@
> > >
> > > #pragma once
> > >
> > > +#include <optional>
> > > +
> > > +#include "libipa/matrix_interpolator.h"
> > > +
> > > #include "algorithm.h"
> > >
> > > namespace libcamera {
> > > @@ -19,6 +23,7 @@ public:
> > > Awb();
> > > ~Awb() = default;
> > >
> > > + int init(IPAContext &context, const YamlObject &tuningData) override;
> > > int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
> > > void queueRequest(IPAContext &context, const uint32_t frame,
> > > IPAFrameContext &frameContext,
> > > @@ -34,6 +39,7 @@ public:
> > > private:
> > > uint32_t estimateCCT(double red, double green, double blue);
> > >
> > > + std::optional<MatrixInterpolator<double, 2, 1>> gains_;
> > > bool rgbMode_;
> > > };
> > >
> > > --
> > > 2.43.0
> > >
More information about the libcamera-devel
mailing list