[libcamera-devel,05/11] libcamera: geometry: Use Size to store min and max in SizeRange

Message ID 20190415165700.22970-6-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • Rockchip ISP pipeline handler
Related show

Commit Message

Laurent Pinchart April 15, 2019, 4:56 p.m. UTC
Instead of storing four integers for the minimum and maximum width and
height in the SizeRange class, use two instance of the Size class for
the minimum and maximum sizes.

While it at replace the mention of image size with size in the SizeRange
documentation, as the Size class isn't limited to image sizes.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/geometry.h         | 10 +++-------
 src/libcamera/geometry.cpp           | 26 ++++++++------------------
 src/libcamera/pipeline/ipu3/ipu3.cpp | 17 ++++++++---------
 test/v4l2_subdevice/list_formats.cpp |  8 ++++----
 4 files changed, 23 insertions(+), 38 deletions(-)

Comments

Niklas Söderlund April 15, 2019, 8:29 p.m. UTC | #1
Hi Laurent,

Thanks for your patch.

On 2019-04-15 19:56:54 +0300, Laurent Pinchart wrote:
> Instead of storing four integers for the minimum and maximum width and
> height in the SizeRange class, use two instance of the Size class for
> the minimum and maximum sizes.
> 
> While it at replace the mention of image size with size in the SizeRange
> documentation, as the Size class isn't limited to image sizes.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

> ---
>  include/libcamera/geometry.h         | 10 +++-------
>  src/libcamera/geometry.cpp           | 26 ++++++++------------------
>  src/libcamera/pipeline/ipu3/ipu3.cpp | 17 ++++++++---------
>  test/v4l2_subdevice/list_formats.cpp |  8 ++++----
>  4 files changed, 23 insertions(+), 38 deletions(-)
> 
> diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
> index 7704ab5add21..80f79c6ba2d3 100644
> --- a/include/libcamera/geometry.h
> +++ b/include/libcamera/geometry.h
> @@ -38,21 +38,17 @@ struct Size {
>  
>  struct SizeRange {
>  	SizeRange()
> -		: SizeRange(0, 0, 0, 0)
>  	{
>  	}
>  
>  	SizeRange(unsigned int minW, unsigned int minH,
>  		  unsigned int maxW, unsigned int maxH)
> -		: minWidth(minW), minHeight(minH), maxWidth(maxW),
> -		  maxHeight(maxH)
> +		: min(minW, minH), max(maxW, maxH)
>  	{
>  	}
>  
> -	unsigned int minWidth;
> -	unsigned int minHeight;
> -	unsigned int maxWidth;
> -	unsigned int maxHeight;
> +	Size min;
> +	Size max;
>  };
>  
>  } /* namespace libcamera */
> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
> index 1f875bbe5f48..c1c7daed7259 100644
> --- a/src/libcamera/geometry.cpp
> +++ b/src/libcamera/geometry.cpp
> @@ -93,11 +93,11 @@ const std::string Rectangle::toString() const
>  
>  /**
>   * \struct SizeRange
> - * \brief Describe a range of image sizes
> + * \brief Describe a range of sizes
>   *
> - * SizeRange describes a range of image sizes included in the (minWidth,
> - * minHeight) - (maxWidth, maxHeight) interval. If the minimum and
> - * maximum sizes are identical it represents a single image resolution.
> + * SizeRange describes a range of sizes included in the [min, max]
> + * interval for both the width and the height. If the minimum and
> + * maximum sizes are identical it represents a single size.
>   */
>  
>  /**
> @@ -115,23 +115,13 @@ const std::string Rectangle::toString() const
>   */
>  
>  /**
> - * \var SizeRange::minWidth
> - * \brief The minimum image width
> + * \var SizeRange::min
> + * \brief The minimum size
>   */
>  
>  /**
> - * \var SizeRange::minHeight
> - * \brief The minimum image height
> - */
> -
> -/**
> - * \var SizeRange::maxWidth
> - * \brief The maximum image width
> - */
> -
> -/**
> - * \var SizeRange::maxHeight
> - * \brief The maximum image height
> + * \var SizeRange::max
> + * \brief The maximum size
>   */
>  
>  } /* namespace libcamera */
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index ff72be14d696..4ddd1ede1c81 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1047,10 +1047,9 @@ int CIO2Device::init(const MediaDevice *media, unsigned int index)
>  			continue;
>  
>  		for (const SizeRange &size : it.second) {
> -			if (maxSize_.width < size.maxWidth &&
> -			    maxSize_.height < size.maxHeight) {
> -				maxSize_.width = size.maxWidth;
> -				maxSize_.height = size.maxHeight;
> +			if (maxSize_.width < size.max.width &&
> +			    maxSize_.height < size.max.height) {
> +				maxSize_ = size.max;
>  				mbusCode_ = mbusCode;
>  			}
>  		}
> @@ -1105,19 +1104,19 @@ int CIO2Device::configure(const StreamConfiguration &config,
>  			 * as possible. This will need to be revisited when
>  			 * implementing the scaling policy.
>  			 */
> -			if (size.maxWidth < config.width ||
> -			    size.maxHeight < config.height)
> +			if (size.max.width < config.width ||
> +			    size.max.height < config.height)
>  				continue;
>  
> -			unsigned int diff = size.maxWidth * size.maxHeight
> +			unsigned int diff = size.max.width * size.max.height
>  					  - imageSize;
>  			if (diff >= best)
>  				continue;
>  
>  			best = diff;
>  
> -			sensorFormat.width = size.maxWidth;
> -			sensorFormat.height = size.maxHeight;
> +			sensorFormat.width = size.max.width;
> +			sensorFormat.height = size.max.height;
>  			sensorFormat.mbus_code = it.first;
>  		}
>  	}
> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp
> index 47ae3a1c1a28..09dec9abe854 100644
> --- a/test/v4l2_subdevice/list_formats.cpp
> +++ b/test/v4l2_subdevice/list_formats.cpp
> @@ -37,10 +37,10 @@ void ListFormatsTest::printFormats(unsigned int pad,
>  	for (SizeRange &size : sizes) {
>  		cout << "	mbus code: 0x" << setfill('0') << setw(4)
>  		     << hex << code << endl;
> -		cout << "	min width: " << dec << size.minWidth << endl;
> -		cout << "	min height: " << dec << size.minHeight << endl;
> -		cout << "	max width: " << dec << size.maxWidth << endl;
> -		cout << "	max height: " << dec << size.maxHeight << endl;
> +		cout << "	min width: " << dec << size.min.width << endl;
> +		cout << "	min height: " << dec << size.min.height << endl;
> +		cout << "	max width: " << dec << size.max.width << endl;
> +		cout << "	max height: " << dec << size.max.height << endl;
>  	}
>  }
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Jacopo Mondi April 16, 2019, 3:03 p.m. UTC | #2
Hi Laurent,

