[libcamera-devel] [PATCH v2 05/11] ipa: module: Add getAlgorithm() method
Jacopo Mondi
jacopo at jmondi.org
Thu Jul 14 20:35:28 CEST 2022
I'm not really expert of this part, this looks right, I'm only
surprised we didn't have one already.. let me cc Laurent which I
presume implemented the algorith registration mechinery.
On Wed, Jul 13, 2022 at 10:43:11AM +0200, Daniel Semkowicz via libcamera-devel wrote:
> 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;
> + }
if (result != std::end(algorithms_))
return static_cast<AlgoType *>(result->get());
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