[PATCH v4 1/6] libcamera: controls: Update the ColourTemperature control to be writable
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Aug 30 12:15:55 CEST 2024
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 :-)
> > > +
> > > + 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 ?
> > > +
> > > + \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