diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-02-29 03:39:46 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-04-28 20:44:47 +0300 |
commit | d4680c8ca2b5cac4f723ec869b297099000b1100 (patch) | |
tree | 3ba027f269d3701afe251e381e5062d1e8376701 | |
parent | 8a9be175a76d34ed9fcf4c4f0233ef73736b8eab (diff) |
libcamera: controls: Add rectangle and size control types
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>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r-- | include/libcamera/controls.h | 13 | ||||
-rw-r--r-- | src/libcamera/controls.cpp | 12 |
2 files changed, 25 insertions, 0 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 4b2e7e9c..80944efc 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 540cc026..08df7f29 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; |