[libcamera-devel,RFC,v2,08/12] controls: Add controls necessary for FULL compliance
diff mbox series

Message ID 20210422094102.371772-9-paul.elder@ideasonboard.com
State Superseded
Delegated to: Paul Elder
Headers show
Series
  • FULL hardware level fixes
Related show

Commit Message

Paul Elder April 22, 2021, 9:40 a.m. UTC
Add controls necessary for FULL compliance:
- BlackLevelLocked
- EdgeMode
- FrameDuration
- SensorSensitivity
- TonemapMode

While at it, change the names of some AwbState values to be consistent
and to avoid potential conflicts with AwbLocked.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
 src/libcamera/control_ids.yaml | 78 +++++++++++++++++++++++++++++++++-
 1 file changed, 76 insertions(+), 2 deletions(-)

Comments

Laurent Pinchart April 27, 2021, 5:01 a.m. UTC | #1
Hi Paul,

Ah, this is where the plumbing starts to happen :-)

On Thu, Apr 22, 2021 at 06:40:58PM +0900, Paul Elder wrote:
> Add controls necessary for FULL compliance:
> - BlackLevelLocked
> - EdgeMode
> - FrameDuration
> - SensorSensitivity
> - TonemapMode
> 
> While at it, change the names of some AwbState values to be consistent
> and to avoid potential conflicts with AwbLocked.
> 
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
>  src/libcamera/control_ids.yaml | 78 +++++++++++++++++++++++++++++++++-
>  1 file changed, 76 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> index f025819a..61c5c96f 100644
> --- a/src/libcamera/control_ids.yaml
> +++ b/src/libcamera/control_ids.yaml
> @@ -420,6 +420,13 @@ controls:
>              The camera will cancel any active trigger and the AF routine is
>              reset to its initial state.
>  
> +  - BlackLevelLocked:
> +      type: bool
> +      draft: true
> +      description: |
> +        Whether black-level compensation is locked to its current values, or is
> +        free to vary. Currently identical to ANDROID_BLACK_LEVEL_LOCK.
> +
>    - NoiseReductionMode:
>        type: int32_t
>        draft: true
> @@ -554,13 +561,46 @@ controls:
>          - name: AwbStateSearching
>            value: 1
>            description: The AWB algorithm has not converged yet.
> -        - name: AwbConverged
> +        - name: AwbStateConverged
>            value: 2
>            description: The AWB algorithm has converged.
> -        - name: AwbLocked
> +        - name: AwbStateLocked
>            value: 3
>            description: The AWB algorithm is locked.

This is fine for now, be we should really merge this and AwbLocked.

> +  - EdgeMode:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       Control to report the operation mode of edge enhancement. Currently
> +       identical to ANDROID_EDGE_MODE.
> +      enum:
> +        - name: EdgeModeOff
> +          value: 0
> +          description: No edge enhancement is applied.
> +        - name: EdgeModeFast
> +          value: 1
> +          description: |
> +           Apply edge enhancement at a quality level tha does not
> +           slow down frame rate relative to sensor output.
> +        - name: EdgeModeHighQuality
> +          value: 2
> +          description: |
> +           Apply high-quality edge enhancement, at a cost of possible reduced
> +           output frame rate.
> +        - name: EdgeModeZSL
> +          value: 3
> +          description: |
> +           Edge enhancement is applied at different levels for different output
> +           streams, based on resolution.
> +
> +  - FrameDuration:
> +      type: int64_t
> +      draft: true
> +      description: |
> +       Duration from start of frame exposure to start of next frame exposure, in
> +       nanoseconds. Currently identical to ANDROID_SENSOR_FRAME_DURATION.

