[PATCH v3 1/2] libcamera: pipeline: Add a get factory by name helper

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Apr 23 10:58:52 CEST 2024


Quoting Julien Vuillaumier (2024-03-27 17:27:30)
> Add a static helper to the PipelineHandlerFactoryBase class to
> allow retrieving a pipeline by name.
> 
> Signed-off-by: Julien Vuillaumier <julien.vuillaumier at nxp.com>
> Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> ---
>  include/libcamera/internal/pipeline_handler.h |  1 +
>  src/libcamera/pipeline_handler.cpp            | 22 +++++++++++++++++++
>  2 files changed, 23 insertions(+)
> 
> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
> index c96944f4..19361a40 100644
> --- a/include/libcamera/internal/pipeline_handler.h
> +++ b/include/libcamera/internal/pipeline_handler.h
> @@ -114,6 +114,7 @@ public:
>         const std::string &name() const { return name_; }
>  
>         static std::vector<PipelineHandlerFactoryBase *> &factories();
> +       static const PipelineHandlerFactoryBase *getFactoryByName(const std::string &name);
>  
>  private:
>         static void registerType(PipelineHandlerFactoryBase *factory);
> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
> index 29e0c98a..c926f454 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -794,6 +794,28 @@ std::vector<PipelineHandlerFactoryBase *> &PipelineHandlerFactoryBase::factories
>         return factories;
>  }
>  
> +/**
> + * \brief Return the factory for the pipeline handler with name \a name
> + * \param[in] name The pipeline handler name
> + * \return The factory of the pipeline with name \a name, or nullptr if not found
> + */
> +const PipelineHandlerFactoryBase *PipelineHandlerFactoryBase::getFactoryByName(const std::string &name)
> +{
> +       const std::vector<PipelineHandlerFactoryBase *> &factories =
> +               PipelineHandlerFactoryBase::factories();
> +
> +       auto iter = std::find_if(factories.begin(),
> +                                factories.end(),
> +                                [&name](const PipelineHandlerFactoryBase *f) {
> +                                       return f->name() == name;
> +                                });
> +
> +       if (iter != factories.end())
> +               return *iter;
> +
> +       return nullptr;
> +}
> +
>  /**
>   * \class PipelineHandlerFactory
>   * \brief Registration of PipelineHandler classes and creation of instances
> -- 
> 2.34.1
>


More information about the libcamera-devel mailing list