libcamera: properties: Make 'Rotation' the mounting rotation

Specify in the documentation that properties::Rotation specifies the
mounting rotation of the camera module. This avoids confusion with the
image orientation which is instead expressed by
CameraConfiguration::orientation.

For this reason, do not compensate the Rotation property when
initializing the CameraSensor class but report the value of
V4L2_CID_CAMERA_SENSOR_ROTATION or 0 if the control is not available.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Jacopo Mondi
2023-10-19 16:01:25 +02:00
committed by Laurent Pinchart
parent 891720ae8c
commit 568569b081
2 changed files with 7 additions and 16 deletions

View File

@@ -433,11 +433,11 @@ int CameraSensor::initProperties()
/* Retrieve and register properties from the kernel interface. */
const ControlInfoMap &controls = subdev_->controls();
int32_t propertyValue;
const auto &orientation = controls.find(V4L2_CID_CAMERA_ORIENTATION);
if (orientation != controls.end()) {
int32_t v4l2Orientation = orientation->second.def().get<int32_t>();
int32_t propertyValue;
switch (v4l2Orientation) {
default:
@@ -462,7 +462,7 @@ int CameraSensor::initProperties()
const auto &rotationControl = controls.find(V4L2_CID_CAMERA_SENSOR_ROTATION);
if (rotationControl != controls.end()) {
propertyValue = rotationControl->second.def().get<int32_t>();
int32_t propertyValue = rotationControl->second.def().get<int32_t>();
/*
* Cache the Transform associated with the camera mounting
@@ -477,20 +477,11 @@ int CameraSensor::initProperties()
rotationTransform_ = Transform::Identity;
}
/*
* Adjust property::Rotation as validateTransform() compensates
* for the mounting rotation. However, as a camera sensor can
* only compensate rotations by applying H/VFlips, only rotation
* of 180 degrees are automatically compensated. The other valid
* rotations (Rot90 and Rot270) require transposition, which the
* camera sensor cannot perform, so leave them untouched.
*/
if (propertyValue == 180 && supportFlips_)
propertyValue = 0;
properties_.set(properties::Rotation, propertyValue);
} else {
LOG(CameraSensor, Warning)
<< "Rotation control not available, default to 0 degrees";
properties_.set(properties::Rotation, 0);
rotationTransform_ = Transform::Identity;
}

View File

@@ -29,10 +29,10 @@ controls:
- Rotation:
type: int32_t
description: |
The camera rotation is expressed as the angular difference in degrees
between two reference systems, one relative to the camera module, and
one defined on the external world scene to be captured when projected
on the image sensor pixel array.
The camera physical mounting rotation. It is expressed as the angular
difference in degrees between two reference systems, one relative to the
camera module, and one defined on the external world scene to be
captured when projected on the image sensor pixel array.
A camera sensor has a 2-dimensional reference system 'Rc' defined by
its pixel array read-out order. The origin is set to the first pixel