[libcamera-devel,v3,1/2] libcamera: Add a SensorSensitivity property
diff mbox series

Message ID 20220421151117.703956-2-naush@raspberrypi.com
State Accepted
Commit 998d23c0a2255de092d6297d12600ffa1bfa3295
Headers show
Series
  • Application support for per-mode sensitivities
Related show

Commit Message

Naushir Patuck April 21, 2022, 3:11 p.m. UTC
The SensorSensitivity property is a scaling factor that describes how sensitive
the selected sensor mode is compared to other readout modes of the same sensor.
For example, a binned mode might have twice the sensitivity of the full
resolution mode, meaning you would get double the signal level for the same
exposure and gains.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
---
 src/libcamera/property_ids.yaml | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Kieran Bingham May 3, 2022, 12:53 p.m. UTC | #1
Quoting Naushir Patuck via libcamera-devel (2022-04-21 16:11:16)
> The SensorSensitivity property is a scaling factor that describes how sensitive
> the selected sensor mode is compared to other readout modes of the same sensor.
> For example, a binned mode might have twice the sensitivity of the full
> resolution mode, meaning you would get double the signal level for the same
> exposure and gains.

I think having this as a property of the configured camera makes a lot
more sense.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> ---
>  src/libcamera/property_ids.yaml | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml
> index 12ecbce5eed4..11b7ebdc3105 100644
> --- a/src/libcamera/property_ids.yaml
> +++ b/src/libcamera/property_ids.yaml
> @@ -678,6 +678,18 @@ controls:
>          \todo Turn this property into a "maximum control value" for the
>          ScalerCrop control once "dynamic" controls have been implemented.
>  
> +  - SensorSensitivity:
> +      type: float
> +      description: |
> +        The relative sensitivity of the chosen sensor mode.
> +
> +        Some sensors have readout modes with different sensitivities. For example,
> +        a binned camera mode might, with the same exposure and gains, produce
> +        twice the signal level of the full resolution readout. This would be
> +        signalled by the binned mode, when it is chosen, indicating a value here
> +        that is twice that of the full resolution mode. This value will be valid
> +        after the configure method has returned successfully.
> +
>    # ----------------------------------------------------------------------------
>    # Draft properties section
>  
> -- 
> 2.25.1
>
Jacopo Mondi May 20, 2022, 8:43 a.m. UTC | #2
Hi,

On Thu, Apr 21, 2022 at 04:11:16PM +0100, Naushir Patuck via libcamera-devel wrote:
> The SensorSensitivity property is a scaling factor that describes how sensitive
> the selected sensor mode is compared to other readout modes of the same sensor.
> For example, a binned mode might have twice the sensitivity of the full
> resolution mode, meaning you would get double the signal level for the same
> exposure and gains.
>
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> ---
>  src/libcamera/property_ids.yaml | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml
> index 12ecbce5eed4..11b7ebdc3105 100644
> --- a/src/libcamera/property_ids.yaml
> +++ b/src/libcamera/property_ids.yaml
> @@ -678,6 +678,18 @@ controls:
>          \todo Turn this property into a "maximum control value" for the
>          ScalerCrop control once "dynamic" controls have been implemented.
>
> +  - SensorSensitivity:
> +      type: float
> +      description: |
> +        The relative sensitivity of the chosen sensor mode.
> +
> +        Some sensors have readout modes with different sensitivities. For example,
> +        a binned camera mode might, with the same exposure and gains, produce
> +        twice the signal level of the full resolution readout. This would be
> +        signalled by the binned mode, when it is chosen, indicating a value here
> +        that is twice that of the full resolution mode. This value will be valid
> +        after the configure method has returned successfully.

Sorry, I should have payed much more attention during the review.

The sensitivity depends on the mode applied to the sensor, and as the
description suggests changes at Camera::configure() time.

Libcamera properties are immutable and they should not depend on the
current configuration but they should stay constant during the whole
lieftime of the Camera.

This should rather be a Control, even if I understand it cannot be
changed by the user. Do we maybe need to reconsider Properties'
immutability (Laurent in cc for opinions)

Thanks
   j

> +
>    # ----------------------------------------------------------------------------
>    # Draft properties section
>
> --
> 2.25.1
>
Naushir Patuck May 20, 2022, 8:52 a.m. UTC | #3
Hi Jacopo.

On Fri, 20 May 2022 at 09:43, Jacopo Mondi <jacopo@jmondi.org> wrote:

> Hi,
>
> On Thu, Apr 21, 2022 at 04:11:16PM +0100, Naushir Patuck via
> libcamera-devel wrote:
> > The SensorSensitivity property is a scaling factor that describes how
> sensitive
> > the selected sensor mode is compared to other readout modes of the same
> sensor.
> > For example, a binned mode might have twice the sensitivity of the full
> > resolution mode, meaning you would get double the signal level for the
> same
> > exposure and gains.
> >
> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > ---
> >  src/libcamera/property_ids.yaml | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/src/libcamera/property_ids.yaml
> b/src/libcamera/property_ids.yaml
> > index 12ecbce5eed4..11b7ebdc3105 100644
> > --- a/src/libcamera/property_ids.yaml
> > +++ b/src/libcamera/property_ids.yaml
> > @@ -678,6 +678,18 @@ controls:
> >          \todo Turn this property into a "maximum control value" for the
> >          ScalerCrop control once "dynamic" controls have been
> implemented.
> >
> > +  - SensorSensitivity:
> > +      type: float
> > +      description: |
> > +        The relative sensitivity of the chosen sensor mode.
> > +
> > +        Some sensors have readout modes with different sensitivities.
> For example,
> > +        a binned camera mode might, with the same exposure and gains,
> produce
> > +        twice the signal level of the full resolution readout. This
> would be
> > +        signalled by the binned mode, when it is chosen, indicating a
> value here
> > +        that is twice that of the full resolution mode. This value will
> be valid
> > +        after the configure method has returned successfully.
>
> Sorry, I should have payed much more attention during the review.
>
> The sensitivity depends on the mode applied to the sensor, and as the
> description suggests changes at Camera::configure() time.
>
> Libcamera properties are immutable and they should not depend on the
> current configuration but they should stay constant during the whole
> lieftime of the Camera.
>
> This should rather be a Control, even if I understand it cannot be
> changed by the user. Do we maybe need to reconsider Properties'
> immutability (Laurent in cc for opinions)
>

