diff mbox series

[v3,1/2] media: v4l2-ctrls: Add V4L2_CID_NOTIFY_GAIN_XXX controls

Message ID 20210722121249.16483-2-david.plowman@raspberrypi.com (mailing list archive)
State New, archived
Headers show
Series New V4L2 controls V4L2_CID_NOTIFY_GAIN_XXX | expand

Commit Message

David Plowman July 22, 2021, 12:12 p.m. UTC
We add new controls, one for each of the four usual Bayer channels:

V4L2_CID_NOTIFY_GAIN_RED
V4L2_CID_NOTIFY_GAIN_GREENR
V4L2_CID_NOTIFY_GAIN_BLUE
V4L2_CID_NOTIFY_GAIN_GREENB

These are provided for sensors that need to know what colour gains
will be applied to the Bayer channel by subsequent processing (such as
by an ISP), even though the sensor will not apply this gain itself.

The units are linear with the default value indicating a gain of
exactly 1.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
---
 drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 ++++
 include/uapi/linux/v4l2-controls.h        | 4 ++++
 2 files changed, 8 insertions(+)

Comments

Hans Verkuil Aug. 5, 2021, 3:04 p.m. UTC | #1
On 22/07/2021 14:12, David Plowman wrote:
> We add new controls, one for each of the four usual Bayer channels:
> 
> V4L2_CID_NOTIFY_GAIN_RED
> V4L2_CID_NOTIFY_GAIN_GREENR
> V4L2_CID_NOTIFY_GAIN_BLUE
> V4L2_CID_NOTIFY_GAIN_GREENB
> 
> These are provided for sensors that need to know what colour gains
> will be applied to the Bayer channel by subsequent processing (such as
> by an ISP), even though the sensor will not apply this gain itself.
> 
> The units are linear with the default value indicating a gain of
> exactly 1.
> 
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>

Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Regards,

	Hans

> ---
>  drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 ++++
>  include/uapi/linux/v4l2-controls.h        | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> index b6344bbf1e00..12c810cd4ae6 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -1106,6 +1106,10 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_TEST_PATTERN_GREENR:	return "Green (Red) Pixel Value";
>  	case V4L2_CID_TEST_PATTERN_BLUE:	return "Blue Pixel Value";
>  	case V4L2_CID_TEST_PATTERN_GREENB:	return "Green (Blue) Pixel Value";
> +	case V4L2_CID_NOTIFY_GAIN_RED:		return "Notify Red Gain";
> +	case V4L2_CID_NOTIFY_GAIN_GREENR:	return "Notify Green (Red) Gain";
> +	case V4L2_CID_NOTIFY_GAIN_BLUE:		return "Notify Blue Gain";
> +	case V4L2_CID_NOTIFY_GAIN_GREENB:	return "Notify Green (Blue) Gain";
>  
>  	/* Image processing controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index fdf97a6d7d18..711930bb54f0 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -1117,6 +1117,10 @@ enum v4l2_jpeg_chroma_subsampling {
>  #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
>  #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
>  #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
> +#define V4L2_CID_NOTIFY_GAIN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
> +#define V4L2_CID_NOTIFY_GAIN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 10)
> +#define V4L2_CID_NOTIFY_GAIN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 11)
> +#define V4L2_CID_NOTIFY_GAIN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 12)
>  
>  
>  /* Image processing controls */
>
Laurent Pinchart Aug. 5, 2021, 3:22 p.m. UTC | #2
Hi David,

Thank you for the patch.

On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> We add new controls, one for each of the four usual Bayer channels:
> 
> V4L2_CID_NOTIFY_GAIN_RED
> V4L2_CID_NOTIFY_GAIN_GREENR
> V4L2_CID_NOTIFY_GAIN_BLUE
> V4L2_CID_NOTIFY_GAIN_GREENB

This will effectively limit the API to Bayer patterns. I wonder if we
should instead implement it as a single array control, with one element
per CFA component.