We already have FrameDurations for this. I'm OK adding a draft control
as a very first step, but we'll have to merge it with FrameDurations.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +
>    - SensorRollingShutterSkew:
>        type: int64_t
>        draft: true
> @@ -569,6 +609,13 @@ controls:
>         row and the start of exposure of the last row. Currently identical to
>         ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
>  
> +  - SensorSensitivity:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       The amount of gain applied to sensor data before processing. Currently
> +       identical to ANDROID_SENSOR_SENSITIVITY.
> +
>    - LensShadingMapMode:
>        type: int32_t
>        draft: true
> @@ -600,6 +647,33 @@ controls:
>            value: 2
>            description: 60Hz flickering detected.
>  
> +  - TonemapMode:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       High-level global contrast/gamma/tonemapping control. Currently identical
> +       to ANDROID_TONEMAP_MODE.
> +      enum:
> +        - name: TonemapModeContrastCurve
> +          value: 0
> +          description: Use the specified tonemapping curve.
> +        - name: TonemapModeFast
> +          value: 1
> +          description: |
> +           Advanced gamma mapping and color enhancement may be applied, without
> +           reducing frame rate compared to raw sensor output.
> +        - name: TonemapModeHighQuality
> +          value: 2
> +          description: |
> +           High-quality gamma mapping and color enhancement will be applied, at
> +           the cost of possibly reduced frame rate compared to raw sensor output.
> +        - name: TonemapModeGammaValue
> +          value: 3
> +          description: Use the specified gamma value for tonemapping.
> +        - name: TonemapModePresetCurve
> +          value: 4
> +          description: Use the specified preset tonemapping curve.
> +
>    - PipelineDepth:
>        type: int32_t
>        draft: true
Jacopo Mondi April 27, 2021, 10:21 a.m. UTC | #2
Hi Paul,

On Thu, Apr 22, 2021 at 06:40:58PM +0900, Paul Elder wrote:
> Add controls necessary for FULL compliance:
> - BlackLevelLocked
> - EdgeMode
> - FrameDuration
> - SensorSensitivity
> - TonemapMode
>
> While at it, change the names of some AwbState values to be consistent
> and to avoid potential conflicts with AwbLocked.
>
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
>  src/libcamera/control_ids.yaml | 78 +++++++++++++++++++++++++++++++++-
>  1 file changed, 76 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> index f025819a..61c5c96f 100644
> --- a/src/libcamera/control_ids.yaml
> +++ b/src/libcamera/control_ids.yaml
> @@ -420,6 +420,13 @@ controls:
>              The camera will cancel any active trigger and the AF routine is
>              reset to its initial state.
>
> +  - BlackLevelLocked:
> +      type: bool
> +      draft: true
> +      description: |
> +        Whether black-level compensation is locked to its current values, or is
> +        free to vary. Currently identical to ANDROID_BLACK_LEVEL_LOCK.
> +
>    - NoiseReductionMode:
>        type: int32_t
>        draft: true
> @@ -554,13 +561,46 @@ controls:
>          - name: AwbStateSearching
>            value: 1
>            description: The AWB algorithm has not converged yet.
> -        - name: AwbConverged
> +        - name: AwbStateConverged
>            value: 2
>            description: The AWB algorithm has converged.
> -        - name: AwbLocked
> +        - name: AwbStateLocked

Do you have build time conflicts ? These values should be properly
scoped, and should compile fine...

>            value: 3
>            description: The AWB algorithm is locked.
>
> +  - EdgeMode:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       Control to report the operation mode of edge enhancement. Currently
> +       identical to ANDROID_EDGE_MODE.
> +      enum:
> +        - name: EdgeModeOff
> +          value: 0
> +          description: No edge enhancement is applied.
> +        - name: EdgeModeFast
> +          value: 1
> +          description: |
> +           Apply edge enhancement at a quality level tha does not
> +           slow down frame rate relative to sensor output.
> +        - name: EdgeModeHighQuality
> +          value: 2
> +          description: |
> +           Apply high-quality edge enhancement, at a cost of possible reduced
> +           output frame rate.
> +        - name: EdgeModeZSL
> +          value: 3
> +          description: |
> +           Edge enhancement is applied at different levels for different output
> +           streams, based on resolution.
> +
> +  - FrameDuration:

We have a FrameDuration control already :)

