summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/controls.h3
-rw-r--r--src/libcamera/control_serializer.cpp13
-rw-r--r--src/libcamera/controls.cpp23
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
*/