[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