> These are provided for sensors that need to know what colour gains
> will be applied to the Bayer channel by subsequent processing (such as
> by an ISP), even though the sensor will not apply this gain itself.
> 
> The units are linear with the default value indicating a gain of
> exactly 1.
> 
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> ---
>  drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 ++++
>  include/uapi/linux/v4l2-controls.h        | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> index b6344bbf1e00..12c810cd4ae6 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -1106,6 +1106,10 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_TEST_PATTERN_GREENR:	return "Green (Red) Pixel Value";
>  	case V4L2_CID_TEST_PATTERN_BLUE:	return "Blue Pixel Value";
>  	case V4L2_CID_TEST_PATTERN_GREENB:	return "Green (Blue) Pixel Value";
> +	case V4L2_CID_NOTIFY_GAIN_RED:		return "Notify Red Gain";
> +	case V4L2_CID_NOTIFY_GAIN_GREENR:	return "Notify Green (Red) Gain";
> +	case V4L2_CID_NOTIFY_GAIN_BLUE:		return "Notify Blue Gain";
> +	case V4L2_CID_NOTIFY_GAIN_GREENB:	return "Notify Green (Blue) Gain";
>  
>  	/* Image processing controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index fdf97a6d7d18..711930bb54f0 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -1117,6 +1117,10 @@ enum v4l2_jpeg_chroma_subsampling {
>  #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
>  #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
>  #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
> +#define V4L2_CID_NOTIFY_GAIN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
> +#define V4L2_CID_NOTIFY_GAIN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 10)
> +#define V4L2_CID_NOTIFY_GAIN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 11)
> +#define V4L2_CID_NOTIFY_GAIN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 12)
>  
>  
>  /* Image processing controls */
Sakari Ailus Aug. 5, 2021, 3:40 p.m. UTC | #3
Hi David, Laurent,

On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> Hi David,
> 
> Thank you for the patch.
> 
> On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > We add new controls, one for each of the four usual Bayer channels:
> > 
> > V4L2_CID_NOTIFY_GAIN_RED
> > V4L2_CID_NOTIFY_GAIN_GREENR
> > V4L2_CID_NOTIFY_GAIN_BLUE
> > V4L2_CID_NOTIFY_GAIN_GREENB
> 
> This will effectively limit the API to Bayer patterns. I wonder if we
> should instead implement it as a single array control, with one element
> per CFA component.

There are other raw patterns, too. Supporting them would likely require one
or a few more controls.

That said, as the values change often it's more efficient to use a single
control. But each colour combination (not each pattern) would require its
own control in this case, eventually requiring more controls.

Given that the number of sensors using non-Bayer patterns but still produce
Bayer output is likely to grow, these could be used by a number of devices.
I'd hence prefer an array control as well.
Laurent Pinchart Aug. 5, 2021, 3:49 p.m. UTC | #4
Hi Sakari,

On Thu, Aug 05, 2021 at 06:40:42PM +0300, Sakari Ailus wrote:
> On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> > On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > > We add new controls, one for each of the four usual Bayer channels:
> > > 
> > > V4L2_CID_NOTIFY_GAIN_RED
> > > V4L2_CID_NOTIFY_GAIN_GREENR
> > > V4L2_CID_NOTIFY_GAIN_BLUE
> > > V4L2_CID_NOTIFY_GAIN_GREENB
> > 
> > This will effectively limit the API to Bayer patterns. I wonder if we
> > should instead implement it as a single array control, with one element
> > per CFA component.
> 
> There are other raw patterns, too. Supporting them would likely require one
> or a few more controls.
> 
> That said, as the values change often it's more efficient to use a single
> control. But each colour combination (not each pattern) would require its
> own control in this case, eventually requiring more controls.

I'm not sure to follow you. My idea is to define a single control, with
a number of elements that depends on the pattern being used, and the
order specified in the native sensor pattern. I don't think each colour
combination would then require its own control.

