[libcamera-devel] [PATCH 07/10] libcamera: camera_manager: Add method to unregister a camera
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jan 24 11:16:48 CET 2019
The new removeCamera() method is meant to be used by pipeline handlers
to unregister a camera in case of device disconnection.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
include/libcamera/camera_manager.h | 1 +
src/libcamera/camera_manager.cpp | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
index 45e72df0ef65..56dbd26f64db 100644
--- a/include/libcamera/camera_manager.h
+++ b/include/libcamera/camera_manager.h
@@ -28,6 +28,7 @@ public:
std::shared_ptr<Camera> get(const std::string &name);
void addCamera(std::shared_ptr<Camera> camera);
+ void removeCamera(Camera *camera);
static CameraManager *instance();
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
index 3eccf20c4ce9..f90201ade18b 100644
--- a/src/libcamera/camera_manager.cpp
+++ b/src/libcamera/camera_manager.cpp
@@ -191,6 +191,27 @@ void CameraManager::addCamera(std::shared_ptr<Camera> camera)
cameras_.push_back(std::move(camera));
}
+/**
+ * \brief Remove a camera from the camera manager
+ * \param[in] camera The camera to be removed
+ *
+ * This function is called by pipeline handlers to unregister cameras from the
+ * camera manager. Unregistered cameras won't be reported anymore by the
+ * cameras() and get() calls, but references may still exist in applications.
+ */
+void CameraManager::removeCamera(Camera *camera)
+{
+ for (auto iter = cameras_.begin(); iter != cameras_.end(); ++iter) {
+ if (iter->get() == camera) {
+ LOG(Camera, Debug)
+ << "Unregistering camera '"
+ << camera->name() << "'";
+ cameras_.erase(iter);
+ return;
+ }
+ }
+}
+
/**
* \brief Retrieve the camera manager instance
*
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list