libcamera/include/libcamera
Naushir Patuck 96c0eb338e libcamera: delayed_controls: Add notion of priority write
If an exposure time change adjusts the vblanking limits, and we set both
VBLANK and EXPOSURE controls through the VIDIOC_S_EXT_CTRLS ioctl, the
latter may fail if the value is outside of the limits calculated by the
old VBLANK value. This is a limitation in V4L2 and cannot be fixed by
setting VBLANK before EXPOSURE in a single VIDIOC_S_EXT_CTRLS ioctl.

The workaround here is to have the DelayedControls object mark the
VBLANK control as "priority write", which then write VBLANK separately
from (and ahead of) any other controls. This way, the sensor driver will
update the EXPOSURE control with new limits before the new values is
presented, and will thus be seen as valid.

To support this, a new struct DelayedControls::ControlParams is used in
the constructor to provide the control delay value as well as the
priority write flag.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Tested-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Tested-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
[Kieran: Fix up trivial comments, merge conflicts]
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-03-12 14:12:32 +00:00
..
internal libcamera: delayed_controls: Add notion of priority write 2021-03-12 14:12:32 +00:00
ipa ipa: rkisp1: Fail on init if hw revision is not RKISP1_V10 2021-03-11 02:13:28 +02:00
bound_method.h Revert "libcamera: Use helper variable template for type traits" 2021-01-31 17:52:17 +02:00
buffer.h libcamera: buffer: Utilise LIBCAMERA_DISABLE_COPY_AND_MOVE 2021-02-12 14:34:18 +00:00
camera.h libcamera: camera: Constify controls argument to start() 2021-02-21 03:32:01 +02:00
camera_manager.h libcamera: Utilise LIBCAMERA_DISABLE_COPY 2021-02-12 14:35:20 +00:00
class.h libcamera: class: Provide move and copy disablers 2021-02-12 14:34:04 +00:00
compiler.h libcamera: Add macro to conditionally use [[nodiscard]] 2021-02-04 21:00:38 +02:00
control_ids.h.in libcamera: controls: Generate an array of valid values 2020-10-26 17:51:55 +01:00
controls.h libcamera: controls: Utilise LIBCAMERA_DISABLE_COPY_AND_MOVE 2021-02-12 14:35:17 +00:00
file_descriptor.h libcamera: file_descriptor: Implement move semantics for constructor 2020-05-19 18:07:49 +03:00
formats.h.in libcamera: Define constants for pixel formats in the public API 2020-06-18 13:26:36 +03:00
framebuffer_allocator.h libcamera: Utilise LIBCAMERA_DISABLE_COPY 2021-02-12 14:35:20 +00:00
geometry.h libcamera: geometry: Mark const functions with __nodiscard 2021-02-04 21:00:38 +02:00
logging.h libcamera: logging: add syslog, stream, and nowhere logging targets 2019-07-17 14:36:35 +09:00
meson.build libcamera: Move extensible to class 2021-02-12 11:56:00 +00:00
object.h Revert "libcamera: Use helper variable template for type traits" 2021-01-31 17:52:17 +02:00
pixel_format.h libcamera: pixel_format: Add a function to return format based on string 2020-08-03 11:48:47 +01:00
property_ids.h.in libcamera: Support draft controls and properties 2020-10-26 17:51:54 +01:00
request.h libcamera: Utilise LIBCAMERA_DISABLE_COPY 2021-02-12 14:35:20 +00:00
signal.h Revert "libcamera: Use helper variable template for type traits" 2021-01-31 17:52:17 +02:00
span.h Revert "libcamera: Use helper variable template for type traits" 2021-01-31 17:52:17 +02:00
stream.h libcamera: stream: Rename StillCaptureRaw to Raw 2020-09-30 14:01:01 +02:00
transform.h libcamera: Add Transform enum to represent 2D plane transforms. 2020-09-29 11:43:06 +01:00
version.h.in libcamera: Rework automatic version generation to avoid rebuilds 2019-07-09 12:34:10 +03:00