summaryrefslogtreecommitdiff
path: root/include/libcamera/internal/control_serializer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libcamera/internal/control_serializer.h')
-rw-r--r--include/libcamera/internal/control_serializer.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/include/libcamera/internal/control_serializer.h b/include/libcamera/internal/control_serializer.h
new file mode 100644
index 00000000..99bacd92
--- /dev/null
+++ b/include/libcamera/internal/control_serializer.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * control_serializer.h - Control (de)serializer
+ */
+#ifndef __LIBCAMERA_CONTROL_SERIALIZER_H__
+#define __LIBCAMERA_CONTROL_SERIALIZER_H__
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include <libcamera/controls.h>
+
+namespace libcamera {
+
+class ByteStreamBuffer;
+
+class ControlSerializer
+{
+public:
+ ControlSerializer();
+
+ void reset();
+
+ static size_t binarySize(const ControlInfoMap &infoMap);
+ static size_t binarySize(const ControlList &list);
+
+ int serialize(const ControlInfoMap &infoMap, ByteStreamBuffer &buffer);
+ int serialize(const ControlList &list, ByteStreamBuffer &buffer);
+
+ template<typename T>
+ T deserialize(ByteStreamBuffer &buffer);
+
+private:
+ static size_t binarySize(const ControlValue &value);
+ static size_t binarySize(const ControlInfo &info);
+
+ static void store(const ControlValue &value, ByteStreamBuffer &buffer);
+ static void store(const ControlInfo &info, ByteStreamBuffer &buffer);
+
+ ControlValue loadControlValue(ControlType type, ByteStreamBuffer &buffer,
+ bool isArray = false, unsigned int count = 1);
+ ControlInfo loadControlInfo(ControlType type, ByteStreamBuffer &buffer);
+
+ unsigned int serial_;
+ std::vector<std::unique_ptr<ControlId>> controlIds_;
+ std::map<unsigned int, ControlInfoMap> infoMaps_;
+ std::map<const ControlInfoMap *, unsigned int> infoMapHandles_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_CONTROL_SERIALIZER_H__ */