[libcamera-devel] [PATCH v2 1/3] libcamera: controls: Add frame duration control

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon May 25 00:23:02 CEST 2020


Hi Naush,

Thank you for the patch.

On Wed, May 13, 2020 at 10:11:18AM +0100, Naushir Patuck wrote:
> Add a float array control (controls::FrameDurations) to specify the
> minimum and maximum (in that order) frame duration to be used by the
> camera sensor.
> 
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
>  src/libcamera/control_ids.yaml | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> index 77ebc3f9..42694fc7 100644
> --- a/src/libcamera/control_ids.yaml
> +++ b/src/libcamera/control_ids.yaml
> @@ -239,4 +239,18 @@ controls:
>          pixel range (as if pixels ranged from 0 to 65535). The SensorBlackLevels
>          control can only be returned in metadata.
>        size: [4]
> +
> +  - FrameDurations:
> +      type: float

Do we need sub-microsecond precision, or would a uint32_t control work ?
I'd rather have a fixed precision if possible.

> +      description: |
> +        Specifies the minimum and maximum (in that order) allowable frame
> +        duration, in micro-seconds, for the sensor to use. This could also limit
> +        the largest exposure times the sensor can use. For example, if a maximum
> +        frame duration of 33ms is requested (corresponding to 30 frames per
> +        second), the sensor will not be able raise the exposure time above 33ms.
> +        Note that the sensor may not always be able to provide the requested
> +        frame duration limits depending on its mode configuration.

This looks good to me, but I'd like to discuss the corner cases I can
already think about.

- Are there use cases for an application to specify a minimum frame
  duration only, or a maximum frame duration only (that is, any frame
  rate lower than a limit, or any frame rate higher than a limit) ? If
  so, how should that be specified ? We could set the minimum value to 0
  to mean that the maximum frame rate is unbounded, and the maximum
  value to UINT32_MAX to mean that the minimum frame rate is unbounded.
  Is there anything I'm overlooking ?

- Is 0 an acceptable value ? Or should 1 be the minimum value ?

- What happens if the requested frame duration isn't achievable ? Should
  we specify that the camera will use a frame duration as close to the
  requested range as possible ? Or could there be cases where a
  different behaviour would be needed ?

- Not something we need to address now, but do you see any future
  relation between this control and anti-banding (50 or 60Hz flicker
  avoidance) ? Anti-banding will mostly restrict possible exposure
  times, and should only indirectly interact with the frame duration if
  I'm not mistaken, is that correct ?

> +
> +        \sa ExposureTime
> +      size: [2]
>  ...

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list