From 319d6ae8e3ad1a47a674e85015de9ea811e84564 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 14 Oct 2019 02:08:44 +0300 Subject: libcamera: controls: Merge ControlInfoMap and V4L2ControlInfoMap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ControlInfoMap and V4L2ControlInfoMap classes are very similar, with the latter adding convenience accessors based on numerical IDs for the former, as well as a cached idmap. Both features can be useful for ControlInfoMap in the context of serialisation, and merging the two classes will further simplify the IPA API. Import all the features of V4L2ControlInfoMap into ControlInfoMap, turning the latter into a real class. A few new constructors and assignment operators are added for completeness. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund Reviewed-by: Jacopo Mondi --- include/ipa/ipa_interface.h | 2 +- include/libcamera/controls.h | 45 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/ipa/ipa_interface.h b/include/ipa/ipa_interface.h index dfb1bcbe..8fd658af 100644 --- a/include/ipa/ipa_interface.h +++ b/include/ipa/ipa_interface.h @@ -43,7 +43,7 @@ public: virtual int init() = 0; virtual void configure(const std::map &streamConfig, - const std::map &entityControls) = 0; + const std::map &entityControls) = 0; virtual void mapBuffers(const std::vector &buffers) = 0; virtual void unmapBuffers(const std::vector &ids) = 0; diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 5534a2ed..80414c6f 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -118,7 +118,50 @@ private: }; using ControlIdMap = std::unordered_map; -using ControlInfoMap = std::unordered_map; + +class ControlInfoMap : private std::unordered_map +{ +public: + using Map = std::unordered_map; + + ControlInfoMap() = default; + ControlInfoMap(const ControlInfoMap &other) = default; + ControlInfoMap(std::initializer_list init); + + ControlInfoMap &operator=(const ControlInfoMap &other) = default; + ControlInfoMap &operator=(std::initializer_list init); + ControlInfoMap &operator=(Map &&info); + + using Map::key_type; + using Map::mapped_type; + using Map::value_type; + using Map::size_type; + using Map::iterator; + using Map::const_iterator; + + using Map::begin; + using Map::cbegin; + using Map::end; + using Map::cend; + using Map::at; + using Map::empty; + using Map::size; + using Map::count; + using Map::find; + + mapped_type &at(unsigned int key); + const mapped_type &at(unsigned int key) const; + size_type count(unsigned int key) const; + iterator find(unsigned int key); + const_iterator find(unsigned int key) const; + + const ControlIdMap &idmap() const { return idmap_; } + +private: + void generateIdmap(); + + ControlIdMap idmap_; +}; class ControlList { -- cgit v1.2.1