{"id":2447,"url":"https://patchwork.libcamera.org/api/1.1/patches/2447/?format=json","web_url":"https://patchwork.libcamera.org/patch/2447/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20191223072620.13022-5-paul.elder@ideasonboard.com>","date":"2019-12-23T07:26:18","name":"[libcamera-devel,v3,4/6] libcamera: camera_manager: allow retrieving cameras by devnum","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"d5399fc00b9f80e3b168bbe473248c066b2fe6e3","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/1.1/people/17/?format=json","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/2447/mbox/","series":[{"id":592,"url":"https://patchwork.libcamera.org/api/1.1/series/592/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=592","date":"2019-12-23T07:26:14","name":"V4L2 compatibility layer","version":3,"mbox":"https://patchwork.libcamera.org/series/592/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/2447/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/2447/checks/","tags":{},"headers":{"Return-Path":"<paul.elder@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4D2F36046D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Dec 2019 08:26:51 +0100 (CET)","from neptunite.amanokami.net (173-16-160-11.client.mchsi.com\n\t[173.16.160.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6E187330;\n\tMon, 23 Dec 2019 08:26:50 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1577086011;\n\tbh=4IEUMXY74vjJC71TPRtV2Nlq+V2SOF9HiN37jWgnzk4=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=OvosLaZqbCMklTBBxELeY0WF+bc93HeDN2aBDCRPg3kohvJI+cxPAbrFH48KRkLhm\n\t/xNIFvQJvC5R3kYz9aEbh1CyeHHfgW/ov8Mx4nx73lj5Tix6LjpYDBcgcF549fAveC\n\tcbrHSC34cMSrvff1B+uP28xCvytK3MAhoftsG7Qo=","From":"Paul Elder <paul.elder@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Mon, 23 Dec 2019 01:26:18 -0600","Message-Id":"<20191223072620.13022-5-paul.elder@ideasonboard.com>","X-Mailer":"git-send-email 2.23.0","In-Reply-To":"<20191223072620.13022-1-paul.elder@ideasonboard.com>","References":"<20191223072620.13022-1-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 4/6] libcamera: camera_manager: allow\n\tretrieving cameras by devnum","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>","X-List-Received-Date":"Mon, 23 Dec 2019 07:26:51 -0000"},"content":"Expose a method to retrieve Cameras by devnum. The map of devnum to\nCamera is gathered from all PipelineHandlers. This method is mainly for\nthe V4L2 compatibility layer, in order to match V4L2 devices to\nlibcamera Cameras.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\n\n---\nNew in v3\n---\n include/libcamera/camera_manager.h |  3 +++\n src/libcamera/camera_manager.cpp   | 24 ++++++++++++++++++++++++\n 2 files changed, 27 insertions(+)","diff":"diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h\nindex 8331898c..6ce63912 100644\n--- a/include/libcamera/camera_manager.h\n+++ b/include/libcamera/camera_manager.h\n@@ -7,6 +7,7 @@\n #ifndef __LIBCAMERA_CAMERA_MANAGER_H__\n #define __LIBCAMERA_CAMERA_MANAGER_H__\n \n+#include <map>\n #include <memory>\n #include <string>\n #include <vector>\n@@ -33,6 +34,7 @@ public:\n \n \tconst std::vector<std::shared_ptr<Camera>> &cameras() const { return cameras_; }\n \tstd::shared_ptr<Camera> get(const std::string &name);\n+\tstd::shared_ptr<Camera> get(dev_t devnum);\n \n \tvoid addCamera(std::shared_ptr<Camera> camera);\n \tvoid removeCamera(Camera *camera);\n@@ -46,6 +48,7 @@ private:\n \tstd::unique_ptr<DeviceEnumerator> enumerator_;\n \tstd::vector<std::shared_ptr<PipelineHandler>> pipes_;\n \tstd::vector<std::shared_ptr<Camera>> cameras_;\n+\tstd::map<dev_t, std::shared_ptr<Camera>> camerasByDevnum_;\n \n \tstatic const std::string version_;\n \tstatic CameraManager *self_;\ndiff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\nindex 7c6f72bb..1354df4c 100644\n--- a/src/libcamera/camera_manager.cpp\n+++ b/src/libcamera/camera_manager.cpp\n@@ -121,6 +121,11 @@ int CameraManager::start()\n \t\t}\n \t}\n \n+\tfor (std::shared_ptr<PipelineHandler> pipe : pipes_) {\n+\t\tconst std::map<dev_t, std::weak_ptr<Camera>> devMap = pipe->camerasByDevnum();\n+\t\tcamerasByDevnum_.insert(devMap.begin(), devMap.end());\n+\t}\n+\n \t/* TODO: register hot-plug callback here */\n \n \treturn 0;\n@@ -180,6 +185,25 @@ std::shared_ptr<Camera> CameraManager::get(const std::string &name)\n \treturn nullptr;\n }\n \n+/**\n+ * \\brief Get a camera based on devnum\n+ * \\param[in] devnum Device number of camera to get\n+ *\n+ * Before calling this function the caller is responsible for ensuring that\n+ * the camera manager is running.\n+ *\n+ * \\return Shared pointer to Camera object or nullptr if camera not found\n+ */\n+std::shared_ptr<Camera> CameraManager::get(dev_t devnum)\n+{\n+\tauto iter = camerasByDevnum_.find(devnum);\n+\n+\tif (iter == camerasByDevnum_.end())\n+\t\treturn nullptr;\n+\n+\treturn iter->second;\n+}\n+\n /**\n  * \\brief Add a camera to the camera manager\n  * \\param[in] camera The camera to be added\n","prefixes":["libcamera-devel","v3","4/6"]}