[libcamera-devel] [PATCH 5/8] ipa: module: Add getAlgorithm() method

Daniel Semkowicz dse at thaumatec.com
Thu Jun 30 16:35:40 CEST 2022


This function allows to get pointer to the algorithm of specific type
from the list of loaded algorithms.

Signed-off-by: Daniel Semkowicz <dse at thaumatec.com>
---
 src/ipa/libipa/module.cpp |  7 +++++++
 src/ipa/libipa/module.h   | 17 +++++++++++++++++
 2 files changed, 24 insertions(+)

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
@@ -83,6 +83,13 @@ namespace ipa {
  * \return The list of instantiated algorithms
  */
 
+/**
+ * \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
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();
-- 
2.34.1



More information about the libcamera-devel mailing list