mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-24 17:15:07 +03:00
YUV sensors don't provide the necessary information to fill CameraSensorInfo, as they include an ISP and provide a higher-level API that doesn't always expose low-level information. The CameraSensor class makes low-level V4L2 controls mandatory for all sensors, which prevents usage of YUV sensors with the simple pipeline handler. Make CameraSensor::sensorInfo() available for raw sensors only. This won't introduce any regression in pipeline handlers that currently use the sensorInfo() function as they all operate with raw sensors, and won't be a limitation for the simple pipeline handler as well as it doesn't use sensor info. If part of the sensor info (such as the active pixel array size for instance) becomes useful to expose for YUV sensors in the future, the sensorInfo() function can be extended to report that information only and skip data that is only available for raw sensors. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
74 lines
3.3 KiB
ReStructuredText
74 lines
3.3 KiB
ReStructuredText
.. SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
|
.. _sensor-driver-requirements:
|
|
|
|
Sensor Driver Requirements
|
|
==========================
|
|
|
|
libcamera handles imaging devices in the CameraSensor class and defines
|
|
a consistent interface through its API towards other library components.
|
|
|
|
The CameraSensor class uses the V4L2 subdev kernel API to interface with the
|
|
camera sensor through one or multiple sub-devices exposed in userspace by
|
|
the sensor driver.
|
|
|
|
In order for libcamera to be fully operational and provide all the required
|
|
information to interface with the camera sensor to applications and pipeline
|
|
handlers, a set of mandatory and optional features the driver has to support
|
|
has been defined.
|
|
|
|
Mandatory Requirements
|
|
----------------------
|
|
|
|
The sensor driver is assumed to be fully compliant with the V4L2 specification.
|
|
|
|
For RAW sensors, the sensor driver shall support the following V4L2 controls:
|
|
|
|
* `V4L2_CID_EXPOSURE`_
|
|
* `V4L2_CID_HBLANK`_
|
|
* `V4L2_CID_PIXEL_RATE`_
|
|
* `V4L2_CID_VBLANK`_
|
|
|
|
.. _V4L2_CID_EXPOSURE: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html
|
|
.. _V4L2_CID_HBLANK: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html
|
|
.. _V4L2_CID_PIXEL_RATE: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html
|
|
.. _V4L2_CID_VBLANK: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html
|
|
|
|
While V4L2 doesn't specify a unit for the `EXPOSURE` control, libcamera requires
|
|
it to be expressed as a number of image lines. Camera sensor drivers that do not
|
|
comply with this requirement will need to be adapted or will produce incorrect
|
|
results.
|
|
|
|
The `HBLANK`, `PIXEL_RATE` and `VBLANK` controls are used to compute the sensor
|
|
output timings.
|
|
|
|
Optional Requirements
|
|
---------------------
|
|
|
|
The sensor driver should support the following V4L2 controls:
|
|
|
|
* `V4L2_CID_CAMERA_ORIENTATION`_
|
|
* `V4L2_CID_CAMERA_SENSOR_ROTATION`_
|
|
|
|
.. _V4L2_CID_CAMERA_ORIENTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html
|
|
.. _V4L2_CID_CAMERA_SENSOR_ROTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html
|
|
|
|
The controls are used to register the camera location and rotation.
|
|
|
|
The sensor driver should implement support for the V4L2 Selection API,
|
|
specifically it should implement support for the
|
|
`VIDIOC_SUBDEV_G_SELECTION`_ ioctl with support for the following selection
|
|
targets:
|
|
|
|
.. _VIDIOC_SUBDEV_G_SELECTION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-subdev-g-selection.html?highlight=g_selection#c.V4L.VIDIOC_SUBDEV_G_SELECTION
|
|
|
|
* `V4L2_SEL_TGT_CROP_BOUNDS`_ to report the readable pixel array area size
|
|
* `V4L2_SEL_TGT_CROP_DEFAULT`_ to report the active pixel array area size
|
|
* `V4L2_SEL_TGT_CROP`_ to report the analogue selection rectangle
|
|
|
|
Support for the selection API is scheduled to become a mandatory feature in
|
|
the near future.
|
|
|
|
.. _V4L2_SEL_TGT_CROP_BOUNDS: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html
|
|
.. _V4L2_SEL_TGT_CROP_DEFAULT: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html
|
|
.. _V4L2_SEL_TGT_CROP: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html
|