[{"id":27369,"web_url":"https://patchwork.libcamera.org/comment/27369/","msgid":"<20230616140918.GA27857@pendragon.ideasonboard.com>","date":"2023-06-16T14:09:18","subject":"Re: [libcamera-devel] [PATCH 2/2] libcamera: CameraManager: Remove\n\t::get(dev_t)","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nThank you for the patch.\n\nOn Thu, Jun 15, 2023 at 11:51:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> The CameraManager::get(dev_t) implementation was provided only for the\n> V4L2 Adaptation layer. This has now been replaced with the use of the\n> public SystemDevices property.\n> \n> Remove the deprecated function entirely, along with the camerasByDevnum_\n> map which was only used to support this functionality.\n> \n> This is a clear (and intentional) breakage in both the API and ABI.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/camera_manager.h          |  1 -\n>  include/libcamera/internal/camera_manager.h |  3 +-\n>  src/libcamera/camera_manager.cpp            | 42 ---------------------\n>  3 files changed, 1 insertion(+), 45 deletions(-)\n> \n> diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\n> index 9767acc42c89..1a891cacf26a 100644\n> --- a/include/libcamera/camera_manager.h\n> +++ b/include/libcamera/camera_manager.h\n> @@ -32,7 +32,6 @@ public:\n>  \n>  \tstd::vector<std::shared_ptr<Camera>> cameras() const;\n>  \tstd::shared_ptr<Camera> get(const std::string &id);\n> -\tstd::shared_ptr<Camera> get(dev_t devnum);\n>  \n>  \tstatic const std::string &version() { return version_; }\n>  \n> diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h\n> index cdf009a9c626..2aaf4acab07a 100644\n> --- a/include/libcamera/internal/camera_manager.h\n> +++ b/include/libcamera/internal/camera_manager.h\n> @@ -42,11 +42,10 @@ public:\n>  \t * This mutex protects\n>  \t *\n>  \t * - initialized_ and status_ during initialization\n> -\t * - cameras_ and camerasByDevnum_ after initialization\n> +\t * - cameras_ after initialization\n>  \t */\n>  \tmutable Mutex mutex_;\n>  \tstd::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n> -\tstd::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n>  \n>  protected:\n>  \tvoid run() override;\n> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\n> index 31d45c42fde0..cd81663281dd 100644\n> --- a/src/libcamera/camera_manager.cpp\n> +++ b/src/libcamera/camera_manager.cpp\n> @@ -178,15 +178,9 @@ void CameraManager::Private::addCamera(std::shared_ptr<Camera> camera)\n>  \t\t}\n>  \t}\n>  \n> -\tauto devnums = camera->properties()\n> -\t\t\t       .get(properties::SystemDevices)\n> -\t\t\t       .value_or(Span<int64_t>{});\n> -\n>  \tcameras_.push_back(std::move(camera));\n>  \n>  \tunsigned int index = cameras_.size() - 1;\n> -\tfor (dev_t devnum : devnums)\n> -\t\tcamerasByDevnum_[devnum] = cameras_[index];\n>  \n>  \t/* Report the addition to the public signal */\n>  \tCameraManager *const o = LIBCAMERA_O_PTR();\n> @@ -219,13 +213,6 @@ void CameraManager::Private::removeCamera(std::shared_ptr<Camera> camera)\n>  \tLOG(Camera, Debug)\n>  \t\t<< \"Unregistering camera '\" << camera->id() << \"'\";\n>  \n> -\tauto iter_d = std::find_if(camerasByDevnum_.begin(), camerasByDevnum_.end(),\n> -\t\t\t\t   [camera](const std::pair<dev_t, std::weak_ptr<Camera>> &p) {\n> -\t\t\t\t\t   return p.second.lock().get() == camera.get();\n> -\t\t\t\t   });\n> -\tif (iter_d != camerasByDevnum_.end())\n> -\t\tcamerasByDevnum_.erase(iter_d);\n> -\n>  \tcameras_.erase(iter);\n>  \n>  \t/* Report the removal to the public signal */\n> @@ -366,35 +353,6 @@ std::shared_ptr<Camera> CameraManager::get(const std::string &id)\n>  \treturn nullptr;\n>  }\n>  \n> -/**\n> - * \\brief Retrieve a camera based on device number\n> - * \\param[in] devnum Device number of camera to get\n> - *\n> - * This function is meant solely for the use of the V4L2 compatibility\n> - * layer, to map device nodes to Camera instances. Applications shall\n> - * not use it and shall instead retrieve cameras by name.\n> - *\n> - * Before calling this function the caller is responsible for ensuring that\n> - * the camera manager is running.\n> - *\n> - * \\context This function is \\threadsafe.\n> - *\n> - * \\return Shared pointer to Camera object, which is empty if the camera is\n> - * not found\n> - */\n> -std::shared_ptr<Camera> CameraManager::get(dev_t devnum)\n> -{\n> -\tPrivate *const d = _d();\n> -\n> -\tMutexLocker locker(d->mutex_);\n> -\n> -\tauto iter = d->camerasByDevnum_.find(devnum);\n> -\tif (iter == d->camerasByDevnum_.end())\n> -\t\treturn nullptr;\n> -\n> -\treturn iter->second.lock();\n> -}\n> -\n>  /**\n>   * \\var CameraManager::cameraAdded\n>   * \\brief Notify of a new camera added to the system","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8833BC3291\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 16 Jun 2023 14:09:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1A5DE628BC;\n\tFri, 16 Jun 2023 16:09:20 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CF128628AE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 16 Jun 2023 16:09:18 +0200 (CEST)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9D451C67;\n\tFri, 16 Jun 2023 16:08:46 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1686924560;\n\tbh=YaQp18R9kMeVy31cHFSoM450ocSUezCe6JuCAAB3tOI=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=cURpe90LR8Ck8ezi70nPS5/6uYmVWvjB+OGAj544yvnISPrEArZMYAApLk9QbJhQ6\n\t3wP8tKyMcjpe9mo/UPZh/xExrmZgo3DDZcZK7dUf711pkQDYj5cdfRdKk+cgIPlHPA\n\tsfPAWjC3wMt0W0wi/8Ye3kPFXs8riCoO4EvJSNRZAmyr2g1e+OUmMz5N+GbPzjtBrd\n\t1XlUHBgrqTD4YC3F3Cg3KzEsKisl7TOHXXRtChVNJi+SpIzH4rntLvhlRYD0LZb4s+\n\tpBDMFXEy9d9C5SBOT+ObYPHFJnosh3oGgBrzi/zYhEF/c4Ypfmywc29zLrDEQ+gXD1\n\tVllr7XYUOnyyQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1686924526;\n\tbh=YaQp18R9kMeVy31cHFSoM450ocSUezCe6JuCAAB3tOI=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=cNysyWx01INqfsV37dEBu3IeLHQNEpmsWKYWhIUeNUTgYsLsPBtH4A2ib+k/z9IwM\n\tbyat73BAqfLwCjdjx4gbpcEhHArHn8umxdRuDdur81evHD6jcjeJ0S0OoOP/Nx7nKG\n\tjREX2ocF6rtyBCQ1ENt1b1wOoNGIH04pJ80zFIko="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"cNysyWx0\"; dkim-atps=neutral","Date":"Fri, 16 Jun 2023 17:09:18 +0300","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20230616140918.GA27857@pendragon.ideasonboard.com>","References":"<20230615225133.622612-1-kieran.bingham@ideasonboard.com>\n\t<20230615225133.622612-3-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230615225133.622612-3-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 2/2] libcamera: CameraManager: Remove\n\t::get(dev_t)","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]