Message ID | 20190124101651.9993-8-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Laurent, Thanks for your work. On 2019-01-24 12:16:48 +0200, Laurent Pinchart wrote: > 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@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > --- > 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 > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
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 *
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@ideasonboard.com> --- include/libcamera/camera_manager.h | 1 + src/libcamera/camera_manager.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+)