diff options
Diffstat (limited to 'src/ipa/libipa/module.h')
-rw-r--r-- | src/ipa/libipa/module.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/ipa/libipa/module.h b/src/ipa/libipa/module.h index 4149a353..c4974635 100644 --- a/src/ipa/libipa/module.h +++ b/src/ipa/libipa/module.h @@ -10,6 +10,7 @@ #include <list> #include <memory> #include <string> +#include <typeinfo> #include <vector> #include <libcamera/base/log.h> @@ -43,6 +44,22 @@ public: return algorithms_; } + template<typename AlgoType> + AlgoType *getAlgorithm() const + { + auto isSameType = [](const std::unique_ptr<Algorithm<Module>> &algoPtr) { + return typeid(*algoPtr.get()) == typeid(AlgoType); + }; + + auto result = std::find_if(begin(algorithms_), end(algorithms_), isSameType); + + if (result != std::end(algorithms_)) { + return static_cast<AlgoType *>(result->get()); + } else { + return nullptr; + } + } + int createAlgorithms(Context &context, const YamlObject &algorithms) { const auto &list = algorithms.asList(); |