summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ipa/libipa/module.cpp7
-rw-r--r--src/ipa/libipa/module.h17
2 files changed, 24 insertions, 0 deletions
diff --git a/src/ipa/libipa/module.cpp b/src/ipa/libipa/module.cpp
index 77352104..7c0680fd 100644
--- a/src/ipa/libipa/module.cpp
+++ b/src/ipa/libipa/module.cpp
@@ -84,6 +84,13 @@ namespace ipa {
*/
/**
+ * \fn Module::getAlgorithm()
+ * \brief Find and return the algorithm of requested type
+ * \tparam AlgoType Algorithm type you want to retrieve
+ * \return Pointer to the algorithm if found, else nullptr
+ */
+
+/**
* \fn Module::createAlgorithms()
* \brief Create algorithms from YAML configuration data
* \param[in] context The IPA context
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();