[libcamera-devel,v6,19/12] libcamera: camera_sensor: Cache mounting orientation instead of transform
diff mbox series

Message ID 20231022224159.30298-7-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • libcamera: Replace CameraConfiguration::transform
Related show

Commit Message

Laurent Pinchart Oct. 22, 2023, 10:41 p.m. UTC
The cached rotationTransform_ value is used in computeTransform() only,
to compute the mounting orientation. Cache the mounting orientation
instead, removing the need for the intermediate conversion of the
rotation to a transform.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/internal/camera_sensor.h |  3 ++-
 src/libcamera/camera_sensor.cpp            | 18 ++++++++----------
 2 files changed, 10 insertions(+), 11 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index bcdb2d834dc3..60a8b106d175 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -17,6 +17,7 @@ 
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
 #include <libcamera/geometry.h>
+#include <libcamera/orientation.h>
 #include <libcamera/transform.h>
 
 #include <libcamera/ipa/core_ipa_interface.h>
@@ -114,7 +115,7 @@  private:
 	Rectangle activeArea_;
 	const BayerFormat *bayerFormat_;
 	bool supportFlips_;
-	Transform rotationTransform_;
+	Orientation mountingOrientation_;
 
 	ControlList properties_;
 
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index f175f8b56077..d92616722bc3 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -470,12 +470,12 @@  int CameraSensor::initProperties()
 		 * rotation for later use in computeTransform().
 		 */
 		bool success;
-		rotationTransform_ = transformFromRotation(propertyValue, &success);
+		mountingOrientation_ = orientationFromRotation(propertyValue, &success);
 		if (!success) {
 			LOG(CameraSensor, Warning)
 				<< "Invalid rotation of " << propertyValue
 				<< " degrees - ignoring";
-			rotationTransform_ = Transform::Identity;
+			mountingOrientation_ = Orientation::Rotate0;
 		}
 
 		properties_.set(properties::Rotation, propertyValue);
@@ -483,7 +483,7 @@  int CameraSensor::initProperties()
 		LOG(CameraSensor, Warning)
 			<< "Rotation control not available, default to 0 degrees";
 		properties_.set(properties::Rotation, 0);
-		rotationTransform_ = Transform::Identity;
+		mountingOrientation_ = Orientation::Rotate0;
 	}
 
 	properties_.set(properties::PixelArraySize, pixelArraySize_);
@@ -1137,14 +1137,12 @@  void CameraSensor::updateControlInfo()
  */
 Transform CameraSensor::computeTransform(Orientation *orientation) const
 {
-	Orientation mountingOrientation = transformToOrientation(rotationTransform_);
-
 	/*
 	 * If we cannot do any flips we cannot change the native camera mounting
 	 * orientation.
 	 */
 	if (!supportFlips_) {
-		*orientation = mountingOrientation;
+		*orientation = mountingOrientation_;
 		return Transform::Identity;
 	}
 
@@ -1153,17 +1151,17 @@  Transform CameraSensor::computeTransform(Orientation *orientation) const
 	 * from the mounting rotation.
 	 *
 	 * As a note:
-	 * 	orientation / mountingOrientation = transform
-	 * 	mountingOrientation * transform = orientation
+	 * 	orientation / mountingOrientation_ = transform
+	 * 	mountingOrientation_ * transform = orientation
 	 */
-	Transform transform = *orientation / mountingOrientation;
+	Transform transform = *orientation / mountingOrientation_;
 
 	/*
 	 * If transform contains any Transpose we cannot do it, so adjust
 	 * 'orientation' to report the image native orientation and return Identity.
 	 */
 	if (!!(transform & Transform::Transpose)) {
-		*orientation = mountingOrientation;
+		*orientation = mountingOrientation_;
 		return Transform::Identity;
 	}