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:
committed by
Laurent Pinchart
parent
891720ae8c
commit
568569b081
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user