From 124aaffde0b25d847442876beb16600d448d9feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Tue, 22 Jan 2019 16:58:40 +0100 Subject: libcamera: camera: Add disconnection notification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As camera object have the potential to outlive the hardware they represent, there is a need to inform the camera that the underlying device has been disconnected, and in turn to notify applications. Implement a disconnection notification mechanism that can be used by pipeline handlers to notify the camera of disconnection. The camera then block all new API calls and emit the disconnected signal. Signed-off-by: Niklas Söderlund Signed-off-by: Laurent Pinchart --- src/libcamera/camera.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/libcamera/camera.cpp') diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 3a531c7e..9cec2892 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -34,6 +34,8 @@ namespace libcamera { +LOG_DECLARE_CATEGORY(Camera) + /** * \class Camera * \brief Camera device @@ -87,6 +89,18 @@ const std::string &Camera::name() const return name_; } +/** + * \var Camera::disconnected + * \brief Signal emitted when the camera is disconnected from the system + * + * This signal is emitted when libcamera detects that the cameera has been + * removed from the system. For hot-pluggable devices this is usually caused by + * physical device disconnection. The media device is passed as a parameter. + * + * As soon as this signal is emitted the camera instance will refuse all new + * application API calls by returning errors immediately. + */ + Camera::Camera(PipelineHandler *pipe, const std::string &name) : pipe_(pipe->shared_from_this()), name_(name) { @@ -96,4 +110,21 @@ Camera::~Camera() { } +/** + * \brief Notify camera disconnection + * + * This method is used to notify the camera instance that the underlying + * hardware has been unplugged. In response to the disconnection the camera + * instance notifies the application by emitting the #disconnected signal, and + * ensures that all new calls to the application-facing Camera API return an + * error immediately. + */ +void Camera::disconnect() +{ + LOG(Camera, Debug) << "Disconnecting camera " << name_; + + /** \todo Block API calls when they will be implemented. */ + disconnected.emit(this); +} + } /* namespace libcamera */ -- cgit v1.2.1