[libcamera-devel,v4,04/16] libcamera: geometry: SizeRange: Add contains()

Message ID 20190619025129.21164-5-niklas.soderlund@ragnatech.se
State Accepted
Headers show
Series
  • libcamera: Add support for format information and validation
Related show

Commit Message

Niklas Söderlund June 19, 2019, 2:51 a.m. UTC
Add a method to check if a Size can fit inside a SizeRange. When
determining if a size is containable take step values into account if
they are not set to 0.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/geometry.h |  2 ++
 src/libcamera/geometry.cpp   | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)

Patch

diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
index 03962d7d09fac2b0..52f4d010de76f840 100644
--- a/include/libcamera/geometry.h
+++ b/include/libcamera/geometry.h
@@ -92,6 +92,8 @@  public:
 	{
 	}
 
+	bool contains(const Size &size) const;
+
 	std::string toString() const;
 
 	Size min;
diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
index e598f6ad66076996..32b0faeadc6376e3 100644
--- a/src/libcamera/geometry.cpp
+++ b/src/libcamera/geometry.cpp
@@ -266,6 +266,22 @@  bool operator<(const Size &lhs, const Size &rhs)
  * \brief The vertical step
  */
 
+/**
+ * \brief Test if a size is contained in the range
+ * \param[in] size Size to check
+ * \returns True if \a size is contained in the range
+ */
+bool SizeRange::contains(const Size &size) const
+{
+	if (size.width < min.width || size.width > max.width ||
+	    size.height < min.height || size.height > max.height ||
+	    (hStep && (size.width - min.width) % hStep) ||
+	    (vStep && (size.height - min.height) % vStep))
+		return false;
+
+	return true;
+}
+
 /**
  * \brief Assemble and return a string describing the size range
  * \return A string describing the SizeRange