[libcamera-devel] [PATCH v3 07/10] libcamera: transform: Add operations with Orientation
David Plowman
david.plowman at raspberrypi.com
Tue Jul 18 13:52:55 CEST 2023
Hi Jacopo
Thanks for these new versions. I do like them!!
On Tue, 18 Jul 2023 at 11:52, Jacopo Mondi
<jacopo.mondi at ideasonboard.com> wrote:
>
> Add two operations that allows to combine Transform with Orientation.
>
> - Transform operator/(Orientation1, Orientation2)
> allows to easily get back the Transform that needs to be applied to
> Orientation2 to get Orientation1
>
> - Orientation operator*(Orientation1, Transform)
> allows to apply a Transform to an Orientation and obtain the
> combination of the two
>
> These two operations allow applications to use Transforms to
> manipulate the Orientation inside the CameraConfiguration, if they
> wish.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
Thanks
David
> ---
> include/libcamera/transform.h | 3 +++
> src/libcamera/transform.cpp | 37 +++++++++++++++++++++++++++++++++++
> 2 files changed, 40 insertions(+)
>
> diff --git a/include/libcamera/transform.h b/include/libcamera/transform.h
> index 14f1db0e8572..847a1f94713c 100644
> --- a/include/libcamera/transform.h
> +++ b/include/libcamera/transform.h
> @@ -74,6 +74,9 @@ Transform transformFromRotation(int angle, bool *success = nullptr);
> Transform transformFromOrientation(const Orientation &orientation);
> Orientation transformToOrientation(const Transform &transform);
>
> +Transform operator/(const Orientation &o1, const Orientation &o2);
> +Orientation operator*(const Orientation &o1, const Transform &t);
> +
> const char *transformToString(Transform t);
>
> } /* namespace libcamera */
> diff --git a/src/libcamera/transform.cpp b/src/libcamera/transform.cpp
> index d192d63d9290..80cd804ca530 100644
> --- a/src/libcamera/transform.cpp
> +++ b/src/libcamera/transform.cpp
> @@ -362,6 +362,43 @@ Orientation transformToOrientation(const Transform &transform)
> return Orientation::rotate0;
> }
>
> +/**
> + * \brief Return the Transform that applied to \a o2 gives \a o1
> + * \param o1 The Orientation to obtain
> + * \param o2 The base Orientation
> + *
> + * This operation can be used to easily compute the Transform to apply to a
> + * base orientation \a o2 to get the desired orientation \a o1.
> + *
> + * The CameraSensor class uses this function to compute what Transform to apply
> + * to a camera with mounting rotation \a o2 (the base) to obtain the user
> + * requested orientation \a o1.
> + *
> + * \return A Transform that applied to \a o2 gives \a o1
> + */
> +Transform operator/(const Orientation &o1, const Orientation &o2)
> +{
> + Transform t1 = transformFromOrientation(o1);
> + Transform t2 = transformFromOrientation(o2);
> +
> + return -t2 * t1;
> +}
> +
> +/**
> + * \brief Apply the Transform \a t on the base orientation \a o
> + * \param o The base orientation
> + * \param t The transform to apply on \a o
> + * \return The Orientation resulting from applying \a t on \a o
> + */
> +Orientation operator*(const Orientation &o, const Transform &t)
> +{
> + /*
> + * Apply a Transform corresponding to the base orientation first and
> + * then apply \a t to it.
> + */
> + return transformToOrientation(transformFromOrientation(o) * t);
> +}
> +
> /**
> * \brief Return a character string describing the transform
> * \param[in] t The transform to be described.
> --
> 2.40.1
>
More information about the libcamera-devel
mailing list