[PATCH v2 1/2] libcamera: pipeline: Add a get factory by name helper
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Wed Mar 20 13:40:36 CET 2024
Hi Julien
On Fri, Mar 08, 2024 at 12:00:55PM +0100, Julien Vuillaumier wrote:
A commit message is required.
What about something alone the lines of
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>
> ---
> 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..a821ab84 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;
> + else
No need for an else here, as you've return here above
> + return nullptr;
> +}
> +
With the above proposed fixes:
Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> /**
> * \class PipelineHandlerFactory
> * \brief Registration of PipelineHandler classes and creation of instances
> --
> 2.34.1
>
More information about the libcamera-devel
mailing list