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>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -505,6 +505,12 @@ CameraData *PipelineHandler::cameraData(const Camera *camera)
|
||||
* constant for the whole lifetime of the pipeline handler.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \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
|
||||
@@ -582,6 +588,17 @@ std::vector<PipelineHandlerFactory *> &PipelineHandlerFactory::factories()
|
||||
return 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
|
||||
|
||||
Reference in New Issue
Block a user