[PATCH v4 1/6] libcamera: controls: Update the ColourTemperature control to be writable
Stefan Klug
stefan.klug at ideasonboard.com
Fri Aug 30 13:21:36 CEST 2024
Hi Laurent,
On Fri, Aug 30, 2024 at 01:15:55PM +0300, Laurent Pinchart wrote:
> Hi Stefan,
>
> (CC'ing David)
>
> On Fri, Aug 30, 2024 at 07:58:31AM +0200, Stefan Klug wrote:
> > On Fri, Aug 30, 2024 at 02:01:19AM +0300, Laurent Pinchart wrote:
> > > On Tue, Aug 13, 2024 at 10:44:18AM +0200, Stefan Klug wrote:
> > > > For manual control it is helpful to be able to specify a fixed colour
> > > > temperature. It also provides an easy way to apply the temperature
> > > > specific CCMs and colour gains that are contained in the tuning files.
> > > >
> > > > Document this and update the control dependencies.
> > > >
> > > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > > ---
> > > > src/libcamera/control_ids_core.yaml | 24 ++++++++++++++++++++----
> > > > 1 file changed, 20 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml
> > > > index cf40771d3896..04dcc4af67fc 100644
> > > > --- a/src/libcamera/control_ids_core.yaml
> > > > +++ b/src/libcamera/control_ids_core.yaml
> > > > @@ -252,9 +252,12 @@ controls:
> > > > - AwbEnable:
> > > > type: bool
> > > > description: |
> > > > - Enable or disable the AWB.
> > > > + Enable or disable the AWB. Disabling AWB stops updates to the
> > > > + ColourGains and to the ColourCorrectionMatrix.
> > >
> > > Please split this in two paragraphs. The first paragraph is translated
> > > to a \brief doxygen command, and should be a single sentence. Same
> > > below.
> > >
> > > I would like to clarify this a bit. Here's an attempt, is it what you
> > > mean ?
> > >
> > > Enable or disable the AWB.
> > >
> > > When AWB is enabled, the algorithm estimates the colour temperature of
> > > the scene, and computes colour gains and the colour correction matrix
> > > automatically. The computed colour temperate, gains and correction
> > > matrix are reported in metadata. The corresponding controls are ignored
> > > if set in a request.
> > >
> > > When AWB is disabled, the colour temperature, gains and correction
> > > matrix are not updated automatically and can be set manually in
> > > requests.
> >
> > Looks good, I'll apply that.
> >
> > > >
> > > > + \sa ColourCorrectionMatrix
> > > > \sa ColourGains
> > > > + \sa ColourTemperature
> > > >
> > > > # AwbMode needs further attention:
> > > > # - Auto-generate max enum value.
> > > > @@ -309,13 +312,24 @@ controls:
> > > > disabled.
> > > >
> > > > \sa AwbEnable
> > > > + \sa ColourTemperature
> > > > size: [2]
> > > >
> > > > - ColourTemperature:
> > > > type: int32_t
> > > > - description: Report the current estimate of the colour temperature, in
> > > > - kelvin, for this frame. The ColourTemperature control can only be
> > > > - returned in metadata.
> > > > + description: |
> > > > + Report the current estimate of the colour temperature, in kelvin, for
> > > > + this frame. An implementation may also allow this control to be set when
> > >
> > > s/also //
> > >
> > > > + AWB is disabled. In that case ColourGains and the ColourCorrectionMatrix
> > > > + get set accordingly. If either ColourGains or ColourCorrectionMatrix are
> > > > + specified at the same time, they take precedence.
> > >
> > > maybe "they take precedence, and the ColourTemperature is ignored" ? Or,
> > > if an application sets ColourTemperature and ColourGains but not
> > > ColourCorrectionMatrix, do you expect the implementation to apply the
> > > requested ColourGains and set ColourCorrectionMatrix based on the
> > > temperature ?
> >
> > The latter is exactly what happens. The following table lists the
> > possible options:
> >
> > CT -> CG(CT), CCM(CT)
> > CT, CG -> CG, CCM(CT)
> > CT, CCM -> CG(CT), CCM
> > CT, CG, CCM -> CG, CCM
>
> David, is this the behaviour you would also expect for Raspberry Pi ?
>
> > Do you have a nice sentence for that?
>
> /me checks... I have a set of French proverbs, but none of the seem very
> appropriate. Sorry :-)
>
What about "If ColourGains and ColourTemperature are specified at the
same time, ColourGains takes precedence. The same applies to
ColourCorrectionMatrix."?
We can discuss the final wording after feedback from David.
>
> > > > +
> > > > + The metadata will only report measured colour temperature values when
> > > > + available, even if set manually.
> > >
> > > I'm not sure to understand this.
> >
> > This is based on the comment from Kieran:
> > https://patchwork.libcamera.org/patch/20771/#30590 He wanted to prepare
> > for cases (RPi) where no temperature gets estimated. Only measurements
> > are returned in metadata. Manually set temperature is not reflected in
> > the metadata. This has the nice side effect, that you can set
> > AwbEnable=false, and still get temperature estimations in the metadata.
>
> This means that whether or not the estimated colour temperature will be
> returned in metadata will be platform-dependent. Can we avoid that ? It
> makes writing portable applications much more difficult.
>
> My other concern is that metadata is supposed to report the setting
> applied to a frame. The general rule is that, if a control can be set,
> the value that has been set for a frame is reported in metadata. There
> are exception for trigger-like controls. As this example clearly shows,
> having multiple controls that ultimately set the same values is also
> problematic from this point of view. Do we need to set a rule that
> higher-level controls that get translated to lower-level controls are
> never reported in metadata ?
>
> If we do that, then we'll have ColourTemperature as a control being
> defined differently from ColourTemperature as metadata. I'm not sure I
> like it much. Should we have two different controls ?
>
We could split that to "MeasuredColourTemperature" and
"AppliedColorTemperature". But there are always cases where one of them
(or both) is not available (as discussed on Patch 3). I think on rkisp
we could ensure that MeasuredColourTemperature is always available and
contains "something" as the statistics are always available. But in the
end as a user I'd prefer to know when the algorithm failed to deduce a
valid colour temperature.
Regards,
Stefan
>
> > > > +
> > > > + \sa AwbEnable
> > > > + \sa ColourCorrectionMatrix
> > > > + \sa ColourGains
> > > >
> > > > - Saturation:
> > > > type: float
> > > > @@ -365,6 +379,8 @@ controls:
> > > > transformation. The 3x3 matrix is stored in conventional reading
> > > > order in an array of 9 floating point values.
> > > >
> > > > + \sa AwbEnable
> > > > + \sa ColourTemperature
> > > > size: [3,3]
> > > >
> > > > - ScalerCrop:
>
> --
> Regards,
>
> Laurent Pinchart
More information about the libcamera-devel
mailing list