libcamera: transform: Add functions to convert Orientation

Add two helper functions to the transform.cpp file that allows to
convert to and from an Orientation.

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

View file

@ -11,6 +11,8 @@
namespace libcamera { namespace libcamera {
enum class Orientation;
enum class Transform : int { enum class Transform : int {
Identity = 0, Identity = 0,
Rot0 = Identity, Rot0 = Identity,
@ -69,6 +71,8 @@ constexpr Transform operator~(Transform t)
} }
Transform transformFromRotation(int angle, bool *success = nullptr); Transform transformFromRotation(int angle, bool *success = nullptr);
Transform transformFromOrientation(const Orientation &orientation);
Orientation transformToOrientation(const Transform &transform);
const char *transformToString(Transform t); const char *transformToString(Transform t);

View file

@ -7,6 +7,8 @@
#include <libcamera/transform.h> #include <libcamera/transform.h>
#include <libcamera/orientation.h>
/** /**
* \file transform.h * \file transform.h
* \brief Enum to represent and manipulate 2D plane transforms * \brief Enum to represent and manipulate 2D plane transforms
@ -299,6 +301,64 @@ Transform transformFromRotation(int angle, bool *success)
return Transform::Identity; return Transform::Identity;
} }
/**
* \brief Return the transform representing \a orientation
* \param[in] orientation The orientation to convert
* \return The transform corresponding to \a orientation
*/
Transform transformFromOrientation(const Orientation &orientation)
{
switch (orientation) {
case Orientation::Rotate0:
return Transform::Identity;
case Orientation::Rotate0Mirror:
return Transform::HFlip;
case Orientation::Rotate180:
return Transform::Rot180;
case Orientation::Rotate180Mirror:
return Transform::VFlip;
case Orientation::Rotate90Mirror:
return Transform::Transpose;
case Orientation::Rotate90:
return Transform::Rot90;
case Orientation::Rotate270Mirror:
return Transform::Rot180Transpose;
case Orientation::Rotate270:
return Transform::Rot270;
}
return Transform::Identity;
}
/**
* \brief Return the Orientation representing \a transform
* \param[in] transform The transform to convert
* \return The Orientation corresponding to \a transform
*/
Orientation transformToOrientation(const Transform &transform)
{
switch (transform) {
case Transform::Identity:
return Orientation::Rotate0;
case Transform::HFlip:
return Orientation::Rotate0Mirror;
case Transform::VFlip:
return Orientation::Rotate180Mirror;
case Transform::Rot180:
return Orientation::Rotate180;
case Transform::Transpose:
return Orientation::Rotate90Mirror;
case Transform::Rot270:
return Orientation::Rotate270;
case Transform::Rot90:
return Orientation::Rotate90;
case Transform::Rot180Transpose:
return Orientation::Rotate270Mirror;
}
return Orientation::Rotate0;
}
/** /**
* \brief Return a character string describing the transform * \brief Return a character string describing the transform
* \param[in] t The transform to be described. * \param[in] t The transform to be described.