summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Elder <paul.elder@ideasonboard.com>2019-06-04 20:27:45 -0400
committerPaul Elder <paul.elder@ideasonboard.com>2019-06-05 10:44:51 -0400
commit379a0a5dd8eba20fc8bc0bf5e5c4f126eb129dbf (patch)
treeba7b422a89aca8fca468f477253950947a02f27a /src
parent46ae1775b07222416bfe48557eb263d57a79031e (diff)
libcamera: pipeline: add name
In order to match an IPA module with a pipeline handler, the pipeline handler must have a name. Add a name attribute and getter to PipelineHandler such that it can automatically be defined by REGISTER_PIPELINE_HANDLER. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/include/pipeline_handler.h14
-rw-r--r--src/libcamera/pipeline_handler.cpp17
2 files changed, 30 insertions, 1 deletions
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 7da6df1a..84307e40 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -77,6 +77,8 @@ public:
bool completeBuffer(Camera *camera, Request *request, Buffer *buffer);
void completeRequest(Camera *camera, Request *request);
+ const char *name() const { return name_; }
+
protected:
void registerCamera(std::shared_ptr<Camera> camera,
std::unique_ptr<CameraData> data);
@@ -93,6 +95,10 @@ private:
std::vector<std::shared_ptr<MediaDevice>> mediaDevices_;
std::vector<std::weak_ptr<Camera>> cameras_;
std::map<const Camera *, std::unique_ptr<CameraData>> cameraData_;
+
+ const char *name_;
+
+ friend class PipelineHandlerFactory;
};
class PipelineHandlerFactory
@@ -108,6 +114,9 @@ public:
static void registerType(PipelineHandlerFactory *factory);
static std::vector<PipelineHandlerFactory *> &factories();
+protected:
+ void setInfo(PipelineHandler *handler, const char *name);
+
private:
std::string name_;
};
@@ -119,7 +128,10 @@ public: \
handler##Factory() : PipelineHandlerFactory(#handler) {} \
std::shared_ptr<PipelineHandler> create(CameraManager *manager) \
{ \
- return std::make_shared<handler>(manager); \
+ std::shared_ptr<handler> h = \
+ std::make_shared<handler>(manager); \
+ setInfo(h.get(), #handler); \
+ return h; \
} \
}; \
static handler##Factory global_##handler##Factory;
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index dd56907d..800931d8 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -506,6 +506,12 @@ CameraData *PipelineHandler::cameraData(const Camera *camera)
*/
/**
+ * \fn PipelineHandler::name()
+ * \brief Retrieve the pipeline handler name
+ * \return The pipeline handler name
+ */
+
+/**
* \class PipelineHandlerFactory
* \brief Registration of PipelineHandler classes and creation of instances
*
@@ -583,6 +589,17 @@ std::vector<PipelineHandlerFactory *> &PipelineHandlerFactory::factories()
}
/**
+ * \brief Set the information of a given pipeline handler
+ * \param[in] handler The handler whose info is to be set
+ * \param[in] name The name of the pipeline handler
+ */
+void PipelineHandlerFactory::setInfo(PipelineHandler *handler,
+ const char *name)
+{
+ handler->name_ = name;
+}
+
+/**
* \def REGISTER_PIPELINE_HANDLER
* \brief Register a pipeline handler with the pipeline handler factory
* \param[in] handler Class name of PipelineHandler derived class to register