[v10,1/5] libcamera: geometry: Clarify Rectangle's top-left corner
diff mbox series

Message ID 20241002055002.6271-1-jacopo.mondi@ideasonboard.com
State Accepted
Headers show
Series
  • Add Face Detection Controls
Related show

Commit Message

Jacopo Mondi Oct. 2, 2024, 5:49 a.m. UTC
The libcamera::Rectangle class allows defining rectangles regardless of
the orientation of the reference system where a rectangle is used in.

This implies that, depending on the reference system in use, the
rectangle's top-left corner, as defined by libcamera, doesn't correspond
to the visual top-left position.

         ^
         |
         |      -------------------
         |      ^                 | h
         |      |                 |
        y|      o---->-------------
         |               w
          ------------------------------->
         (0,0)  x

         (0,0)  x
           ------------------------------>
          |              w
         y|     o---->-------------
          |     |                 | h
          |     v                 |
          |     -------------------
          |
          V

Clarify that a Rectangle's top-left corner corresponds to the point
with the smaller x and y coordinates and that the horizontal and
vertical dimensions are obtained by positive increments along the
corresponding axes.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Harvey Yang <chenghaoyang@chromium.org>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
---
 src/libcamera/geometry.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Laurent Pinchart Oct. 2, 2024, 11:44 a.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Wed, Oct 02, 2024 at 07:49:58AM +0200, Jacopo Mondi wrote:
> The libcamera::Rectangle class allows defining rectangles regardless of
> the orientation of the reference system where a rectangle is used in.
> 
> This implies that, depending on the reference system in use, the
> rectangle's top-left corner, as defined by libcamera, doesn't correspond
> to the visual top-left position.
> 
>          ^
>          |
>          |      -------------------
>          |      ^                 | h
>          |      |                 |
>         y|      o---->-------------
>          |               w
>           ------------------------------->
>          (0,0)  x
> 
>          (0,0)  x
>            ------------------------------>
>           |              w
>          y|     o---->-------------
>           |     |                 | h
>           |     v                 |
>           |     -------------------
>           |
>           V
> 
> Clarify that a Rectangle's top-left corner corresponds to the point
> with the smaller x and y coordinates and that the horizontal and
> vertical dimensions are obtained by positive increments along the
> corresponding axes.
> 
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> Reviewed-by: Harvey Yang <chenghaoyang@chromium.org>
> Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
> ---
>  src/libcamera/geometry.cpp | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
> index 000151364c7f..85a7f53a6f6c 100644
> --- a/src/libcamera/geometry.cpp
> +++ b/src/libcamera/geometry.cpp
> @@ -594,6 +594,8 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
>   *
>   * Rectangles are used to identify an area of an image. They are specified by
>   * the coordinates of top-left corner and their horizontal and vertical size.
> + * By convention, the top-left corner is defined as the corner with the lowest
> + * x and y coordinates, regardless of the origin and direction of the axes.
>   *
>   * The measure unit of the rectangle coordinates and size, as well as the
>   * reference point from which the Rectangle::x and Rectangle::y displacements
> @@ -611,6 +613,8 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
>   * \param[in] x The horizontal coordinate of the top-left corner
>   * \param[in] y The vertical coordinate of the top-left corner
>   * \param[in] size The size
> + *
> + * The rectangle's top-left corner is the point with the smaller x and y values.

You could skip this, it doesn't have to be repeated everywhere. The
documentation in the \class is good enough.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>   */
>  
>  /**
> @@ -620,6 +624,8 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
>   * \param[in] y The vertical coordinate of the top-left corner
>   * \param[in] width The width
>   * \param[in] height The height
> + *
> + * The rectangle's top-left corner is the point with the smaller x and y values.
>   */
>  
>  /**
> @@ -632,11 +638,15 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
>  /**
>   * \var Rectangle::x
>   * \brief The horizontal coordinate of the rectangle's top-left corner
> + *
> + * The rectangle's top-left corner is the point with the smaller x and y values.
>   */
>  
>  /**
>   * \var Rectangle::y
>   * \brief The vertical coordinate of the rectangle's top-left corner
> + *
> + * The rectangle's top-left corner is the point with the smaller x and y values.
>   */
>  
>  /**
> @@ -685,6 +695,9 @@ Point Rectangle::center() const
>  /**
>   * \fn Point Rectangle::topLeft() const
>   * \brief Retrieve the coordinates of the top left corner of this Rectangle
> + *
> + * The rectangle's top-left corner is the point with the smaller x and y values.
> + *
>   * \return The Rectangle's top left corner
>   */
>  
> -- 
> 2.46.1
>

Patch
diff mbox series

diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
index 000151364c7f..85a7f53a6f6c 100644
--- a/src/libcamera/geometry.cpp
+++ b/src/libcamera/geometry.cpp
@@ -594,6 +594,8 @@  std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
  *
  * Rectangles are used to identify an area of an image. They are specified by
  * the coordinates of top-left corner and their horizontal and vertical size.
+ * By convention, the top-left corner is defined as the corner with the lowest
+ * x and y coordinates, regardless of the origin and direction of the axes.
  *
  * The measure unit of the rectangle coordinates and size, as well as the
  * reference point from which the Rectangle::x and Rectangle::y displacements
@@ -611,6 +613,8 @@  std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
  * \param[in] x The horizontal coordinate of the top-left corner
  * \param[in] y The vertical coordinate of the top-left corner
  * \param[in] size The size
+ *
+ * The rectangle's top-left corner is the point with the smaller x and y values.
  */
 
 /**
@@ -620,6 +624,8 @@  std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
  * \param[in] y The vertical coordinate of the top-left corner
  * \param[in] width The width
  * \param[in] height The height
+ *
+ * The rectangle's top-left corner is the point with the smaller x and y values.
  */
 
 /**
@@ -632,11 +638,15 @@  std::ostream &operator<<(std::ostream &out, const SizeRange &sr)
 /**
  * \var Rectangle::x
  * \brief The horizontal coordinate of the rectangle's top-left corner
+ *
+ * The rectangle's top-left corner is the point with the smaller x and y values.
  */
 
 /**
  * \var Rectangle::y
  * \brief The vertical coordinate of the rectangle's top-left corner
+ *
+ * The rectangle's top-left corner is the point with the smaller x and y values.
  */
 
 /**
@@ -685,6 +695,9 @@  Point Rectangle::center() const
 /**
  * \fn Point Rectangle::topLeft() const
  * \brief Retrieve the coordinates of the top left corner of this Rectangle
+ *
+ * The rectangle's top-left corner is the point with the smaller x and y values.
+ *
  * \return The Rectangle's top left corner
  */