/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2019, Google Inc. * * control_serializer.h - Control (de)serializer */ #ifndef __LIBCAMERA_INTERNAL_CONTROL_SERIALIZER_H__ #define __LIBCAMERA_INTERNAL_CONTROL_SERIALIZER_H__ #include #include #include #include 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 T deserialize(ByteStreamBuffer &buffer); bool isCached(const ControlInfoMap &infoMap); 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> controlIds_; std::map infoMaps_; std::map infoMapHandles_; }; } /* namespace libcamera */ #endif /* __LIBCAMERA_INTERNAL_CONTROL_SERIALIZER_H__ */