Show a patch.

GET /api/patches/18622/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 18622,
    "url": "https://patchwork.libcamera.org/api/patches/18622/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/18622/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20230511225833.361699-2-kieran.bingham@ideasonboard.com>",
    "date": "2023-05-11T22:58:30",
    "name": "[libcamera-devel,v2,1/4] libcamera: camera_manager: Move private implementation to internal",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "05087fe017091c715ce2919a05c08428d4ceb25b",
    "submitter": {
        "id": 4,
        "url": "https://patchwork.libcamera.org/api/people/4/?format=api",
        "name": "Kieran Bingham",
        "email": "kieran.bingham@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/18622/mbox/",
    "series": [
        {
            "id": 3876,
            "url": "https://patchwork.libcamera.org/api/series/3876/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3876",
            "date": "2023-05-11T22:58:29",
            "name": "libcamera: Add new Camera devices property",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/3876/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/18622/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/18622/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 3FED7BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 11 May 2023 22:58:42 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E4CE2633A8;\n\tFri, 12 May 2023 00:58:41 +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 073006039E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 May 2023 00:58:39 +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 77086814;\n\tFri, 12 May 2023 00:58:30 +0200 (CEST)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1683845921;\n\tbh=PO+khrgkmgH0MRjDkkq/NgIqzlUH7vj7fUnEUdV3wik=;\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=plv/bNthNDPwNRAmEp+uu3SHgc3R/zm0iyBzVc0CVO7iSzGEvqxnlRGti9zbsriaN\n\trQp1SZ68NbdXtyyxsjUKEeDGVEVup5yGOO45Adkmg69rZF/9vzCEup8LRzt3dlC+Wk\n\tLb3BMMCzczwFIdry74AcT4J2wMnnsVg5exoU0wVdvKavBE3sTmUrMeNvTvBZxwbPMS\n\tStx/fOJqm4WI5sMrohqoBTe1WGmQALE+tUE27UqhVhjmJI+FL8voyMh8WAfFN0WY0l\n\tQzHIcCfD+iUtrEdBI/28NJ7jwR74uhnGDxPV59nwCLtmHCaha0NH5nlqtS43NGL+41\n\tlxFI9odyf+NMw==",
            "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1683845910;\n\tbh=PO+khrgkmgH0MRjDkkq/NgIqzlUH7vj7fUnEUdV3wik=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=tWHgPxEjluOcyJiHz1uObSraC01iA/Ha8OIl4byafctL7Ojje7jTTPGNMMaaFr2Mi\n\tzvMC3lIF6UBYYmYe2/gTxUcX9VLBMEflwurlFIJKjsvv6OjsRD7bsbrlchWtUrcdix\n\txQL/BxRzqf2TCiOQDIlkYR3jt5oX0Ysx0i4Wlssw="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"tWHgPxEj\"; dkim-atps=neutral",
        "To": "libcamera devel <libcamera-devel@lists.libcamera.org>",
        "Date": "Thu, 11 May 2023 23:58:30 +0100",
        "Message-Id": "<20230511225833.361699-2-kieran.bingham@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230511225833.361699-1-kieran.bingham@ideasonboard.com>",
        "References": "<20230511225833.361699-1-kieran.bingham@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 1/4] 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": "George Kiagiadakis <george.kiagiadakis@collabora.com>,\n\tRobert Mader <robert.mader@collabora.com>,\n\tWim Taymans <wtaymans@redhat.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 Camera Manager.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/libcamera/internal/camera_manager.h | 66 +++++++++++++++++++++\n include/libcamera/internal/meson.build      |  1 +\n src/libcamera/camera_manager.cpp            | 49 ++-------------\n 3 files changed, 71 insertions(+), 45 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..4bba3ac2eb29\n--- /dev/null\n+++ b/include/libcamera/internal/camera_manager.h\n@@ -0,0 +1,66 @@\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+#ifndef __LIBCAMERA_INTERNAL_CAMERA_MANAGER_H__\n+#define __LIBCAMERA_INTERNAL_CAMERA_MANAGER_H__\n+\n+#include <map>\n+\n+#include <libcamera/base/mutex.h>\n+#include <libcamera/base/thread.h>\n+\n+#include <libcamera/camera_manager.h>\n+\n+#include \"libcamera/internal/ipa_manager.h\"\n+#include \"libcamera/internal/process.h\"\n+\n+namespace libcamera {\n+\n+class DeviceEnumerator;\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 */\n+\n+#endif // __LIBCAMERA_INTERNAL_CAMERA_MANAGER_H__\ndiff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\nindex d75088059996..0028ed0dc27f 100644\n--- a/include/libcamera/internal/meson.build\n+++ b/include/libcamera/internal/meson.build\n@@ -13,6 +13,7 @@ libcamera_internal_headers = files([\n     'bayer_format.h',\n     'byte_stream_buffer.h',\n     'camera.h',\n+    'camera_manager.h',\n     'camera_controls.h',\n     'camera_lens.h',\n     'camera_sensor.h',\ndiff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp\nindex c1edefdad160..b95284ba5a80 100644\n--- a/src/libcamera/camera_manager.cpp\n+++ b/src/libcamera/camera_manager.cpp\n@@ -9,20 +9,19 @@\n \n #include <map>\n \n-#include <libcamera/camera.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/camera_manager.h\"\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@@ -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",
        "v2",
        "1/4"
    ]
}