[libcamera-devel] [PATCH v4 4/4] ipa: ipu3: awb: Clamp gain values

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Mar 2 13:43:19 CET 2022


On Wed, Mar 02, 2022 at 12:37:07PM +0000, Kieran Bingham wrote:
> 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?

[0, 8[ and [0, 8) are commonly used for this purpose.

> > 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;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list