[libcamera-devel] [PATCH 4/9] libcamera: ipa_data_serializer: Add serializer for Flags

Paul Elder paul.elder at ideasonboard.com
Wed Aug 3 13:21:45 CEST 2022


Implement an IPADataSerializer for Flags.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 .../libcamera/internal/ipa_data_serializer.h  | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h
index 30bdaebc..3645da4c 100644
--- a/include/libcamera/internal/ipa_data_serializer.h
+++ b/include/libcamera/internal/ipa_data_serializer.h
@@ -14,6 +14,7 @@
 #include <type_traits>
 #include <vector>
 
+#include <libcamera/base/flags.h>
 #include <libcamera/base/log.h>
 
 #include <libcamera/control_ids.h>
@@ -301,6 +302,53 @@ public:
 	}
 };
 
+/* Serialization format for Flags is same as for PODs */
+template<typename E>
+class IPADataSerializer<Flags<E>>
+{
+public:
+	static std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>
+	serialize(const Flags<E> &data, [[maybe_unused]] ControlSerializer *cs = nullptr)
+	{
+		std::vector<uint8_t> dataVec;
+		dataVec.reserve(sizeof(Flags<E>));
+		appendPOD<uint32_t>(dataVec, data.value_);
+
+		return { dataVec, {} };
+	}
+
+	static Flags<E> deserialize(std::vector<uint8_t> &data,
+				    [[maybe_unused]] ControlSerializer *cs = nullptr)
+	{
+		return deserialize(data.cbegin(), data.end());
+	}
+
+	static Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,
+				    std::vector<uint8_t>::const_iterator dataEnd,
+				    [[maybe_unused]] ControlSerializer *cs = nullptr)
+	{
+		Flags<E> ret;
+		ret.value_ = readPOD<uint32_t>(dataBegin, 0, dataEnd);
+		return ret;
+	}
+
+	static Flags<E> deserialize(std::vector<uint8_t> &data,
+				    [[maybe_unused]] std::vector<SharedFD> &fds,
+				    [[maybe_unused]] ControlSerializer *cs = nullptr)
+	{
+		return deserialize(data.cbegin(), data.end());
+	}
+
+	static Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,
+				    std::vector<uint8_t>::const_iterator dataEnd,
+				    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsBegin,
+				    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsEnd,
+				    [[maybe_unused]] ControlSerializer *cs = nullptr)
+	{
+		return deserialize(dataBegin, dataEnd);
+	}
+};
+
 #endif /* __DOXYGEN__ */
 
 } /* namespace libcamera */
-- 
2.30.2



More information about the libcamera-devel mailing list