[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