On Mon, Apr 15, 2019 at 07:56:54PM +0300, Laurent Pinchart wrote:
> Instead of storing four integers for the minimum and maximum width and
> height in the SizeRange class, use two instance of the Size class for
> the minimum and maximum sizes.
>
> While it at replace the mention of image size with size in the SizeRange
> documentation, as the Size class isn't limited to image sizes.
>

Thanks
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  include/libcamera/geometry.h         | 10 +++-------
>  src/libcamera/geometry.cpp           | 26 ++++++++------------------
>  src/libcamera/pipeline/ipu3/ipu3.cpp | 17 ++++++++---------
>  test/v4l2_subdevice/list_formats.cpp |  8 ++++----
>  4 files changed, 23 insertions(+), 38 deletions(-)
>
> diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
> index 7704ab5add21..80f79c6ba2d3 100644
> --- a/include/libcamera/geometry.h
> +++ b/include/libcamera/geometry.h
> @@ -38,21 +38,17 @@ struct Size {
>
>  struct SizeRange {
>  	SizeRange()
> -		: SizeRange(0, 0, 0, 0)
>  	{
>  	}
>
>  	SizeRange(unsigned int minW, unsigned int minH,
>  		  unsigned int maxW, unsigned int maxH)
> -		: minWidth(minW), minHeight(minH), maxWidth(maxW),
> -		  maxHeight(maxH)
> +		: min(minW, minH), max(maxW, maxH)
>  	{
>  	}
>
> -	unsigned int minWidth;
> -	unsigned int minHeight;
> -	unsigned int maxWidth;
> -	unsigned int maxHeight;
> +	Size min;
> +	Size max;
>  };
>
>  } /* namespace libcamera */
> diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
> index 1f875bbe5f48..c1c7daed7259 100644
> --- a/src/libcamera/geometry.cpp
> +++ b/src/libcamera/geometry.cpp
> @@ -93,11 +93,11 @@ const std::string Rectangle::toString() const
>
>  /**
>   * \struct SizeRange
> - * \brief Describe a range of image sizes
> + * \brief Describe a range of sizes
>   *
> - * SizeRange describes a range of image sizes included in the (minWidth,
> - * minHeight) - (maxWidth, maxHeight) interval. If the minimum and
> - * maximum sizes are identical it represents a single image resolution.
> + * SizeRange describes a range of sizes included in the [min, max]
> + * interval for both the width and the height. If the minimum and
> + * maximum sizes are identical it represents a single size.
>   */
>
>  /**
> @@ -115,23 +115,13 @@ const std::string Rectangle::toString() const
>   */
>
>  /**
> - * \var SizeRange::minWidth
> - * \brief The minimum image width
> + * \var SizeRange::min
> + * \brief The minimum size
>   */
>
>  /**
> - * \var SizeRange::minHeight
> - * \brief The minimum image height
> - */
> -
> -/**
> - * \var SizeRange::maxWidth
> - * \brief The maximum image width
> - */
> -
> -/**
> - * \var SizeRange::maxHeight
> - * \brief The maximum image height
> + * \var SizeRange::max
> + * \brief The maximum size
>   */
>
>  } /* namespace libcamera */
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index ff72be14d696..4ddd1ede1c81 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1047,10 +1047,9 @@ int CIO2Device::init(const MediaDevice *media, unsigned int index)
>  			continue;
>
>  		for (const SizeRange &size : it.second) {
> -			if (maxSize_.width < size.maxWidth &&
> -			    maxSize_.height < size.maxHeight) {
> -				maxSize_.width = size.maxWidth;
> -				maxSize_.height = size.maxHeight;
> +			if (maxSize_.width < size.max.width &&
> +			    maxSize_.height < size.max.height) {
> +				maxSize_ = size.max;
>  				mbusCode_ = mbusCode;
>  			}
>  		}
> @@ -1105,19 +1104,19 @@ int CIO2Device::configure(const StreamConfiguration &config,
>  			 * as possible. This will need to be revisited when
>  			 * implementing the scaling policy.
>  			 */
> -			if (size.maxWidth < config.width ||
> -			    size.maxHeight < config.height)
> +			if (size.max.width < config.width ||
> +			    size.max.height < config.height)
>  				continue;
>
> -			unsigned int diff = size.maxWidth * size.maxHeight
> +			unsigned int diff = size.max.width * size.max.height
>  					  - imageSize;
>  			if (diff >= best)
>  				continue;
>
>  			best = diff;
>
> -			sensorFormat.width = size.maxWidth;
> -			sensorFormat.height = size.maxHeight;
> +			sensorFormat.width = size.max.width;
> +			sensorFormat.height = size.max.height;
>  			sensorFormat.mbus_code = it.first;
>  		}
>  	}
> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp
> index 47ae3a1c1a28..09dec9abe854 100644
> --- a/test/v4l2_subdevice/list_formats.cpp
> +++ b/test/v4l2_subdevice/list_formats.cpp
> @@ -37,10 +37,10 @@ void ListFormatsTest::printFormats(unsigned int pad,
>  	for (SizeRange &size : sizes) {
>  		cout << "	mbus code: 0x" << setfill('0') << setw(4)
>  		     << hex << code << endl;
> -		cout << "	min width: " << dec << size.minWidth << endl;
> -		cout << "	min height: " << dec << size.minHeight << endl;
> -		cout << "	max width: " << dec << size.maxWidth << endl;
> -		cout << "	max height: " << dec << size.maxHeight << endl;
> +		cout << "	min width: " << dec << size.min.width << endl;
> +		cout << "	min height: " << dec << size.min.height << endl;
> +		cout << "	max width: " << dec << size.max.width << endl;
> +		cout << "	max height: " << dec << size.max.height << endl;
>  	}
>  }
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch

diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h
index 7704ab5add21..80f79c6ba2d3 100644
--- a/include/libcamera/geometry.h
+++ b/include/libcamera/geometry.h
@@ -38,21 +38,17 @@  struct Size {
 
 struct SizeRange {
 	SizeRange()
-		: SizeRange(0, 0, 0, 0)
 	{
 	}
 
 	SizeRange(unsigned int minW, unsigned int minH,
 		  unsigned int maxW, unsigned int maxH)
-		: minWidth(minW), minHeight(minH), maxWidth(maxW),
-		  maxHeight(maxH)
+		: min(minW, minH), max(maxW, maxH)
 	{
 	}
 
-	unsigned int minWidth;
-	unsigned int minHeight;
-	unsigned int maxWidth;
-	unsigned int maxHeight;
+	Size min;
+	Size max;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp
index 1f875bbe5f48..c1c7daed7259 100644
--- a/src/libcamera/geometry.cpp
+++ b/src/libcamera/geometry.cpp
@@ -93,11 +93,11 @@  const std::string Rectangle::toString() const
 
 /**
  * \struct SizeRange
- * \brief Describe a range of image sizes
+ * \brief Describe a range of sizes
  *
- * SizeRange describes a range of image sizes included in the (minWidth,
- * minHeight) - (maxWidth, maxHeight) interval. If the minimum and
- * maximum sizes are identical it represents a single image resolution.
+ * SizeRange describes a range of sizes included in the [min, max]
+ * interval for both the width and the height. If the minimum and
+ * maximum sizes are identical it represents a single size.
  */
 
 /**
@@ -115,23 +115,13 @@  const std::string Rectangle::toString() const
  */
 
 /**
- * \var SizeRange::minWidth
- * \brief The minimum image width
+ * \var SizeRange::min
+ * \brief The minimum size
  */
 
 /**
- * \var SizeRange::minHeight
- * \brief The minimum image height
- */
-
-/**
- * \var SizeRange::maxWidth
- * \brief The maximum image width
- */
-
-/**
- * \var SizeRange::maxHeight
- * \brief The maximum image height
+ * \var SizeRange::max
+ * \brief The maximum size
  */
 
 } /* namespace libcamera */
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index ff72be14d696..4ddd1ede1c81 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1047,10 +1047,9 @@  int CIO2Device::init(const MediaDevice *media, unsigned int index)
 			continue;
 
 		for (const SizeRange &size : it.second) {
-			if (maxSize_.width < size.maxWidth &&
-			    maxSize_.height < size.maxHeight) {
-				maxSize_.width = size.maxWidth;
-				maxSize_.height = size.maxHeight;
+			if (maxSize_.width < size.max.width &&
+			    maxSize_.height < size.max.height) {
+				maxSize_ = size.max;
 				mbusCode_ = mbusCode;
 			}
 		}
@@ -1105,19 +1104,19 @@  int CIO2Device::configure(const StreamConfiguration &config,
 			 * as possible. This will need to be revisited when
 			 * implementing the scaling policy.
 			 */
-			if (size.maxWidth < config.width ||
-			    size.maxHeight < config.height)
+			if (size.max.width < config.width ||
+			    size.max.height < config.height)
 				continue;
 
-			unsigned int diff = size.maxWidth * size.maxHeight
+			unsigned int diff = size.max.width * size.max.height
 					  - imageSize;
 			if (diff >= best)
 				continue;
 
 			best = diff;
 
-			sensorFormat.width = size.maxWidth;
-			sensorFormat.height = size.maxHeight;
+			sensorFormat.width = size.max.width;
+			sensorFormat.height = size.max.height;
 			sensorFormat.mbus_code = it.first;
 		}
 	}
diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp
index 47ae3a1c1a28..09dec9abe854 100644
--- a/test/v4l2_subdevice/list_formats.cpp
+++ b/test/v4l2_subdevice/list_formats.cpp
@@ -37,10 +37,10 @@  void ListFormatsTest::printFormats(unsigned int pad,
 	for (SizeRange &size : sizes) {
 		cout << "	mbus code: 0x" << setfill('0') << setw(4)
 		     << hex << code << endl;
-		cout << "	min width: " << dec << size.minWidth << endl;
-		cout << "	min height: " << dec << size.minHeight << endl;
-		cout << "	max width: " << dec << size.maxWidth << endl;
-		cout << "	max height: " << dec << size.maxHeight << endl;
+		cout << "	min width: " << dec << size.min.width << endl;
+		cout << "	min height: " << dec << size.min.height << endl;
+		cout << "	max width: " << dec << size.max.width << endl;
+		cout << "	max height: " << dec << size.max.height << endl;
 	}
 }