[libcamera-devel] [PATCH v4 4/4] ipa: ipu3: awb: Clamp gain values
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Mar 2 13:37:07 CET 2022
Quoting Umang Jain (2022-02-28 17:02:43)
> Hi JM
>
> On 2/24/22 20:41, Jean-Michel Hautbois wrote:
> > The gain values are coded as u3.13 fixed point values, ie they can not
> > be more than 8. Clampt the values in order to avoid any off limits value
>
>
> s/Clampt/Clamp
>
> > which could make the IPU3 behave weirdly.
> >
> > 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 1dc27fc9..dc25be81 100644
> > --- a/src/ipa/ipu3/algorithms/awb.cpp
> > +++ b/src/ipa/ipu3/algorithms/awb.cpp
> > @@ -353,6 +353,14 @@ void Awb::awbGreyWorld()
> >
> > /* Color temperature is not relevant in Grey world but still useful to estimate it :-) */
> > asyncResults_.temperatureK = estimateCCT(sumRed.R, sumRed.G, sumBlue.B);
> > +
> > + /*
> > + * Gain values are unsigned integer value, range 0 to 8 with 13 bit
Techincally, we can't store '8' in this representation though can we.
It looks like the max is something like 7.99987792969 ... so maybe this
should be range 0 to < 8 ?
Unless there's a better notation to say up to but not including 8?
> I am not able to decipher "integer value" with "fractional part". The
> redGain and blueGain are floating valuesright..?
Perhaps stating that they are stored as unsigned integer 3.13 fixed
point might be more clear.
I would love to see a proper fixed-point class representing that, but
that could be a big task, so I think this is fine until we get something
like that.
With Clampt/Clamp, and this updated if needed/desired.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > + * fractional part.
> > + */
> > + redGain = std::clamp(redGain, 0.0, 65535.0 / 8192);
> > + blueGain = std::clamp(blueGain, 0.0, 65535.0 / 8192);
> > +
> > asyncResults_.redGain = redGain;
> > /* Hardcode the green gain to 1.0. */
> > asyncResults_.greenGain = 1.0;
More information about the libcamera-devel
mailing list