[libcamera-devel] [PATCH v2 05/11] ipa: module: Add getAlgorithm() method
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Jul 15 02:44:45 CEST 2022
On Thu, Jul 14, 2022 at 08:35:28PM +0200, Jacopo Mondi wrote:
> 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.
Depending on the outcome of the discussion in 06/11, this patch may not
be needed.
> 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();
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list