> +      type: int64_t
> +      draft: true
> +      description: |
> +       Duration from start of frame exposure to start of next frame exposure, in
> +       nanoseconds. Currently identical to ANDROID_SENSOR_FRAME_DURATION.
> +
>    - SensorRollingShutterSkew:
>        type: int64_t
>        draft: true
> @@ -569,6 +609,13 @@ controls:
>         row and the start of exposure of the last row. Currently identical to
>         ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
>
> +  - SensorSensitivity:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       The amount of gain applied to sensor data before processing. Currently
> +       identical to ANDROID_SENSOR_SENSITIVITY.

I would anyway add
"The sensitivity is the standard ISO sensitivity value,as defined in
ISO 12232:2006."

> +
>    - LensShadingMapMode:
>        type: int32_t
>        draft: true
> @@ -600,6 +647,33 @@ controls:
>            value: 2
>            description: 60Hz flickering detected.
>
> +  - TonemapMode:
> +      type: int32_t
> +      draft: true
> +      description: |
> +       High-level global contrast/gamma/tonemapping control. Currently identical
> +       to ANDROID_TONEMAP_MODE.
> +      enum:
> +        - name: TonemapModeContrastCurve
> +          value: 0
> +          description: Use the specified tonemapping curve.

The Android description also reports:
Use the tone mapping curve specified in the android.tonemap.curve* entries.

Do we need a controls::toneMapCurve[float] control to reference here
and to feed the ph with ?

> +        - name: TonemapModeFast
> +          value: 1
> +          description: |
> +           Advanced gamma mapping and color enhancement may be applied, without
> +           reducing frame rate compared to raw sensor output.
> +        - name: TonemapModeHighQuality
> +          value: 2
> +          description: |
> +           High-quality gamma mapping and color enhancement will be applied, at
> +           the cost of possibly reduced frame rate compared to raw sensor output.
> +        - name: TonemapModeGammaValue
> +          value: 3
> +          description: Use the specified gamma value for tonemapping.

This as well reports:
Use the gamma value specified in android.tonemap.gamma to peform tonemapping.

> +        - name: TonemapModePresetCurve

And this one:
Use the preset tonemapping curve specified in android.tonemap.presetCurve to peform tonemapping.

The same reasoning for Controls::toneMapCurve applies here
> +          value: 4
> +          description: Use the specified preset tonemapping curve.
> +
>    - PipelineDepth:
>        type: int32_t
>        draft: true
> --
> 2.27.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Paul Elder April 28, 2021, 10:15 a.m. UTC | #3
Hi Jacopo,

On Tue, Apr 27, 2021 at 12:21:35PM +0200, Jacopo Mondi wrote:
> Hi Paul,
> 
> On Thu, Apr 22, 2021 at 06:40:58PM +0900, Paul Elder wrote:
> > Add controls necessary for FULL compliance:
> > - BlackLevelLocked
> > - EdgeMode
> > - FrameDuration
> > - SensorSensitivity
> > - TonemapMode
> >
> > While at it, change the names of some AwbState values to be consistent
> > and to avoid potential conflicts with AwbLocked.
> >
> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > ---
> >  src/libcamera/control_ids.yaml | 78 +++++++++++++++++++++++++++++++++-
> >  1 file changed, 76 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> > index f025819a..61c5c96f 100644
> > --- a/src/libcamera/control_ids.yaml
> > +++ b/src/libcamera/control_ids.yaml
> > @@ -420,6 +420,13 @@ controls:
> >              The camera will cancel any active trigger and the AF routine is
> >              reset to its initial state.
> >
> > +  - BlackLevelLocked:
> > +      type: bool
> > +      draft: true
> > +      description: |
> > +        Whether black-level compensation is locked to its current values, or is
> > +        free to vary. Currently identical to ANDROID_BLACK_LEVEL_LOCK.
> > +
> >    - NoiseReductionMode:
> >        type: int32_t
> >        draft: true
> > @@ -554,13 +561,46 @@ controls:
> >          - name: AwbStateSearching
> >            value: 1
> >            description: The AWB algorithm has not converged yet.
> > -        - name: AwbConverged
> > +        - name: AwbStateConverged
> >            value: 2
> >            description: The AWB algorithm has converged.
> > -        - name: AwbLocked
> > +        - name: AwbStateLocked
> 
> Do you have build time conflicts ? These values should be properly
> scoped, and should compile fine...