> Given that the number of sensors using non-Bayer patterns but still produce
> Bayer output is likely to grow, these could be used by a number of devices.
> I'd hence prefer an array control as well.
Sakari Ailus Aug. 5, 2021, 6:05 p.m. UTC | #5
On Thu, Aug 05, 2021 at 06:49:33PM +0300, Laurent Pinchart wrote:
> Hi Sakari,
> 
> On Thu, Aug 05, 2021 at 06:40:42PM +0300, Sakari Ailus wrote:
> > On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> > > On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > > > We add new controls, one for each of the four usual Bayer channels:
> > > > 
> > > > V4L2_CID_NOTIFY_GAIN_RED
> > > > V4L2_CID_NOTIFY_GAIN_GREENR
> > > > V4L2_CID_NOTIFY_GAIN_BLUE
> > > > V4L2_CID_NOTIFY_GAIN_GREENB
> > > 
> > > This will effectively limit the API to Bayer patterns. I wonder if we
> > > should instead implement it as a single array control, with one element
> > > per CFA component.
> > 
> > There are other raw patterns, too. Supporting them would likely require one
> > or a few more controls.
> > 
> > That said, as the values change often it's more efficient to use a single
> > control. But each colour combination (not each pattern) would require its
> > own control in this case, eventually requiring more controls.
> 
> I'm not sure to follow you. My idea is to define a single control, with
> a number of elements that depends on the pattern being used, and the
> order specified in the native sensor pattern. I don't think each colour
> combination would then require its own control.

Ah, I guess that would work, too. Then we'll need to define what kind of
pixel orders are supported for that single control (and for which formats).
David Plowman Aug. 6, 2021, 8:15 a.m. UTC | #6
Hi Sakari, Laurent

Thanks for the various comments and discussion. It did prompt me to
have some second thoughts about some of the details here, as follows.

These controls are aimed specifically at sensors that do some kind of
on-board "demosaic / remosaic" process, for instance to produce
standard Bayer patterns from non-standard ones. As such the principal
requirement is for the sensor to know what "grey" looks like, which we
tell it by sending it the red and blue gains from the white balance
algorithm. (This obviously enables it to reduce colour aliasing during
the processing that it does.)

So perhaps the comparison here should be with the existing
V4L2_CID_RED/BLUE_BALANCE controls. I'm not sure that it really
matters exactly what the colours of the pixels on the sensor really
are, it's knowing what "grey" looks like that is important. Any new
controls could be quite cumbersome to use if you have to figure out
what the underlying pixel arrangement looks like, it certainly feels
much easier to refer simply to red/blue pixels, leaving the driver to
deal with its own internal idiosyncrasies.

Having said that, the particular sensor I have exposes a gain for each
of the four Bayer channels, even though I find myself ignoring the
green ones!!

Anyway, I certainly feel I could go either way on this one - do you
have any more thoughts on the matter?

Thanks and best regards

David

On Thu, 5 Aug 2021 at 19:05, Sakari Ailus <sakari.ailus@iki.fi> wrote:
>
> On Thu, Aug 05, 2021 at 06:49:33PM +0300, Laurent Pinchart wrote:
> > Hi Sakari,
> >
> > On Thu, Aug 05, 2021 at 06:40:42PM +0300, Sakari Ailus wrote:
> > > On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> > > > On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > > > > We add new controls, one for each of the four usual Bayer channels:
> > > > >
> > > > > V4L2_CID_NOTIFY_GAIN_RED
> > > > > V4L2_CID_NOTIFY_GAIN_GREENR
> > > > > V4L2_CID_NOTIFY_GAIN_BLUE
> > > > > V4L2_CID_NOTIFY_GAIN_GREENB
> > > >
> > > > This will effectively limit the API to Bayer patterns. I wonder if we
> > > > should instead implement it as a single array control, with one element
> > > > per CFA component.
> > >
> > > There are other raw patterns, too. Supporting them would likely require one
> > > or a few more controls.
> > >
> > > That said, as the values change often it's more efficient to use a single
> > > control. But each colour combination (not each pattern) would require its
> > > own control in this case, eventually requiring more controls.
> >
> > I'm not sure to follow you. My idea is to define a single control, with
> > a number of elements that depends on the pattern being used, and the
> > order specified in the native sensor pattern. I don't think each colour
> > combination would then require its own control.
>
> Ah, I guess that would work, too. Then we'll need to define what kind of
> pixel orders are supported for that single control (and for which formats).
>
> --
> Sakari Ailus
Sakari Ailus Aug. 6, 2021, 8:32 a.m. UTC | #7
Hi David,

