[libcamera-devel,1/2] libcamera: controls: Add rectangle and size control types

Message ID 20200425205639.30566-1-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • [libcamera-devel,1/2] libcamera: controls: Add rectangle and size control types
Related show

Commit Message

Laurent Pinchart April 25, 2020, 8:56 p.m. UTC
Add two control types to store rectangles and sizes. These will be
useful for the properties related to the pixel array.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/controls.h | 13 +++++++++++++
 src/libcamera/controls.cpp   | 12 ++++++++++++
 2 files changed, 25 insertions(+)

Comments

Niklas Söderlund April 27, 2020, 10:41 p.m. UTC | #1
Hi Laurent,

Thanks for your work.

On 2020-04-25 23:56:38 +0300, Laurent Pinchart wrote:
> Add two control types to store rectangles and sizes. These will be
> useful for the properties related to the pixel array.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

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

> ---
>  include/libcamera/controls.h | 13 +++++++++++++
>  src/libcamera/controls.cpp   | 12 ++++++++++++
>  2 files changed, 25 insertions(+)
> 
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 4b2e7e9cdd6c..80944efc133a 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -13,6 +13,7 @@
>  #include <string>
>  #include <unordered_map>
>  
> +#include <libcamera/geometry.h>
>  #include <libcamera/span.h>
>  
>  namespace libcamera {
> @@ -27,6 +28,8 @@ enum ControlType {
>  	ControlTypeInteger64,
>  	ControlTypeFloat,
>  	ControlTypeString,
> +	ControlTypeRectangle,
> +	ControlTypeSize,
>  };
>  
>  namespace details {
> @@ -70,6 +73,16 @@ struct control_type<std::string> {
>  	static constexpr ControlType value = ControlTypeString;
>  };
>  
> +template<>
> +struct control_type<Rectangle> {
> +	static constexpr ControlType value = ControlTypeRectangle;
> +};
> +
> +template<>
> +struct control_type<Size> {
> +	static constexpr ControlType value = ControlTypeSize;
> +};
> +
>  template<typename T, std::size_t N>
>  struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
>  };
> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> index 540cc026417a..08df7f29e938 100644
> --- a/src/libcamera/controls.cpp
> +++ b/src/libcamera/controls.cpp
> @@ -58,6 +58,8 @@ static constexpr size_t ControlValueSize[] = {
>  	[ControlTypeInteger64]		= sizeof(int64_t),
>  	[ControlTypeFloat]		= sizeof(float),
>  	[ControlTypeString]		= sizeof(char),
> +	[ControlTypeRectangle]		= sizeof(Rectangle),
> +	[ControlTypeSize]		= sizeof(Size),
>  };
>  
>  } /* namespace */
> @@ -242,6 +244,16 @@ std::string ControlValue::toString() const
>  			str += std::to_string(*value);
>  			break;
>  		}
> +		case ControlTypeRectangle: {
> +			const Rectangle *value = reinterpret_cast<const Rectangle *>(data);
> +			str += value->toString();
> +			break;
> +		}
> +		case ControlTypeSize: {
> +			const Size *value = reinterpret_cast<const Size *>(data);
> +			str += value->toString();
> +			break;
> +		}
>  		case ControlTypeNone:
>  		case ControlTypeString:
>  			break;
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Jacopo Mondi April 28, 2020, 7:56 a.m. UTC | #2
Hi Laurent,

On Sat, Apr 25, 2020 at 11:56:38PM +0300, Laurent Pinchart wrote:
> Add two control types to store rectangles and sizes. These will be
> useful for the properties related to the pixel array.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

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

Please push this one!