No, but AwbLocked is a draft control so if it ever graduates then it
will conflict. Also all the other values have AwbState while these two
don't so I thought it was a bit inconsistent.

> >            value: 3
> >            description: The AWB algorithm is locked.
> >
> > +  - EdgeMode:
> > +      type: int32_t
> > +      draft: true
> > +      description: |
> > +       Control to report the operation mode of edge enhancement. Currently
> > +       identical to ANDROID_EDGE_MODE.
> > +      enum:
> > +        - name: EdgeModeOff
> > +          value: 0
> > +          description: No edge enhancement is applied.
> > +        - name: EdgeModeFast
> > +          value: 1
> > +          description: |
> > +           Apply edge enhancement at a quality level tha does not
> > +           slow down frame rate relative to sensor output.
> > +        - name: EdgeModeHighQuality
> > +          value: 2
> > +          description: |
> > +           Apply high-quality edge enhancement, at a cost of possible reduced
> > +           output frame rate.
> > +        - name: EdgeModeZSL
> > +          value: 3
> > +          description: |
> > +           Edge enhancement is applied at different levels for different output
> > +           streams, based on resolution.
> > +
> > +  - FrameDuration:
> 
> We have a FrameDuration control already :)

Oh I didn't notice "A fixed frame duration is achieved by setting the
minimum and maximum values to be the same" :p

> > +      type: int64_t
> > +      draft: true
> > +      description: |
> > +       Duration from start of frame exposure to start of next frame exposure, in
> > +       nanoseconds. Currently identical to ANDROID_SENSOR_FRAME_DURATION.
> > +
> >    - SensorRollingShutterSkew:
> >        type: int64_t
> >        draft: true
> > @@ -569,6 +609,13 @@ controls:
> >         row and the start of exposure of the last row. Currently identical to
> >         ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
> >
> > +  - SensorSensitivity:
> > +      type: int32_t
> > +      draft: true
> > +      description: |
> > +       The amount of gain applied to sensor data before processing. Currently
> > +       identical to ANDROID_SENSOR_SENSITIVITY.
> 
> I would anyway add
> "The sensitivity is the standard ISO sensitivity value,as defined in
> ISO 12232:2006."
> 
> > +
> >    - LensShadingMapMode:
> >        type: int32_t
> >        draft: true
> > @@ -600,6 +647,33 @@ controls:
> >            value: 2
> >            description: 60Hz flickering detected.
> >
> > +  - TonemapMode:
> > +      type: int32_t
> > +      draft: true
> > +      description: |
> > +       High-level global contrast/gamma/tonemapping control. Currently identical
> > +       to ANDROID_TONEMAP_MODE.
> > +      enum:
> > +        - name: TonemapModeContrastCurve
> > +          value: 0
> > +          description: Use the specified tonemapping curve.
> 
> The Android description also reports:
> Use the tone mapping curve specified in the android.tonemap.curve* entries.
> 
> Do we need a controls::toneMapCurve[float] control to reference here
> and to feed the ph with ?

For this (and the below two), for the purpose of passing CTS, no. iirc
CTS doesn't actually check these values for correctness. For actual
correctness, yeah we probably need them.


Paul

> > +        - name: TonemapModeFast
> > +          value: 1
> > +          description: |
> > +           Advanced gamma mapping and color enhancement may be applied, without
> > +           reducing frame rate compared to raw sensor output.
> > +        - name: TonemapModeHighQuality
> > +          value: 2
> > +          description: |
> > +           High-quality gamma mapping and color enhancement will be applied, at
> > +           the cost of possibly reduced frame rate compared to raw sensor output.
> > +        - name: TonemapModeGammaValue
> > +          value: 3
> > +          description: Use the specified gamma value for tonemapping.
> 
> This as well reports:
> Use the gamma value specified in android.tonemap.gamma to peform tonemapping.
> 
> > +        - name: TonemapModePresetCurve
> 
> And this one:
> Use the preset tonemapping curve specified in android.tonemap.presetCurve to peform tonemapping.
> 
> The same reasoning for Controls::toneMapCurve applies here
> > +          value: 4
> > +          description: Use the specified preset tonemapping curve.
> > +
> >    - PipelineDepth:
> >        type: int32_t
> >        draft: true
> > --
> > 2.27.0

