Show a patch.

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

{
    "id": 12170,
    "url": "https://patchwork.libcamera.org/api/patches/12170/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/12170/",
    "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": "<20210503104152.34048-2-jacopo@jmondi.org>",
    "date": "2021-05-03T10:41:36",
    "name": "[libcamera-devel,v5,01/17] libcamera: controls: Add a function to merge two control lists",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "5f32fd2e2b80b6ce262279be84adebf491802d76",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": {
        "id": 14,
        "url": "https://patchwork.libcamera.org/api/users/14/?format=api",
        "username": "pinchartl",
        "first_name": "Laurent",
        "last_name": "Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/patch/12170/mbox/",
    "series": [
        {
            "id": 1994,
            "url": "https://patchwork.libcamera.org/api/series/1994/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1994",
            "date": "2021-05-03T10:41:35",
            "name": "Support SensorTimestamp metadata",
            "version": 5,
            "mbox": "https://patchwork.libcamera.org/series/1994/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/12170/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/12170/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 3DD57BDE78\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  3 May 2021 10:41:16 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8C7606891E;\n\tMon,  3 May 2021 12:41:13 +0200 (CEST)",
            "from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5B3EF60511\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 May 2021 12:41:12 +0200 (CEST)",
            "from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 27F86FF807\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  3 May 2021 10:41:11 +0000 (UTC)"
        ],
        "X-Originating-IP": "93.34.118.233",
        "From": "Jacopo Mondi <jacopo@jmondi.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Mon,  3 May 2021 12:41:36 +0200",
        "Message-Id": "<20210503104152.34048-2-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.31.1",
        "In-Reply-To": "<20210503104152.34048-1-jacopo@jmondi.org>",
        "References": "<20210503104152.34048-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v5 01/17] libcamera: controls: Add a\n\tfunction to merge two control lists",
        "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>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nAdd a new ControlList::merge() function to merge two control lists by\ncopying in the values in the list passed as parameters.\n\nThis can be used by pipeline handlers to merge metadata they populate\nwith metadata received from an IPA.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n[reimplement the function by not using std::unordered_map::merge()]\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n include/libcamera/controls.h |  2 ++\n src/libcamera/controls.cpp   | 30 ++++++++++++++++++++++++++++++\n 2 files changed, 32 insertions(+)",
    "diff": "diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\nindex 1a5690a5ccbe..1c9b37e617bc 100644\n--- a/include/libcamera/controls.h\n+++ b/include/libcamera/controls.h\n@@ -363,7 +363,9 @@ public:\n \n \tbool empty() const { return controls_.empty(); }\n \tstd::size_t size() const { return controls_.size(); }\n+\n \tvoid clear() { controls_.clear(); }\n+\tvoid merge(const ControlList &source);\n \n \tbool contains(const ControlId &id) const;\n \tbool contains(unsigned int id) const;\ndiff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\nindex c58ed3946f3b..d8f104e3734b 100644\n--- a/src/libcamera/controls.cpp\n+++ b/src/libcamera/controls.cpp\n@@ -874,6 +874,36 @@ ControlList::ControlList(const ControlInfoMap &infoMap, ControlValidator *valida\n  * \\brief Removes all controls from the list\n  */\n \n+/**\n+ * \\brief Merge the \\a source into the ControlList\n+ * \\param[in] source The ControlList to merge into this object\n+ *\n+ * Merging two control lists copies elements from the \\a source and inserts\n+ * them in *this. If the \\a source contains elements whose key is already\n+ * present in *this, then those elements are not overwritten.\n+ *\n+ * Only control lists created from the same ControlIdMap or ControlInfoMap may\n+ * be merged. Attempting to do otherwise results in undefined behaviour.\n+ *\n+ * \\todo Reimplement or implement an overloaded version which internally uses\n+ * std::unordered_map::merge() and accepts a non-cost argument.\n+ */\n+void ControlList::merge(const ControlList &source)\n+{\n+\tASSERT(idmap_ == source.idmap_);\n+\n+\tfor (const auto &ctrl : source) {\n+\t\tif (contains(ctrl.first)) {\n+\t\t\tconst ControlId *id = idmap_->at(ctrl.first);\n+\t\t\tLOG(Controls, Warning)\n+\t\t\t\t<< \"Control \" << id->name() << \" not overwritten\";\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tset(ctrl.first, ctrl.second);\n+\t}\n+}\n+\n /**\n  * \\brief Check if the list contains a control with the specified \\a id\n  * \\param[in] id The control ID\n",
    "prefixes": [
        "libcamera-devel",
        "v5",
        "01/17"
    ]
}