On Fri, Aug 06, 2021 at 09:15:09AM +0100, David Plowman wrote:
> Hi Sakari, Laurent
> 
> Thanks for the various comments and discussion. It did prompt me to
> have some second thoughts about some of the details here, as follows.
> 
> These controls are aimed specifically at sensors that do some kind of
> on-board "demosaic / remosaic" process, for instance to produce
> standard Bayer patterns from non-standard ones. As such the principal
> requirement is for the sensor to know what "grey" looks like, which we
> tell it by sending it the red and blue gains from the white balance
> algorithm. (This obviously enables it to reduce colour aliasing during
> the processing that it does.)
> 
> So perhaps the comparison here should be with the existing
> V4L2_CID_RED/BLUE_BALANCE controls. I'm not sure that it really
> matters exactly what the colours of the pixels on the sensor really
> are, it's knowing what "grey" looks like that is important. Any new
> controls could be quite cumbersome to use if you have to figure out
> what the underlying pixel arrangement looks like, it certainly feels
> much easier to refer simply to red/blue pixels, leaving the driver to
> deal with its own internal idiosyncrasies.

I think I missed these are the gains of the Bayer pattern components, and
by definition you'll be only setting the gains of those components that
are sent out by the sensor. So there wouldn't be other components around,
just these four.

> 
> Having said that, the particular sensor I have exposes a gain for each
> of the four Bayer channels, even though I find myself ignoring the
> green ones!!
> 
> Anyway, I certainly feel I could go either way on this one - do you
> have any more thoughts on the matter?

I'm leaning towards a single array control with specified, mbus code
independent order of components. You should add this control is applicable
to Bayer pattern output only. That leaves it easily extendable later on.
Laurent Pinchart Aug. 6, 2021, 8:38 a.m. UTC | #8
Hi David,

On Fri, Aug 06, 2021 at 09:15:09AM +0100, David Plowman wrote:
> Hi Sakari, Laurent
> 
> Thanks for the various comments and discussion. It did prompt me to
> have some second thoughts about some of the details here, as follows.
> 
> These controls are aimed specifically at sensors that do some kind of
> on-board "demosaic / remosaic" process, for instance to produce
> standard Bayer patterns from non-standard ones. As such the principal
> requirement is for the sensor to know what "grey" looks like, which we
> tell it by sending it the red and blue gains from the white balance
> algorithm. (This obviously enables it to reduce colour aliasing during
> the processing that it does.)
> 
> So perhaps the comparison here should be with the existing
> V4L2_CID_RED/BLUE_BALANCE controls. I'm not sure that it really
> matters exactly what the colours of the pixels on the sensor really
> are, it's knowing what "grey" looks like that is important. Any new
> controls could be quite cumbersome to use if you have to figure out
> what the underlying pixel arrangement looks like, it certainly feels
> much easier to refer simply to red/blue pixels, leaving the driver to
> deal with its own internal idiosyncrasies.
> 
> Having said that, the particular sensor I have exposes a gain for each
> of the four Bayer channels, even though I find myself ignoring the
> green ones!!
> 
> Anyway, I certainly feel I could go either way on this one - do you
> have any more thoughts on the matter?

With an array control, we would have to decide (and document) which
components are stored in the array, and in which order. For Bayer
sensors, that would be B, Gb, Gr and R. As for the order, there are
three options:

- fixed order (e.g. always B, Gb, Gr, R)
- matching the sensor's CFA native order (always the same for a given
  sensor, but varying between different sensors)
