From 889726097613ae5ed4d83a6fd0cc3b0b562f8659 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 24 Jan 2019 01:55:17 +0200 Subject: libcamera: camera_manager: Add method to unregister a camera MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Niklas Söderlund --- src/libcamera/camera_manager.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/libcamera/camera_manager.cpp') diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 3eccf20c..f90201ad 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -191,6 +191,27 @@ void CameraManager::addCamera(std::shared_ptr 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 * -- cgit v1.2.1