From a111bb690364e3bc36468376dc0abc6b8e01ca10 Mon Sep 17 00:00:00 2001 From: Stefan Klug Date: Tue, 25 Nov 2025 17:28:34 +0100 Subject: [PATCH] libcamera: Add transpose() function to size Add a transpose() function to size that applies the Transformation::Transpose operation in the size. This is useful when handling orientation adjustments. Signed-off-by: Stefan Klug Reviewed-by: Kieran Bingham --- include/libcamera/geometry.h | 6 ++++++ src/libcamera/geometry.cpp | 10 ++++++++++ test/geometry.cpp | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h index d9378efe..572a07e2 100644 --- a/include/libcamera/geometry.h +++ b/include/libcamera/geometry.h @@ -108,6 +108,12 @@ public: return *this; } + Size &transpose() + { + std::swap(width, height); + return *this; + } + [[nodiscard]] constexpr Size alignedDownTo(unsigned int hAlignment, unsigned int vAlignment) const { diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp index de76d0c1..2763967a 100644 --- a/src/libcamera/geometry.cpp +++ b/src/libcamera/geometry.cpp @@ -209,6 +209,16 @@ std::string Size::toString() const * \return A reference to this object */ +/** + * \fn Size::transpose() + * \brief Transpose the size in place + * + * This function swaps width and height of this size. This effectively applies + * the \a Transform::Transpose transformation on this size. + * + * \return A reference to this object + */ + /** * \fn Size::alignedDownTo(unsigned int hAlignment, unsigned int vAlignment) * \brief Align the size down horizontally and vertically diff --git a/test/geometry.cpp b/test/geometry.cpp index 11df043b..a50b643b 100644 --- a/test/geometry.cpp +++ b/test/geometry.cpp @@ -203,6 +203,11 @@ protected: return TestFail; } + if (Size(200, 50).transpose() != Size(50, 200)) { + cout << "Size::transpose() test failed" << endl; + return TestFail; + } + /* Aspect ratio tests */ if (Size(0, 0).boundedToAspectRatio(Size(4, 3)) != Size(0, 0) || Size(1920, 1440).boundedToAspectRatio(Size(16, 9)) != Size(1920, 1080) ||