- matching the currently configured format (the bayer pattern can change
  when moving the crop rectangle by one pixels or when mirroring the
  sensor readout)

The last two options seem quite impractical to me. The first option, if
we only consider Bayer sensors, is equivalent to the four controls your
propose in the sense that the semantics is defined in the control
specification and identical for all sensors, but with the advantage of
bundling all four values together. It will also allow expanding this to
other patterns if the need arise, which I think would be useful.

If we were to redesign the red/blue gains, I'd go for a single array
control today, with one value per CFA component.

> On Thu, 5 Aug 2021 at 19:05, Sakari Ailus wrote:
> > On Thu, Aug 05, 2021 at 06:49:33PM +0300, Laurent Pinchart wrote:
> > > On Thu, Aug 05, 2021 at 06:40:42PM +0300, Sakari Ailus wrote:
> > > > On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> > > > > On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > > > > > We add new controls, one for each of the four usual Bayer channels:
> > > > > >
> > > > > > V4L2_CID_NOTIFY_GAIN_RED
> > > > > > V4L2_CID_NOTIFY_GAIN_GREENR
> > > > > > V4L2_CID_NOTIFY_GAIN_BLUE
> > > > > > V4L2_CID_NOTIFY_GAIN_GREENB
> > > > >
> > > > > This will effectively limit the API to Bayer patterns. I wonder if we
> > > > > should instead implement it as a single array control, with one element
> > > > > per CFA component.
> > > >
> > > > There are other raw patterns, too. Supporting them would likely require one
> > > > or a few more controls.
> > > >
> > > > That said, as the values change often it's more efficient to use a single
> > > > control. But each colour combination (not each pattern) would require its
> > > > own control in this case, eventually requiring more controls.
> > >
> > > I'm not sure to follow you. My idea is to define a single control, with
> > > a number of elements that depends on the pattern being used, and the
> > > order specified in the native sensor pattern. I don't think each colour
> > > combination would then require its own control.
> >
> > Ah, I guess that would work, too. Then we'll need to define what kind of
> > pixel orders are supported for that single control (and for which formats).
David Plowman Aug. 6, 2021, 10:34 a.m. UTC | #9
Hi Laurent

Thanks for the reply. Yes, I agree that a fixed order (B, Gb, Gr, R)
is much easier to use, and I think that works well for the cases I'm
dealing with. I'll update the patch set accordingly and re-post it.

Best regards
David

