Show a cover letter.

GET /api/1.1/covers/10714/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 10714,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/10714/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/10714/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20201224081534.41601-1-paul.elder@ideasonboard.com>",
    "date": "2020-12-24T08:15:25",
    "name": "[libcamera-devel,v6,0/9] IPA isolation: Part 1: Core components",
    "submitter": {
        "id": 17,
        "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api",
        "name": "Paul Elder",
        "email": "paul.elder@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/10714/mbox/",
    "series": [
        {
            "id": 1546,
            "url": "https://patchwork.libcamera.org/api/1.1/series/1546/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1546",
            "date": "2020-12-24T08:15:25",
            "name": "IPA isolation: Part 1: Core components",
            "version": 6,
            "mbox": "https://patchwork.libcamera.org/series/1546/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/10714/comments/",
    "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 CEC85C0F1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 24 Dec 2020 08:15:47 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2A318615B0;\n\tThu, 24 Dec 2020 09:15:47 +0100 (CET)",
            "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 3BF0960525\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 24 Dec 2020 09:15:46 +0100 (CET)",
            "from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id CF716A1D;\n\tThu, 24 Dec 2020 09:15:44 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"b57pQzIG\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1608797745;\n\tbh=HtqeFfzc1zO90hjWrIx7bPcOFMJUELDK4ldIatUgFIw=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=b57pQzIGjjVaZvpMvS47AP3Zr5PidFatkc2YlkxJN5NiMe3Bp0EkIeNZutZ2JnxDX\n\tNGDIsqMulIi9CIczBrcy9fZBJwDbWMRyt9fgmZa8RLN0B0U7Tuzrq7xPNhIpHY6aDA\n\t8jZ8YLXwHKJcTHIzPbv/Vyb9tFIvfkfYgdc7wISI=",
        "From": "Paul Elder <paul.elder@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 24 Dec 2020 17:15:25 +0900",
        "Message-Id": "<20201224081534.41601-1-paul.elder@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v6 0/9] IPA isolation: Part 1: Core\n\tcomponents",
        "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": "v6 is split in three parts, core components, conversion + plumbing, and\ntests + documentation.\n\nThis is part 1, and implements IPA isolation.\n\nTo restate the problem, we have two goals:\n- to be able to run IPAs isolated in a separate process\n- the isolation must be transparent to both the pipeline handler and\n  the IPA\nDuring design of the IPC mechanism, we realized that we could support\nboth custom fuctions and custom data structures, which would be a lot\nnicer than the tedious manual de/serialization that we had before with\nIPAOperationData.\n\nThe architecture of the whole thing is as follows:\n\npipeline handler -> IPAProxyRPi --thread--> IPARPi\n                                \\\n                                 \\-> IPCPipe --IPC--> IPAProxyRPiWorker -> IPARPi\n\nWhere the pipeline author defines the interface between the pipeline\nhandler and the IPA, as well as any data structures. Based on this,\nheaders, de/serializers, and the proxy (including the worker) will be\ngenerated.\n\nPatches 2/9 to 9/9 add the meat of this IPC and custom IPA interface\nmechanisms, including the code generation templates, serializers, and\nIPC message pipes.\n\n1/9 is new in v6, and implements caching ControlInfoMaps in\nControlSerializer. This allows us to avoid reserializing ControlInfoMaps\nevery time we send a ControlList over IPC.\n\nIn v6 we newly support custom start() definitions.\n\nThe biggest change in v6 is that we now support defining structs in\nmojom for core libcamera structs, as is shown in core.mojom in 9/9. We\ncan also designate individually for every struct if we want a header\ndefinition as well, or just a serializer to be generated.\n\nDefining consts in the mojom file is also supported as of v6, meaning\nthat the rkisp1 and vimc headers can be removed (in Part 2), since those\nheaders only define consts and enums.\n\n\nChanges in v6:\n- ControlInfoMap caching in ControlSerializer\n- support custom start()\n- support defining libcamera structs in core.mojom\n- support consts in mojom\n- namespacing is required in mojom files\n- expand documentation on mojom, in core.mojom\n\nChanges in v5:\n- rename IPAIPC to IPCPipe\n- IPCPipe passes IPCMessages, instead of byte vector + fd vector\n- rename the generated files so the naming is consistent\n- make IPADataSerializer use const references and const iterators\n- removal of IPA wrapper test moved earlier\n- squash all patches related to replacing the C IPA interface with the\n  customizable C++ IPA interface\n- squash all patches related to making the IPAProxy one-per-pipeline\n\nChanges in v4:\n- add IPA guide\n- add test for header and serializer generation\n- fix style in generated code and IPADataSerializer\n- add segfault protections in read/append helpers in de/serializer\n- rename generated header and serializer\n- rename IPA callback interface to IPA event interface\n\nChanges in v3:\n- add support for namespaces in the mojom file\n  - note that they individually must not collide with existing\n    namespaces (enforced by the C++ compiler)\n- move IPAIPCUnixSocket helper functions away from global and into the\n  class\n- add SPDX and copyright to python scripts\n- add parser.py to wrap the mojo parser\n- make IPADataSerializer definition a bit cleaner with reimplemented POD\n  manipulation functions\n- expand mojom documentation in core.mojom\n\nChanges in v2:\n- upgrade documentation\n- fix documentation compiling\n- plumb the new IPC system through the other pipelines\n- fix the issue where editing jinja templates wouldn't trigger\n  recompile\n- enforce IPA interface rules in code generator\n- fix previously-untriggered code generation bugs\n- add de/serializers for all primitive types, string, and const\n  ControlList\n- customized the RPi IPA interface\n- add licenses\n- add tests\n\n\nPaul Elder (9):\n  libcamera: control_serializer: Save serialized ControlInfoMap in a\n    cache\n  utils: ipc: add templates for code generation for IPC mechanism\n  utils: ipc: add generator script\n  utils: ipc: add parser script\n  Documentation: skip generating documentation for generated code\n  libcamera: Add IPADataSerializer\n  libcamera: Add IPCPipe\n  libcamera: Add IPCPipe implementation based on unix socket\n  ipa: Add core.mojom\n\n Documentation/Doxyfile.in                     |   6 +-\n .../libcamera/internal/control_serializer.h   |   1 +\n .../libcamera/internal/ipa_data_serializer.h  | 701 ++++++++++++++++++\n include/libcamera/internal/ipc_pipe.h         |  70 ++\n .../libcamera/internal/ipc_pipe_unixsocket.h  |  50 ++\n include/libcamera/ipa/core.mojom              | 208 ++++++\n src/libcamera/control_serializer.cpp          |  30 +\n src/libcamera/ipa_data_serializer.cpp         | 185 +++++\n src/libcamera/ipc_pipe.cpp                    | 211 ++++++\n src/libcamera/ipc_pipe_unixsocket.cpp         | 147 ++++\n src/libcamera/meson.build                     |   3 +\n utils/ipc/generate.py                         |  29 +\n .../core_ipa_interface.h.tmpl                 |  37 +\n .../core_ipa_serializer.h.tmpl                |  47 ++\n .../definition_functions.tmpl                 |  53 ++\n .../libcamera_templates/meson.build           |  14 +\n .../module_ipa_interface.h.tmpl               |  87 +++\n .../module_ipa_proxy.cpp.tmpl                 | 232 ++++++\n .../module_ipa_proxy.h.tmpl                   | 126 ++++\n .../module_ipa_proxy_worker.cpp.tmpl          | 224 ++++++\n .../module_ipa_serializer.h.tmpl              |  47 ++\n .../libcamera_templates/proxy_functions.tmpl  | 192 +++++\n .../libcamera_templates/serializer.tmpl       | 313 ++++++++\n .../generators/mojom_libcamera_generator.py   | 511 +++++++++++++\n utils/ipc/parser.py                           |  20 +\n 25 files changed, 3543 insertions(+), 1 deletion(-)\n create mode 100644 include/libcamera/internal/ipa_data_serializer.h\n create mode 100644 include/libcamera/internal/ipc_pipe.h\n create mode 100644 include/libcamera/internal/ipc_pipe_unixsocket.h\n create mode 100644 include/libcamera/ipa/core.mojom\n create mode 100644 src/libcamera/ipa_data_serializer.cpp\n create mode 100644 src/libcamera/ipc_pipe.cpp\n create mode 100644 src/libcamera/ipc_pipe_unixsocket.cpp\n create mode 100755 utils/ipc/generate.py\n create mode 100644 utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/definition_functions.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/meson.build\n create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/proxy_functions.tmpl\n create mode 100644 utils/ipc/generators/libcamera_templates/serializer.tmpl\n create mode 100644 utils/ipc/generators/mojom_libcamera_generator.py\n create mode 100755 utils/ipc/parser.py"
}