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

Jacopo Mondi jacopo at jmondi.org
Tue Apr 16 17:03:08 CEST 2019


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 at jmondi.org>

> Signed-off-by: Laurent Pinchart <laurent.pinchart at 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 at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190416/b56c175a/attachment.sig>


More information about the libcamera-devel mailing list