[libcamera-devel,v4,03/19] libcamera: geometry: Add isNull() function to Rectangle class

Message ID 20200720104736.19986-4-jacopo@jmondi.org
State Accepted
Headers show
Series
  • ipu3: rework pipe confiuguration
Related show

Commit Message

Jacopo Mondi July 20, 2020, 10:47 a.m. UTC
It's common for code to check if a rectangle is null. Add a helper function
to do so and test the function in test/geometry.cpp

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 include/libcamera/geometry.h |  1 +
 src/libcamera/geometry.cpp   |  6 ++++++
 test/geometry.cpp            | 14 ++++++++++++++
 3 files changed, 21 insertions(+)

Patch

diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
index d858f85cf1f0..02fb63c08f60 100644
--- a/include/libcamera/geometry.h
+++ b/include/libcamera/geometry.h
@@ -181,6 +181,7 @@  public:
 	unsigned int width;
 	unsigned int height;
 
+	bool isNull() const { return !width && !height; }
 	const std::string toString() const;
 };
 
diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
index 23181bdec969..b12e1a62f939 100644
--- a/src/libcamera/geometry.cpp
+++ b/src/libcamera/geometry.cpp
@@ -385,6 +385,12 @@  bool operator==(const SizeRange &lhs, const SizeRange &rhs)
  * \brief The distance between the top and bottom sides
  */
 
+/**
+ * \fn bool Rectangle::isNull() const
+ * \brief Check if the rectangle is null
+ * \return True if both the width and height are 0, or false otherwise
+ */
+
 /**
  * \brief Assemble and return a string describing the rectangle
  * \return A string describing the Rectangle
diff --git a/test/geometry.cpp b/test/geometry.cpp
index 1a9fc1b8e3ed..08e268c9c312 100644
--- a/test/geometry.cpp
+++ b/test/geometry.cpp
@@ -182,6 +182,20 @@  protected:
 		if (!compare(Size(200, 100), Size(100, 200), &operator>=, ">=", true))
 			return TestFail;
 
+		/* Test Rectangle::isNull(). */
+		if (!Rectangle(0, 0, 0, 0).isNull() ||
+		    !Rectangle(1, 1, 0, 0).isNull()) {
+			cout << "Null rectangle incorrectly reported as not null" << endl;
+			return TestFail;
+		}
+
+		if (Rectangle(0, 0, 0, 1).isNull() ||
+		    Rectangle(0, 0, 1, 0).isNull() ||
+		    Rectangle(0, 0, 1, 1).isNull()) {
+			cout << "Non-null rectangle incorrectly reported as null" << endl;
+			return TestFail;
+		}
+
 		return TestPass;
 	}
 };