On Fri, 6 Aug 2021 at 09:38, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi David,
>
> On Fri, Aug 06, 2021 at 09:15:09AM +0100, David Plowman wrote:
> > Hi Sakari, Laurent
> >
> > Thanks for the various comments and discussion. It did prompt me to
> > have some second thoughts about some of the details here, as follows.
> >
> > These controls are aimed specifically at sensors that do some kind of
> > on-board "demosaic / remosaic" process, for instance to produce
> > standard Bayer patterns from non-standard ones. As such the principal
> > requirement is for the sensor to know what "grey" looks like, which we
> > tell it by sending it the red and blue gains from the white balance
> > algorithm. (This obviously enables it to reduce colour aliasing during
> > the processing that it does.)
> >
> > So perhaps the comparison here should be with the existing
> > V4L2_CID_RED/BLUE_BALANCE controls. I'm not sure that it really
> > matters exactly what the colours of the pixels on the sensor really
> > are, it's knowing what "grey" looks like that is important. Any new
> > controls could be quite cumbersome to use if you have to figure out
> > what the underlying pixel arrangement looks like, it certainly feels
> > much easier to refer simply to red/blue pixels, leaving the driver to
> > deal with its own internal idiosyncrasies.
> >
> > Having said that, the particular sensor I have exposes a gain for each
> > of the four Bayer channels, even though I find myself ignoring the
> > green ones!!
> >
> > Anyway, I certainly feel I could go either way on this one - do you
> > have any more thoughts on the matter?
>
> With an array control, we would have to decide (and document) which
> components are stored in the array, and in which order. For Bayer
> sensors, that would be B, Gb, Gr and R. As for the order, there are
> three options:
>
> - fixed order (e.g. always B, Gb, Gr, R)
> - matching the sensor's CFA native order (always the same for a given
>   sensor, but varying between different sensors)
> - matching the currently configured format (the bayer pattern can change
>   when moving the crop rectangle by one pixels or when mirroring the
>   sensor readout)
>
> The last two options seem quite impractical to me. The first option, if
> we only consider Bayer sensors, is equivalent to the four controls your
> propose in the sense that the semantics is defined in the control
> specification and identical for all sensors, but with the advantage of
> bundling all four values together. It will also allow expanding this to
> other patterns if the need arise, which I think would be useful.
>
> If we were to redesign the red/blue gains, I'd go for a single array
> control today, with one value per CFA component.
>
> > On Thu, 5 Aug 2021 at 19:05, Sakari Ailus wrote:
> > > On Thu, Aug 05, 2021 at 06:49:33PM +0300, Laurent Pinchart wrote:
> > > > On Thu, Aug 05, 2021 at 06:40:42PM +0300, Sakari Ailus wrote:
> > > > > On Thu, Aug 05, 2021 at 06:22:32PM +0300, Laurent Pinchart wrote:
> > > > > > On Thu, Jul 22, 2021 at 01:12:48PM +0100, David Plowman wrote:
> > > > > > > We add new controls, one for each of the four usual Bayer channels:
> > > > > > >
> > > > > > > V4L2_CID_NOTIFY_GAIN_RED
> > > > > > > V4L2_CID_NOTIFY_GAIN_GREENR
> > > > > > > V4L2_CID_NOTIFY_GAIN_BLUE
> > > > > > > V4L2_CID_NOTIFY_GAIN_GREENB
> > > > > >
> > > > > > This will effectively limit the API to Bayer patterns. I wonder if we
> > > > > > should instead implement it as a single array control, with one element
> > > > > > per CFA component.
> > > > >
> > > > > There are other raw patterns, too. Supporting them would likely require one
> > > > > or a few more controls.
> > > > >
> > > > > That said, as the values change often it's more efficient to use a single
> > > > > control. But each colour combination (not each pattern) would require its
> > > > > own control in this case, eventually requiring more controls.
> > > >
> > > > I'm not sure to follow you. My idea is to define a single control, with
> > > > a number of elements that depends on the pattern being used, and the
> > > > order specified in the native sensor pattern. I don't think each colour
> > > > combination would then require its own control.
> > >
> > > Ah, I guess that would work, too. Then we'll need to define what kind of
> > > pixel orders are supported for that single control (and for which formats).
>
> --
> Regards,
>
> Laurent Pinchart
diff mbox series

Patch

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index b6344bbf1e00..12c810cd4ae6 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1106,6 +1106,10 @@  const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_TEST_PATTERN_GREENR:	return "Green (Red) Pixel Value";
 	case V4L2_CID_TEST_PATTERN_BLUE:	return "Blue Pixel Value";
 	case V4L2_CID_TEST_PATTERN_GREENB:	return "Green (Blue) Pixel Value";
+	case V4L2_CID_NOTIFY_GAIN_RED:		return "Notify Red Gain";
+	case V4L2_CID_NOTIFY_GAIN_GREENR:	return "Notify Green (Red) Gain";
+	case V4L2_CID_NOTIFY_GAIN_BLUE:		return "Notify Blue Gain";
+	case V4L2_CID_NOTIFY_GAIN_GREENB:	return "Notify Green (Blue) Gain";
 
 	/* Image processing controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index fdf97a6d7d18..711930bb54f0 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1117,6 +1117,10 @@  enum v4l2_jpeg_chroma_subsampling {
 #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
 #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
 #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
+#define V4L2_CID_NOTIFY_GAIN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
+#define V4L2_CID_NOTIFY_GAIN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 10)
+#define V4L2_CID_NOTIFY_GAIN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 11)
+#define V4L2_CID_NOTIFY_GAIN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 12)
 
 
 /* Image processing controls */