Cover Letter Detail
Show a cover letter.
GET /api/covers/11211/?format=api
{ "id": 11211, "url": "https://patchwork.libcamera.org/api/covers/11211/?format=api", "web_url": "https://patchwork.libcamera.org/cover/11211/", "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": "<20210211071805.34963-1-paul.elder@ideasonboard.com>", "date": "2021-02-11T07:17:55", "name": "[libcamera-devel,v7,00/10] IPA isolation: Part 1: Core components", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/cover/11211/mbox/", "series": [ { "id": 1675, "url": "https://patchwork.libcamera.org/api/series/1675/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1675", "date": "2021-02-11T07:17:55", "name": "IPA isolation: Part 1: Core components", "version": 7, "mbox": "https://patchwork.libcamera.org/series/1675/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/11211/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 5A90ABD162\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 11 Feb 2021 07:18:18 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4234D61636;\n\tThu, 11 Feb 2021 08:18:17 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BDC00602FD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 11 Feb 2021 08:18:15 +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 330A241;\n\tThu, 11 Feb 2021 08:18:13 +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=\"WPHXk4T8\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1613027895;\n\tbh=7RM30ZRg+DxO8bS2Wwp4Q1Jofwow1bdNVn00m/7Hpe0=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=WPHXk4T89we9ZYxEeN4nmcf/8xaXHO52+Wqei2Sj2vrwemHNklL1OEm/sUeoEs/++\n\tT/o75poXRQ/MENfrL6jkptbO6FWsjv7d4y4dQwSnKomJFOy70wygMv9//AkgdXRNYZ\n\t6N1RvgaAZks7+rPpVIbaqD56EEbNATeaHGYtsGG4=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Thu, 11 Feb 2021 16:17:55 +0900", "Message-Id": "<20210211071805.34963-1-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.27.0", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH v7 00/10] 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=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "v7 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/10 to 10/10 add the meat of this IPC and custom IPA interface\nmechanisms, including the code generation templates, serializers, and\nIPC message pipes.\n\n1/10 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/10. 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\nChanges in v7:\n- simplify ControlSerializer::isCached implementation\n- make sendSync and sendAsync only take an IPCMessage\n - sequence number is svaed by proxy instead of IPCPipe\n- replace genHeader and genSerdes with skipHeader and skipSerdes in\n core.mojom\n- move DEFINE_POD_SERIALIZER from ipa_data_serializer.h to cpp\n- add some overflow checks to IPADataSerializer\n- add underflow check on IPCPipeUnixSocket receive\n- fix CameraSensorInfo\n- pull in Niklas's fix for IPCUnixSocket\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\nNiklas Söderlund (1):\n libcamera: IPCPipeUnixSocket: Check that insertion succeeds\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 | 2 +\n .../libcamera/internal/ipa_data_serializer.h | 660 ++++++++++++++++++\n include/libcamera/internal/ipc_pipe.h | 69 ++\n .../libcamera/internal/ipc_pipe_unixsocket.h | 49 ++\n include/libcamera/ipa/core.mojom | 215 ++++++\n src/libcamera/control_serializer.cpp | 26 +\n src/libcamera/ipa_data_serializer.cpp | 244 +++++++\n src/libcamera/ipc_pipe.cpp | 220 ++++++\n src/libcamera/ipc_pipe_unixsocket.cpp | 149 ++++\n src/libcamera/meson.build | 3 +\n utils/ipc/generate.py | 29 +\n .../core_ipa_interface.h.tmpl | 40 ++\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 | 236 +++++++\n .../module_ipa_proxy.h.tmpl | 128 ++++\n .../module_ipa_proxy_worker.cpp.tmpl | 226 ++++++\n .../module_ipa_serializer.h.tmpl | 48 ++\n .../libcamera_templates/proxy_functions.tmpl | 194 +++++\n .../libcamera_templates/serializer.tmpl | 313 +++++++++\n .../generators/mojom_libcamera_generator.py | 508 ++++++++++++++\n utils/ipc/parser.py | 20 +\n 25 files changed, 3585 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" }