From patchwork Thu Jan 24 10:16:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 362 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6ADC660C80 for ; Thu, 24 Jan 2019 11:16:59 +0100 (CET) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 01E4723A; Thu, 24 Jan 2019 11:16:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1548325019; bh=L6Pj4vgVp1yJwUojTA335EVrDk1aMDHwLJvuo0r7JQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qT8cygdgIbS4xGjJUEkkeAG49W7qD+wh0tMHtCo30nPE4wuEvnzZhInSGcp9gG3eZ 5vdlJhx4UWDlSEdghBqNGqJW+yfNnL82cuhsd361vpPwGZXgBkUDZ6FSfFOsbl28vR RwM6S2y4qvDAv2VwJjZ7J/98oo2akEdAvioCM4P4= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Thu, 24 Jan 2019 12:16:48 +0200 Message-Id: <20190124101651.9993-8-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190124101651.9993-1-laurent.pinchart@ideasonboard.com> References: <20190124101651.9993-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 07/10] libcamera: camera_manager: Add method to unregister a camera X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jan 2019 10:17:00 -0000 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 --- 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 get(const std::string &name); void addCamera(std::shared_ptr 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) 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 *