Patch
diff mbox series

diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
index f025819a..61c5c96f 100644
--- a/src/libcamera/control_ids.yaml
+++ b/src/libcamera/control_ids.yaml
@@ -420,6 +420,13 @@  controls:
             The camera will cancel any active trigger and the AF routine is
             reset to its initial state.
 
+  - BlackLevelLocked:
+      type: bool
+      draft: true
+      description: |
+        Whether black-level compensation is locked to its current values, or is
+        free to vary. Currently identical to ANDROID_BLACK_LEVEL_LOCK.
+
   - NoiseReductionMode:
       type: int32_t
       draft: true
@@ -554,13 +561,46 @@  controls:
         - name: AwbStateSearching
           value: 1
           description: The AWB algorithm has not converged yet.
-        - name: AwbConverged
+        - name: AwbStateConverged
           value: 2
           description: The AWB algorithm has converged.
-        - name: AwbLocked
+        - name: AwbStateLocked
           value: 3
           description: The AWB algorithm is locked.
 
+  - EdgeMode:
+      type: int32_t
+      draft: true
+      description: |
+       Control to report the operation mode of edge enhancement. Currently
+       identical to ANDROID_EDGE_MODE.
+      enum:
+        - name: EdgeModeOff
+          value: 0
+          description: No edge enhancement is applied.
+        - name: EdgeModeFast
+          value: 1
+          description: |
+           Apply edge enhancement at a quality level tha does not
+           slow down frame rate relative to sensor output.
+        - name: EdgeModeHighQuality
+          value: 2
+          description: |
+           Apply high-quality edge enhancement, at a cost of possible reduced
+           output frame rate.
+        - name: EdgeModeZSL
+          value: 3
+          description: |
+           Edge enhancement is applied at different levels for different output
+           streams, based on resolution.
+
+  - FrameDuration:
+      type: int64_t
+      draft: true
+      description: |
+       Duration from start of frame exposure to start of next frame exposure, in
+       nanoseconds. Currently identical to ANDROID_SENSOR_FRAME_DURATION.
+
   - SensorRollingShutterSkew:
       type: int64_t
       draft: true
@@ -569,6 +609,13 @@  controls:
        row and the start of exposure of the last row. Currently identical to
        ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
 
+  - SensorSensitivity:
+      type: int32_t
+      draft: true
+      description: |
+       The amount of gain applied to sensor data before processing. Currently
+       identical to ANDROID_SENSOR_SENSITIVITY.
+
   - LensShadingMapMode:
       type: int32_t
       draft: true
@@ -600,6 +647,33 @@  controls:
           value: 2
           description: 60Hz flickering detected.
 
+  - TonemapMode:
+      type: int32_t
+      draft: true
+      description: |
+       High-level global contrast/gamma/tonemapping control. Currently identical
+       to ANDROID_TONEMAP_MODE.
+      enum:
+        - name: TonemapModeContrastCurve
+          value: 0
+          description: Use the specified tonemapping curve.
+        - name: TonemapModeFast
+          value: 1
+          description: |
+           Advanced gamma mapping and color enhancement may be applied, without
+           reducing frame rate compared to raw sensor output.
+        - name: TonemapModeHighQuality
+          value: 2
+          description: |
+           High-quality gamma mapping and color enhancement will be applied, at
+           the cost of possibly reduced frame rate compared to raw sensor output.
+        - name: TonemapModeGammaValue
+          value: 3
+          description: Use the specified gamma value for tonemapping.
+        - name: TonemapModePresetCurve
+          value: 4
+          description: Use the specified preset tonemapping curve.
+
   - PipelineDepth:
       type: int32_t
       draft: true