{"id":18739,"url":"https://patchwork.libcamera.org/api/1.1/patches/18739/?format=json","web_url":"https://patchwork.libcamera.org/patch/18739/","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":"<20230615172608.378258-3-kieran.bingham@ideasonboard.com>","date":"2023-06-15T17:26:05","name":"[libcamera-devel,v4,2/5] libcamera: camera_manager: Move private implementation to internal","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"efb03128d66f070294f33fe4f05460b9275abf8c","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/1.1/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/18739/mbox/","series":[{"id":3925,"url":"https://patchwork.libcamera.org/api/1.1/series/3925/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3925","date":"2023-06-15T17:26:03","name":"libcamera: Add new Camera devices property","version":4,"mbox":"https://patchwork.libcamera.org/series/3925/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/18739/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/18739/checks/","tags":{},"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 B6295C322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Jun 2023 17:26:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9AE82628C5;\n\tThu, 15 Jun 2023 19:26:19 +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 4C34D61E4F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Jun 2023 19:26:16 +0200 (CEST)","from Monstersaurus.local\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A5ABF547;\n\tThu, 15 Jun 2023 19:25:44 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1686849979;\n\tbh=ILfgxCfABmcZN1IjyphsLSa4qnildleu7G4z01OhYdk=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=ngmUa0p6RBRcCNzMgJaE4jt3bsjHjmXc4m7W16Viu0K9pZIEXxmhJZeyVUNYmFTBS\n\tnMG1LUUdCid/8DSo7L0g1PA9cBPrI8GTTq4gAWPS+WyDZZXe+u5AU/Y7ErlKK9JcnI\n\tGab5G5YVpXdp5SC8mcobkuzxkPLqQKPbT/GG8KTBhn5fvKUYIyJKcc14qOkP9nP6T3\n\tyljvS597ktbz+JPtCz/3tedz8KtdInaj1UCHORVKhg1S042QdS5uMA4EX6N0a+kdv+\n\tKejJd6AYiS05AyhWVOy8g40G3l2yZD7ZY7ruoWePHqhwxCw90LhIvEgsEJ4NF1MC6t\n\t6Mubcw6itwCag==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1686849944;\n\tbh=ILfgxCfABmcZN1IjyphsLSa4qnildleu7G4z01OhYdk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=q6+ZvJ4vLcRwlLbmBqDQSK1zS3G4g4UcmaHob/KYJmgsnKVYolhSi8OG7mz3E6xQ8\n\tw4CX/1pcYXArNZ2L2B6qh/HtQ0jKA3giVjY/pvO/nFQL4YE1SS3vktRFC5i1MZ8VPp\n\tAMfteKKc6dvElZzXYSysatwEXCdI+4mol8HRLr3Y="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"q6+ZvJ4v\"; dkim-atps=neutral","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Thu, 15 Jun 2023 18:26:05 +0100","Message-Id":"<20230615172608.378258-3-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20230615172608.378258-1-kieran.bingham@ideasonboard.com>","References":"<20230615172608.378258-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v4 2/5] libcamera: camera_manager: Move\n\tprivate implementation to internal","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tAshok Sidipotu <ashok.sidipotu@collabora.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The CameraManager makes use of the Extensible pattern to provide an\ninternal private implementation that is not exposed in the public API.\n\nMove the Private declaration to an internal header to make it available\nfrom other internal components in preperation for reducing the surface\narea of the public interface of the CameraManager.\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nTested-by: Ashok Sidipotu <ashok.sidipotu@collabora.com>\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n---\n\nv4\n - Fix includes\n - Fix sort order of header in meson.build\n - Fix doxygen file references\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/libcamera/internal/camera_manager.h | 70 +++++++++++++++++++++\n include/libcamera/internal/meson.build      |  1 +\n src/libcamera/camera_manager.cpp            | 59 +++--------------\n 3 files changed, 80 insertions(+), 50 deletions(-)\n create mode 100644 include/libcamera/internal/camera_manager.h","diff":"diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h\nnew file mode 100644\nindex 000000000000..96a83bd7ef3c\n--- /dev/null\n+++ b/include/libcamera/internal/camera_manager.h\n@@ -0,0 +1,70 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2023, Ideas on Board Oy.\n+ *\n+ * camera_manager.h - Camera manager private data\n+ */\n+\n+#pragma once\n+\n+#include <libcamera/camera_manager.h>\n+\n+#include <map>\n+#include <memory>\n+#include <sys/types.h>\n+#include <vector>\n+\n+#include <libcamera/base/class.h>\n+#include <libcamera/base/mutex.h>\n+#include <libcamera/base/thread.h>\n+#include <libcamera/base/thread_annotations.h>\n+\n+#include \"libcamera/internal/device_enumerator.h\"\n+#include \"libcamera/internal/ipa_manager.h\"\n+#include \"libcamera/internal/process.h\"\n+\n+namespace libcamera {\n+\n+class Camera;\n+\n+class CameraManager::Private : public Extensible::Private, public Thread\n+{\n+\tLIBCAMERA_DECLARE_PUBLIC(CameraManager)\n+\n+public:\n+\tPrivate();\n+\n+\tint start();\n+\tvoid addCamera(std::shared_ptr<Camera> camera,\n+\t\t       const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);\n+\tvoid removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n+\n+\t/*\n+\t * This mutex protects\n+\t *\n+\t * - initialized_ and status_ during initialization\n+\t * - cameras_ and camerasByDevnum_ 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+\n+private:\n+\tint init();\n+\tvoid createPipelineHandlers();\n+\tvoid cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);\n+\n+\tConditionVariable cv_;\n+\tbool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n+\tint status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n+\n+\tstd::unique_ptr<DeviceEnumerator> enumerator_;\n+\n+\tIPAManager ipaManager_;\n+\tProcessManager processManager_;\n+};\n+\n+} /* namespace libcamera */\ndiff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\nindex d75088059996..4b2756a4a251 100644\n--- a/include/libcamera/internal/meson.build\n+++ b/include/libcamera/internal/meson.build\n@@ -15,6 +15,7 @@ libcamera_internal_headers = files([\n     'camera.h',\n     'camera_controls.h',\n     'camera_lens.h',\n+    'camera_manager.h',\n     'camera_sensor.h',\n     'camera_sensor_properties.h',\n     'control_serializer.h',\ndiff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\nindex c1edefdad160..882b2d4b234c 100644\n--- a/src/libcamera/camera_manager.cpp\n+++ b/src/libcamera/camera_manager.cpp\n@@ -5,27 +5,26 @@\n  * camera_manager.h - Camera management\n  */\n \n-#include <libcamera/camera_manager.h>\n-\n-#include <map>\n-\n-#include <libcamera/camera.h>\n+#include \"libcamera/internal/camera_manager.h\"\n \n #include <libcamera/base/log.h>\n-#include <libcamera/base/mutex.h>\n-#include <libcamera/base/thread.h>\n #include <libcamera/base/utils.h>\n \n+#include <libcamera/camera.h>\n+\n #include \"libcamera/internal/device_enumerator.h\"\n-#include \"libcamera/internal/ipa_manager.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n-#include \"libcamera/internal/process.h\"\n \n /**\n- * \\file camera_manager.h\n+ * \\file libcamera/camera_manager.h\n  * \\brief The camera manager\n  */\n \n+/**\n+ * \\file libcamera/internal/camera_manager.h\n+ * \\brief Internal camera manager support\n+ */\n+\n /**\n  * \\brief Top-level libcamera namespace\n  */\n@@ -33,46 +32,6 @@ namespace libcamera {\n \n LOG_DEFINE_CATEGORY(Camera)\n \n-class CameraManager::Private : public Extensible::Private, public Thread\n-{\n-\tLIBCAMERA_DECLARE_PUBLIC(CameraManager)\n-\n-public:\n-\tPrivate();\n-\n-\tint start();\n-\tvoid addCamera(std::shared_ptr<Camera> camera,\n-\t\t       const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);\n-\tvoid removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_);\n-\n-\t/*\n-\t * This mutex protects\n-\t *\n-\t * - initialized_ and status_ during initialization\n-\t * - cameras_ and camerasByDevnum_ 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-\n-private:\n-\tint init();\n-\tvoid createPipelineHandlers();\n-\tvoid cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);\n-\n-\tConditionVariable cv_;\n-\tbool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n-\tint status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);\n-\n-\tstd::unique_ptr<DeviceEnumerator> enumerator_;\n-\n-\tIPAManager ipaManager_;\n-\tProcessManager processManager_;\n-};\n-\n CameraManager::Private::Private()\n \t: initialized_(false)\n {\n","prefixes":["libcamera-devel","v4","2/5"]}