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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Apr 25 22:56:38 CEST 2020


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 at ideasonboard.com>
---
 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



More information about the libcamera-devel mailing list