diff options
-rw-r--r-- | include/libcamera/controls.h | 3 | ||||
-rw-r--r-- | src/libcamera/control_serializer.cpp | 13 | ||||
-rw-r--r-- | src/libcamera/controls.cpp | 23 |
3 files changed, 27 insertions, 12 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 6f0ebf4f..4538be06 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -12,6 +12,8 @@ #include <string> #include <unordered_map> +#include <libcamera/span.h> + namespace libcamera { class ControlValidator; @@ -65,6 +67,7 @@ public: ControlType type() const { return type_; } bool isNone() const { return type_ == ControlTypeNone; } + Span<const uint8_t> data() const; std::string toString() const; diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp index 803ac16c..2b66ab97 100644 --- a/src/libcamera/control_serializer.cpp +++ b/src/libcamera/control_serializer.cpp @@ -27,17 +27,6 @@ namespace libcamera { LOG_DEFINE_CATEGORY(Serializer) -namespace { - -static constexpr size_t ControlValueSize[] = { - [ControlTypeNone] = 1, - [ControlTypeBool] = sizeof(bool), - [ControlTypeInteger32] = sizeof(int32_t), - [ControlTypeInteger64] = sizeof(int64_t), -}; - -} /* namespace */ - /** * \class ControlSerializer * \brief Serializer and deserializer for control-related classes @@ -106,7 +95,7 @@ void ControlSerializer::reset() size_t ControlSerializer::binarySize(const ControlValue &value) { - return ControlValueSize[value.type()]; + return value.data().size_bytes(); } size_t ControlSerializer::binarySize(const ControlRange &range) diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp index 76230a05..e5131880 100644 --- a/src/libcamera/controls.cpp +++ b/src/libcamera/controls.cpp @@ -47,6 +47,17 @@ namespace libcamera { LOG_DEFINE_CATEGORY(Controls) +namespace { + +static constexpr size_t ControlValueSize[] = { + [ControlTypeNone] = 1, + [ControlTypeBool] = sizeof(bool), + [ControlTypeInteger32] = sizeof(int32_t), + [ControlTypeInteger64] = sizeof(int64_t), +}; + +} /* namespace */ + /** * \enum ControlType * \brief Define the data type of a Control @@ -92,6 +103,18 @@ ControlValue::ControlValue() */ /** + * \brief Retrieve the raw data of a control value + * \return The raw data of the control value as a span of uint8_t + */ +Span<const uint8_t> ControlValue::data() const +{ + return { + reinterpret_cast<const uint8_t *>(&bool_), + ControlValueSize[type_] + }; +} + +/** * \brief Assemble and return a string describing the value * \return A string describing the ControlValue */ |