ScalerCropMaximum is an existing mutable property as well.  Like
SensorSensitivity, it is mutable in the sense it is mode specific, but
does not change after a Configure() call.

Regards,
Naush



>
> Thanks
>    j
>
> > +
> >    #
> ----------------------------------------------------------------------------
> >    # Draft properties section
> >
> > --
> > 2.25.1
> >
>
Jacopo Mondi May 20, 2022, 9:01 a.m. UTC | #4
Hi Naush,

On Fri, May 20, 2022 at 09:52:18AM +0100, Naushir Patuck wrote:
> Hi Jacopo.
>
> On Fri, 20 May 2022 at 09:43, Jacopo Mondi <jacopo@jmondi.org> wrote:
>
> > Hi,
> >
> > On Thu, Apr 21, 2022 at 04:11:16PM +0100, Naushir Patuck via
> > libcamera-devel wrote:
> > > The SensorSensitivity property is a scaling factor that describes how
> > sensitive
> > > the selected sensor mode is compared to other readout modes of the same
> > sensor.
> > > For example, a binned mode might have twice the sensitivity of the full
> > > resolution mode, meaning you would get double the signal level for the
> > same
> > > exposure and gains.
> > >
> > > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> > > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > > ---
> > >  src/libcamera/property_ids.yaml | 12 ++++++++++++
> > >  1 file changed, 12 insertions(+)
> > >
> > > diff --git a/src/libcamera/property_ids.yaml
> > b/src/libcamera/property_ids.yaml
> > > index 12ecbce5eed4..11b7ebdc3105 100644
> > > --- a/src/libcamera/property_ids.yaml
> > > +++ b/src/libcamera/property_ids.yaml
> > > @@ -678,6 +678,18 @@ controls:
> > >          \todo Turn this property into a "maximum control value" for the
> > >          ScalerCrop control once "dynamic" controls have been
> > implemented.
> > >
> > > +  - SensorSensitivity:
> > > +      type: float
> > > +      description: |
> > > +        The relative sensitivity of the chosen sensor mode.
> > > +
> > > +        Some sensors have readout modes with different sensitivities.
> > For example,
> > > +        a binned camera mode might, with the same exposure and gains,
> > produce
> > > +        twice the signal level of the full resolution readout. This
> > would be
> > > +        signalled by the binned mode, when it is chosen, indicating a
> > value here
> > > +        that is twice that of the full resolution mode. This value will
> > be valid
> > > +        after the configure method has returned successfully.
> >
> > Sorry, I should have payed much more attention during the review.
> >
> > The sensitivity depends on the mode applied to the sensor, and as the
> > description suggests changes at Camera::configure() time.
> >
> > Libcamera properties are immutable and they should not depend on the
> > current configuration but they should stay constant during the whole
> > lieftime of the Camera.
> >
> > This should rather be a Control, even if I understand it cannot be
> > changed by the user. Do we maybe need to reconsider Properties'
> > immutability (Laurent in cc for opinions)
> >
>
> ScalerCropMaximum is an existing mutable property as well.  Like
> SensorSensitivity, it is mutable in the sense it is mode specific, but
> does not change after a Configure() call.

You are right, I always assume that being it expressed in the native's
sensor array full pixel array coordinates it was kind of constant
being skpping/binning not relevant. But some modes might be realized
by cropping the full pixel array indeed.

>
> Regards,
> Naush
>
>
>
> >
> > Thanks
> >    j
> >
> > > +
> > >    #
> > ----------------------------------------------------------------------------
> > >    # Draft properties section
> > >
> > > --
> > > 2.25.1
> > >
> >

Patch
diff mbox series

diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml
index 12ecbce5eed4..11b7ebdc3105 100644
--- a/src/libcamera/property_ids.yaml
+++ b/src/libcamera/property_ids.yaml
@@ -678,6 +678,18 @@  controls:
         \todo Turn this property into a "maximum control value" for the
         ScalerCrop control once "dynamic" controls have been implemented.
 
+  - SensorSensitivity:
+      type: float
+      description: |
+        The relative sensitivity of the chosen sensor mode.
+
+        Some sensors have readout modes with different sensitivities. For example,
+        a binned camera mode might, with the same exposure and gains, produce
+        twice the signal level of the full resolution readout. This would be
+        signalled by the binned mode, when it is chosen, indicating a value here
+        that is twice that of the full resolution mode. This value will be valid
+        after the configure method has returned successfully.
+
   # ----------------------------------------------------------------------------
   # Draft properties section