Show a patch.

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

{
    "id": 2017,
    "url": "https://patchwork.libcamera.org/api/patches/2017/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/2017/",
    "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": "<20190924172503.30864-19-jacopo@jmondi.org>",
    "date": "2019-09-24T17:25:00",
    "name": "[libcamera-devel,18/21] POC: Add control related operation to IPA",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "5c2c312c03bd4dc032aa4a0696ac5ea28034b087",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/2017/mbox/",
    "series": [
        {
            "id": 506,
            "url": "https://patchwork.libcamera.org/api/series/506/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=506",
            "date": "2019-09-24T17:24:42",
            "name": "Implement control serialization",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/506/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/2017/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/2017/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<jacopo@jmondi.org>",
        "Received": [
            "from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net\n\t[217.70.183.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9A34462381\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 19:23:40 +0200 (CEST)",
            "from uno.homenet.telecomitalia.it\n\t(host89-248-dynamic.45-213-r.retail.telecomitalia.it [213.45.248.89])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 245C960005\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 17:23:39 +0000 (UTC)"
        ],
        "X-Originating-IP": "213.45.248.89",
        "From": "Jacopo Mondi <jacopo@jmondi.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Tue, 24 Sep 2019 19:25:00 +0200",
        "Message-Id": "<20190924172503.30864-19-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.23.0",
        "In-Reply-To": "<20190924172503.30864-1-jacopo@jmondi.org>",
        "References": "<20190924172503.30864-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 18/21] POC: Add control related operation\n\tto IPA",
        "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": "Tue, 24 Sep 2019 17:23:40 -0000"
    },
    "content": "Implement operations plumbing in the IPA interface for the\ninit_controls() operation and queue_request() one.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n include/ipa/ipa_interface.h                 | 11 +++++++++++\n src/ipa/ipa_dummy.cpp                       | 10 ++++++++++\n src/ipa/libipa/ipa_interface_wrapper.cpp    | 21 +++++++++++++++++++++\n src/ipa/libipa/ipa_interface_wrapper.h      |  6 ++++++\n src/libcamera/include/ipa_context_wrapper.h |  7 +++++++\n src/libcamera/ipa_context_wrapper.cpp       | 19 +++++++++++++++++++\n src/libcamera/proxy/ipa_proxy_linux.cpp     | 10 ++++++++++\n 7 files changed, 84 insertions(+)",
    "diff": "diff --git a/include/ipa/ipa_interface.h b/include/ipa/ipa_interface.h\nindex f1ebac20f151..d50ec41ba55e 100644\n--- a/include/ipa/ipa_interface.h\n+++ b/include/ipa/ipa_interface.h\n@@ -8,6 +8,10 @@\n #define __LIBCAMERA_IPA_INTERFACE_H__\n \n #ifdef __cplusplus\n+#include <cstdint>\n+\n+#include \"libcamera/controls.h\"\n+\n extern \"C\" {\n #endif\n \n@@ -16,6 +20,10 @@ struct ipa_context {\n };\n \n struct ipa_operations {\n+\tint (*init_controls)(struct ipa_context *ctx, uint8_t *controlInfo,\n+\t\t\t     std::size_t len);\n+\tint (*queue_request)(struct ipa_context *ctx, uint8_t *controls,\n+\t\t\t     std::size_t len);\n \tvoid (*destroy)(struct ipa_context *ctx);\n };\n \n@@ -28,6 +36,9 @@ class IPAInterface\n {\n public:\n \tvirtual ~IPAInterface() {}\n+\n+\tvirtual int initControls(ControlInfoMap &controlInfo) = 0;\n+\tvirtual int queueRequest(ControlList &controls) = 0;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/ipa/ipa_dummy.cpp b/src/ipa/ipa_dummy.cpp\nindex 6dc9448a3f56..ec79ba83ce58 100644\n--- a/src/ipa/ipa_dummy.cpp\n+++ b/src/ipa/ipa_dummy.cpp\n@@ -14,6 +14,16 @@ namespace libcamera {\n \n class IPADummy : public IPAInterface\n {\n+public:\n+\tint initControls(ControlInfoMap &controlInfo) override\n+\t{\n+\t\treturn 0;\n+\t}\n+\n+\tint queueRequest(ControlList &controls) override\n+\t{\n+\t\treturn 0;\n+\t}\n };\n \n /*\ndiff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp\nindex aacd189851c3..bc2fb3b78ea2 100644\n--- a/src/ipa/libipa/ipa_interface_wrapper.cpp\n+++ b/src/ipa/libipa/ipa_interface_wrapper.cpp\n@@ -61,12 +61,33 @@ void IPAInterfaceWrapper::destroy(struct ipa_context *_ctx)\n \tdelete ctx;\n }\n \n+int IPAInterfaceWrapper::initControls(struct ipa_context *_ctx,\n+\t\t\t\t      uint8_t *data, std::size_t len)\n+{\n+\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n+\n+\treturn ctx->controlInfoMap_.deserialize(data, len);\n+}\n+\n+int IPAInterfaceWrapper::queueRequest(struct ipa_context *_ctx,\n+\t\t\t\t      uint8_t *data, std::size_t len)\n+{\n+\tIPAInterfaceWrapper *ctx = static_cast<IPAInterfaceWrapper *>(_ctx);\n+\n+\tControlList controls(ctx->controlInfoMap_);\n+\tcontrols.deserialize(data, len);\n+\n+\treturn ctx->ipa->queueRequest(controls);\n+}\n+\n #ifndef __DOXYGEN__\n /*\n  * This construct confuses Doygen and makes it believe that all members of the\n  * operations is a member of IPAInterfaceWrapper. It must thus be hidden.\n  */\n const struct ipa_operations IPAInterfaceWrapper::operations = {\n+\t.init_controls = &IPAInterfaceWrapper::initControls,\n+\t.queue_request = &IPAInterfaceWrapper::queueRequest,\n \t.destroy = &IPAInterfaceWrapper::destroy,\n };\n #endif\ndiff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h\nindex d2ab46f50d3c..ec528f624494 100644\n--- a/src/ipa/libipa/ipa_interface_wrapper.h\n+++ b/src/ipa/libipa/ipa_interface_wrapper.h\n@@ -15,6 +15,10 @@ class IPAInterfaceWrapper : public ipa_context\n {\n public:\n \tIPAInterfaceWrapper(IPAInterface *interface);\n+\tstatic int initControls(struct ipa_context *_ctx,\n+\t\t\t\tuint8_t *controlInfo, std::size_t len);\n+\tstatic int queueRequest(struct ipa_context *_ctx,\n+\t\t\t\tuint8_t *controls, std::size_t len);\n \n private:\n \tstatic void destroy(struct ipa_context *ctx);\n@@ -22,6 +26,8 @@ private:\n \tstatic const struct ipa_operations operations;\n \n \tIPAInterface *ipa;\n+\n+\tControlInfoMap controlInfoMap_;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/include/ipa_context_wrapper.h b/src/libcamera/include/ipa_context_wrapper.h\nindex 12894ac6885e..c7820290c56a 100644\n--- a/src/libcamera/include/ipa_context_wrapper.h\n+++ b/src/libcamera/include/ipa_context_wrapper.h\n@@ -9,14 +9,21 @@\n \n #include <ipa/ipa_interface.h>\n \n+#include <cstdint>\n+\n namespace libcamera {\n \n+class ControlInfoMap;\n+class ControlList;\n class IPAContextWrapper final : public IPAInterface\n {\n public:\n \tIPAContextWrapper(struct ipa_context *context);\n \t~IPAContextWrapper();\n \n+\tint initControls(ControlInfoMap &controlInfo) override;\n+\tint queueRequest(ControlList &controls) override;\n+\n private:\n \tstruct ipa_context *ctx_;\n };\ndiff --git a/src/libcamera/ipa_context_wrapper.cpp b/src/libcamera/ipa_context_wrapper.cpp\nindex 87ff98d45c99..fbb9eb1df6eb 100644\n--- a/src/libcamera/ipa_context_wrapper.cpp\n+++ b/src/libcamera/ipa_context_wrapper.cpp\n@@ -8,6 +8,7 @@\n #include \"ipa_context_wrapper.h\"\n \n #include <libcamera/controls.h>\n+#include <libcamera/serializable.h>\n \n /**\n  * \\file ipa_context_wrapper.h\n@@ -49,4 +50,22 @@ IPAContextWrapper::~IPAContextWrapper()\n \t\tctx_->ops->destroy(ctx_);\n }\n \n+int IPAContextWrapper::initControls(ControlInfoMap &controlInfo)\n+{\n+\tstd::unique_ptr<DataBlob> blob = controlInfo.serialize();\n+\tif (!blob->valid())\n+\t\treturn -EINVAL;\n+\n+\treturn ctx_->ops->init_controls(ctx_, blob->data(), blob->size());\n+}\n+\n+int IPAContextWrapper::queueRequest(ControlList &controls)\n+{\n+\tstd::unique_ptr<DataBlob> blob = controls.serialize();\n+\tif (!blob->valid())\n+\t\treturn -EINVAL;\n+\n+\treturn ctx_->ops->queue_request(ctx_, blob->data(), blob->size());\n+}\n+\n } /* namespace libcamera */\ndiff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp\nindex c9eaedff0224..052f6c00afad 100644\n--- a/src/libcamera/proxy/ipa_proxy_linux.cpp\n+++ b/src/libcamera/proxy/ipa_proxy_linux.cpp\n@@ -26,6 +26,16 @@ public:\n \tIPAProxyLinux(IPAModule *ipam);\n \t~IPAProxyLinux();\n \n+\tint initControls(ControlInfoMap &controlInfo) override\n+\t{\n+\t\treturn 0;\n+\t}\n+\n+\tint queueRequest(ControlList &controls) override\n+\t{\n+\t\treturn 0;\n+\t}\n+\n private:\n \tvoid readyRead(IPCUnixSocket *ipc);\n \n",
    "prefixes": [
        "libcamera-devel",
        "18/21"
    ]
}