summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-02-28 13:15:09 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-03-01 15:45:09 +0200
commitb581b9576abd6cfde9c703b48ba1ab1e48985e6d (patch)
treeada6fcfed2793725601036776db299888924aec1 /src
parent61a62ddbd8cda88f20ea26f110aa7041b47b0de7 (diff)
libcamera: pipeline_handler: Make pipeline-specific data mandatory
Mandate creationg of pipeline-specific data by pipeline handlers. This allows simplifying the API by passing the pipeline-specific data to the registerCamera() method and removing the separate setCameraData() method. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/include/pipeline_handler.h4
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp3
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp4
-rw-r--r--src/libcamera/pipeline/vimc.cpp4
-rw-r--r--src/libcamera/pipeline_handler.cpp56
5 files changed, 15 insertions, 56 deletions
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index a86ba696..2a426039 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -63,11 +63,11 @@ public:
virtual int queueRequest(Camera *camera, Request *request) = 0;
protected:
- void registerCamera(std::shared_ptr<Camera> camera);
+ void registerCamera(std::shared_ptr<Camera> camera,
+ std::unique_ptr<CameraData> data);
void hotplugMediaDevice(MediaDevice *media);
CameraData *cameraData(const Camera *camera);
- void setCameraData(const Camera *camera, std::unique_ptr<CameraData> data);
CameraManager *manager_;
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 70c8db1b..79dbfa13 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -406,8 +406,7 @@ void PipelineHandlerIPU3::registerCameras()
if (ret)
continue;
- setCameraData(camera.get(), std::move(data));
- registerCamera(std::move(camera));
+ registerCamera(std::move(camera), std::move(data));
LOG(IPU3, Info)
<< "Registered Camera[" << numCameras << "] \""
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 167e0533..9e8c7c05 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -202,9 +202,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
/* Create and register the camera. */
std::set<Stream *> streams{ &data->stream_ };
std::shared_ptr<Camera> camera = Camera::create(this, media_->model(), streams);
-
- setCameraData(camera.get(), std::move(data));
- registerCamera(std::move(camera));
+ registerCamera(std::move(camera), std::move(data));
/* Enable hot-unplug notifications. */
hotplugMediaDevice(media_.get());
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index ad01ce49..2051c14c 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -202,9 +202,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
std::set<Stream *> streams{ &data->stream_ };
std::shared_ptr<Camera> camera = Camera::create(this, "VIMC Sensor B",
streams);
-
- setCameraData(camera.get(), std::move(data));
- registerCamera(std::move(camera));
+ registerCamera(std::move(camera), std::move(data));
return true;
}
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index ac1acea5..54f23794 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -247,20 +247,18 @@ PipelineHandler::~PipelineHandler()
/**
* \brief Register a camera to the camera manager and pipeline handler
* \param[in] camera The camera to be added
+ * \param[in] data Pipeline-specific data for the camera
*
* This method is called by pipeline handlers to register the cameras they
- * handle with the camera manager. If no CameraData has been associated with
- * the camera with setCameraData() by the pipeline handler, the method creates
- * a default CameraData instance for the \a camera.
+ * handle with the camera manager. It associates the pipeline-specific \a data
+ * with the camera, for later retrieval with cameraData(). Ownership of \a data
+ * is transferred to the PipelineHandler.
*/
-void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera)
+void PipelineHandler::registerCamera(std::shared_ptr<Camera> camera,
+ std::unique_ptr<CameraData> data)
{
- if (!cameraData_.count(camera.get())) {
- std::unique_ptr<CameraData> data = utils::make_unique<CameraData>(this);
- setCameraData(camera.get(), std::move(data));
- }
-
- cameraData(camera.get())->camera_ = camera.get();
+ data->camera_ = camera.get();
+ cameraData_[camera.get()] = std::move(data);
cameras_.push_back(camera);
manager_->addCamera(std::move(camera));
}
@@ -325,52 +323,18 @@ void PipelineHandler::disconnect()
* \brief Retrieve the pipeline-specific data associated with a Camera
* \param camera The camera whose data to retrieve
*
- * \return A pointer to the pipeline-specific data set with setCameraData().
+ * \return A pointer to the pipeline-specific data passed to registerCamera().
* The returned pointer is a borrowed reference and is guaranteed to remain
* valid until the pipeline handler is destroyed. It shall not be deleted
* manually by the caller.
*/
CameraData *PipelineHandler::cameraData(const Camera *camera)
{
- if (!cameraData_.count(camera)) {
- LOG(Pipeline, Error)
- << "Cannot get data associated with camera "
- << camera->name();
- return nullptr;
- }
-
+ ASSERT(cameraData_.count(camera));
return cameraData_[camera].get();
}
/**
- * \brief Set pipeline-specific data for the camera
- * \param camera The camera to associate data to
- * \param data The pipeline-specific data
- *
- * This method allows pipeline handlers to associate pipeline-specific
- * information with \a camera. Ownership of \a data is transferred to
- * the PipelineHandler.
- *
- * Pipeline-specific data can only be set once, and shall be set before
- * registering the camera with registerCamera(). Any attempt to call this
- * method more than once for the same camera, or to call it after registering
- * the camera, will not change the pipeline-specific data.
- *
- * The data can be retrieved by pipeline handlers using the cameraData() method.
- */
-void PipelineHandler::setCameraData(const Camera *camera,
- std::unique_ptr<CameraData> data)
-{
- if (cameraData_.find(camera) != cameraData_.end()) {
- LOG(Pipeline, Error)
- << "Replacing data associated with a camera is forbidden";
- return;
- }
-
- cameraData_[camera] = std::move(data);
-}
-
-/**
* \var PipelineHandler::manager_
* \brief The Camera manager associated with the pipeline handler
*