summaryrefslogtreecommitdiff
path: root/src/ipa/vimc/vimc.cpp
AgeCommit message (Expand)Author
2022-04-13ipa: vimc: Synchronise parameter buffer ops namingUmang Jain
2022-04-13ipa: vimc: Establish logical order of operationsUmang Jain
2022-04-02ipa: vimc: Rename processControls() to queueRequest()Umang Jain
2021-08-16ipa: vimc: Send and retrieve FrameBuffers from IPAUmang Jain
2021-08-16ipa: vimc: Map and unmap buffersUmang Jain
2021-08-16ipa: vimc: Add configure() functionLaurent Pinchart
2021-08-03libcamera: file: Turn MapFlag and OpenModeFlag into enum classLaurent Pinchart
2021-06-25libcamera/base: Move File to base libraryKieran Bingham
2021-06-25libcamera/base: Move extended base functionalityKieran Bingham
2021-02-16libcamera: IPAInterface: Replace C API with the new C++-only APIPaul Elder
2020-12-08libcamera: ipa: Pass a set of controls and return results from ipa::start()Naushir Patuck
2020-10-20ipa: Rename ipa_vimc.h to vimc.hLaurent Pinchart
2020-10-12vimc: fix close(-1)Tomi Valkeinen
2020-08-25meson: Remove -Wno-unused-parameterLaurent Pinchart
2020-07-17libcamera: ipa_interface: Add support for custom IPA data to configure()Laurent Pinchart
2020-05-16libcamera: Move IPA headers from include/ipa/ to include/libcamera/ipa/Laurent Pinchart
2020-05-16libcamera: Move internal headers to include/libcamera/internal/Laurent Pinchart
2020-04-28libcamera: ipa: Add support for CameraSensorInfoJacopo Mondi
2020-04-28ipa: vimc: Validate configuration file in init()Laurent Pinchart
2020-04-28ipa: Pass IPA initialization settings to IPAInterface::init()Laurent Pinchart
2020-04-28ipa: Name IPA modules after their source directoryLaurent Pinchart
2020-04-14libcamera: ipa: Remove IPAModuleInfo license fieldLaurent Pinchart
2020-04-14ipa: Add start() and stop() operationsNiklas Söderlund
2020-03-25ipa: Move vimc to a subdirectoryLaurent Pinchart
ss="hl opt">&other) { std::scoped_lock other_lock(other.mutex_); data_ = other.data_; } Metadata(Metadata &&other) { std::scoped_lock other_lock(other.mutex_); data_ = std::move(other.data_); other.data_.clear(); } template<typename T> void Set(std::string const &tag, T const &value) { std::scoped_lock lock(mutex_); data_[tag] = value; } template<typename T> int Get(std::string const &tag, T &value) const { std::scoped_lock lock(mutex_); auto it = data_.find(tag); if (it == data_.end()) return -1; value = std::any_cast<T>(it->second); return 0; } void Clear() { std::scoped_lock lock(mutex_); data_.clear(); } Metadata &operator=(Metadata const &other) { std::scoped_lock lock(mutex_, other.mutex_); data_ = other.data_; return *this; } Metadata &operator=(Metadata &&other) { std::scoped_lock lock(mutex_, other.mutex_); data_ = std::move(other.data_); other.data_.clear(); return *this; } void Merge(Metadata &other) { std::scoped_lock lock(mutex_, other.mutex_); data_.merge(other.data_); } template<typename T> T *GetLocked(std::string const &tag) { // This allows in-place access to the Metadata contents, // for which you should be holding the lock. auto it = data_.find(tag); if (it == data_.end()) return nullptr; return std::any_cast<T>(&it->second); } template<typename T> void SetLocked(std::string const &tag, T const &value) { // Use this only if you're holding the lock yourself. data_[tag] = value; } // Note: use of (lowercase) lock and unlock means you can create scoped // locks with the standard lock classes. // e.g. std::lock_guard<RPiController::Metadata> lock(metadata) void lock() { mutex_.lock(); } void unlock() { mutex_.unlock(); } private: mutable std::mutex mutex_; std::map<std::string, std::any> data_; }; } // namespace RPiController