libcamera: camera_sensor: Make V4L2_CID_EXPOSURE mandatory

Add the V4L2_CID_EXPOSURE control to the list of mandatory controls the
sensor driver has to report and document this new requirement.

While at it, re-sort the mandatory V4L2 controls in alphabetical
order in the CameraSensor class and remove the above comment as
the usage of the controls is better reported in the documentation.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi
2021-01-25 14:54:04 +01:00
parent db19dcb75d
commit 021752924b
2 changed files with 11 additions and 4 deletions
+9 -1
View File
@@ -24,13 +24,21 @@ The sensor driver is assumed to be fully compliant with the V4L2 specification.
The sensor driver shall support the following V4L2 controls:
* `V4L2_CID_EXPOSURE`_
* `V4L2_CID_HBLANK`_
* `V4L2_CID_PIXEL_RATE`_
.. _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
Both controls are used to compute the sensor output timings.
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` and `PIXEL_RATE` controls are used to compute the sensor output
timings.
Optional Requirements
---------------------
+2 -3
View File
@@ -239,12 +239,11 @@ int CameraSensor::validateSensorDriver()
/*
* Make sure the sensor driver supports the mandatory controls
* required by the CameraSensor class.
* - V4L2_CID_PIXEL_RATE is used to calculate the sensor timings
* - V4L2_CID_HBLANK is used to calculate the line length
*/
const std::vector<uint32_t> mandatoryControls{
V4L2_CID_PIXEL_RATE,
V4L2_CID_EXPOSURE,
V4L2_CID_HBLANK,
V4L2_CID_PIXEL_RATE,
};
ControlList ctrls = subdev_->getControls(mandatoryControls);