> ---
>  include/libcamera/controls.h | 13 +++++++++++++
>  src/libcamera/controls.cpp   | 12 ++++++++++++
>  2 files changed, 25 insertions(+)
>
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 4b2e7e9cdd6c..80944efc133a 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -13,6 +13,7 @@
>  #include <string>
>  #include <unordered_map>
>
> +#include <libcamera/geometry.h>
>  #include <libcamera/span.h>
>
>  namespace libcamera {
> @@ -27,6 +28,8 @@ enum ControlType {
>  	ControlTypeInteger64,
>  	ControlTypeFloat,
>  	ControlTypeString,
> +	ControlTypeRectangle,
> +	ControlTypeSize,
>  };
>
>  namespace details {
> @@ -70,6 +73,16 @@ struct control_type<std::string> {
>  	static constexpr ControlType value = ControlTypeString;
>  };
>
> +template<>
> +struct control_type<Rectangle> {
> +	static constexpr ControlType value = ControlTypeRectangle;
> +};
> +
> +template<>
> +struct control_type<Size> {
> +	static constexpr ControlType value = ControlTypeSize;
> +};
> +
>  template<typename T, std::size_t N>
>  struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
>  };
> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> index 540cc026417a..08df7f29e938 100644
> --- a/src/libcamera/controls.cpp
> +++ b/src/libcamera/controls.cpp
> @@ -58,6 +58,8 @@ static constexpr size_t ControlValueSize[] = {
>  	[ControlTypeInteger64]		= sizeof(int64_t),
>  	[ControlTypeFloat]		= sizeof(float),
>  	[ControlTypeString]		= sizeof(char),
> +	[ControlTypeRectangle]		= sizeof(Rectangle),
> +	[ControlTypeSize]		= sizeof(Size),
>  };
>
>  } /* namespace */
> @@ -242,6 +244,16 @@ std::string ControlValue::toString() const
>  			str += std::to_string(*value);
>  			break;
>  		}
> +		case ControlTypeRectangle: {
> +			const Rectangle *value = reinterpret_cast<const Rectangle *>(data);
> +			str += value->toString();
> +			break;
> +		}
> +		case ControlTypeSize: {
> +			const Size *value = reinterpret_cast<const Size *>(data);
> +			str += value->toString();
> +			break;
> +		}
>  		case ControlTypeNone:
>  		case ControlTypeString:
>  			break;
> --
> Regards,
>
> Laurent Pinchart
>

Patch

diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 4b2e7e9cdd6c..80944efc133a 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -13,6 +13,7 @@ 
 #include <string>
 #include <unordered_map>
 
+#include <libcamera/geometry.h>
 #include <libcamera/span.h>
 
 namespace libcamera {
@@ -27,6 +28,8 @@  enum ControlType {
 	ControlTypeInteger64,
 	ControlTypeFloat,
 	ControlTypeString,
+	ControlTypeRectangle,
+	ControlTypeSize,
 };
 
 namespace details {
@@ -70,6 +73,16 @@  struct control_type<std::string> {
 	static constexpr ControlType value = ControlTypeString;
 };
 
+template<>
+struct control_type<Rectangle> {
+	static constexpr ControlType value = ControlTypeRectangle;
+};
+
+template<>
+struct control_type<Size> {
+	static constexpr ControlType value = ControlTypeSize;
+};
+
 template<typename T, std::size_t N>
 struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
 };
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 540cc026417a..08df7f29e938 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -58,6 +58,8 @@  static constexpr size_t ControlValueSize[] = {
 	[ControlTypeInteger64]		= sizeof(int64_t),
 	[ControlTypeFloat]		= sizeof(float),
 	[ControlTypeString]		= sizeof(char),
+	[ControlTypeRectangle]		= sizeof(Rectangle),
+	[ControlTypeSize]		= sizeof(Size),
 };
 
 } /* namespace */
@@ -242,6 +244,16 @@  std::string ControlValue::toString() const
 			str += std::to_string(*value);
 			break;
 		}
+		case ControlTypeRectangle: {
+			const Rectangle *value = reinterpret_cast<const Rectangle *>(data);
+			str += value->toString();
+			break;
+		}
+		case ControlTypeSize: {
+			const Size *value = reinterpret_cast<const Size *>(data);
+			str += value->toString();
+			break;
+		}
 		case ControlTypeNone:
 		case ControlTypeString:
 			break;