Cover Letter Detail
Show a cover letter.
GET /api/1.1/covers/2296/?format=api
{ "id": 2296, "url": "https://patchwork.libcamera.org/api/1.1/covers/2296/?format=api", "web_url": "https://patchwork.libcamera.org/cover/2296/", "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": "<20191108205409.18845-1-laurent.pinchart@ideasonboard.com>", "date": "2019-11-08T20:53:45", "name": "[libcamera-devel,v2,00/24] Control serialization and IPA C API", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/cover/2296/mbox/", "series": [ { "id": 568, "url": "https://patchwork.libcamera.org/api/1.1/series/568/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=568", "date": "2019-11-08T20:53:45", "name": "Control serialization and IPA C API", "version": 2, "mbox": "https://patchwork.libcamera.org/series/568/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/2296/comments/", "headers": { "Return-Path": "<laurent.pinchart@ideasonboard.com>", "Received": [ "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A618960180\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 8 Nov 2019 21:54:22 +0100 (CET)", "from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 317862D1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 8 Nov 2019 21:54:22 +0100 (CET)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1573246462;\n\tbh=sgeAtFl1pg+259zg49JElGEAZKvzjg/AVmrC513XXg0=;\n\th=From:To:Subject:Date:From;\n\tb=kUpa747UZVo+6TtJo/RfG6GzxCS1edkC2mBZXAauNCYH+zn3yLYw7BI9X/yqBd+Nd\n\twKgxafv72dOtxJtVb+Q3fZtbIwFdtzM9NoF5Q8FjytpLUjlJQ4LE2yMsgJhI28En1P\n\t4BunJ0GP8eU3lLHCsMIQef8vZ+jn66aFB6EmFltY=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 8 Nov 2019 22:53:45 +0200", "Message-Id": "<20191108205409.18845-1-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.23.0", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v2 00/24] Control serialization and IPA C\n\tAPI", "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": "Fri, 08 Nov 2019 20:54:22 -0000" }, "content": "Hello,\n\nThis patch series turns the IPA API towards IPA modules to a plain C\nAPI. The rationale is explained in patch 19/24:\n\nThe C++ objects that are expected to convey data through the IPA API\nwill have associated methods that would require IPAs to link to\nlibcamera. Even though the libcamera license allows this, suppliers of\nclosed-source IPAs may have a different interpretation. To ease their\nmind and clearly separate vendor code and libcamera code, define a plain\nC IPA API. The corresponding C objects are stored in plain C structures\nor have their binary format documented, removing the need for linking to\nlibcamera code on the IPA side.\n\nPatches 01/24 to 12/24 are preparatory changes. Patches 01/24 to 03/24\nadd a test case for and fix a bug in the ControlInfoMap. Patches 04/24\nto 12/24 then rework and expand the BufferMemory and control classes to\nmake translation between the C++ and C API possible.\n\nA plain C API requires storing all data passed to IPA context operations\nin plain C data structures. For most of the data used in the\nIPAInterface methods, this only requires defining corresponding C\nstructures and replacing std::vector and std::map with arrays. However,\nfor ControlInfoMap and ControlList, a different approach is needed due\nto their complexity.\n\nPatch 13/24 defines a serialization format for those two classes, and\npatches 14/24 to 17/24 implement serialization and deserialization\n(including a test case).\n\nPatches 18/24 to 20/24 then define a plain C IPA API and switch to it.\nPatch 21/24 is a small improvement to compile time test coverage related\nto IPA modules, and patch 22/24 allows short-circuiting the C API for\nIPA modules that are loaded without isolation. Patch 23/24 adds a test\ncase, and patch 24/24 finally fixes a typo.\n\nI would like to thank both Kieran and Jacopo for all their preparatory\nwork on this. We all spend lots of time burning brain cells, and\nhopefully the result will make everybody happy.\n\nJacopo Mondi (6):\n libcamera: controls: Make ControlId constructor public\n libcamera: controls: Store reference to the InfoMap\n ipa: Define serialized controls\n libcamera: Add ByteStreamBuffer\n test: Add control serialization test\n ipa: Switch to the plain C API\n\nLaurent Pinchart (18):\n test: Extract CameraTest class out of camera tests to libtest\n test: controls: Add ControlInfoMap test\n libcamera: controls: Avoid exception in ControlList count() and find()\n libcamera: controls: Add operator== and operator!= to ControlRange\n libcamera: controls: Index ControlList by unsigned int\n libcamera: controls: Add move constructor to ControlInfoMap\n libcamera: controls: Make ControList constructor public\n libcamera: controls: Catch type mismatch in ControlInfoMap\n libcamera: v4l2_controls: Fix control range construction for bool\n libcamera: buffer: Add const accessor to Buffer planes\n test: Add ByteStreamBuffer test\n libcamera: Add controls serializer\n ipa: Pass ControlInfoMap references to IPAInterface::configure()\n ipa: Define a plain C API\n ipa: Declare the ipaCreate() function prototype\n ipa: Allow short-circuiting the ipa_context_ops\n test: ipa: Add IPA wrappers test\n libcamera: Fix typo related to serialization\n\n Documentation/Doxyfile.in | 1 +\n Documentation/meson.build | 2 +\n include/ipa/ipa_controls.h | 54 ++\n include/ipa/ipa_interface.h | 82 ++-\n include/ipa/meson.build | 1 +\n include/libcamera/buffer.h | 1 +\n include/libcamera/controls.h | 50 +-\n src/ipa/ipa_vimc.cpp | 9 +-\n src/ipa/libipa/ipa_interface_wrapper.cpp | 248 +++++++++\n src/ipa/libipa/ipa_interface_wrapper.h | 57 ++\n src/ipa/libipa/meson.build | 13 +\n src/ipa/meson.build | 3 +\n src/ipa/rkisp1/meson.build | 3 +-\n src/ipa/rkisp1/rkisp1.cpp | 9 +-\n src/libcamera/buffer.cpp | 6 +\n src/libcamera/byte_stream_buffer.cpp | 286 ++++++++++\n src/libcamera/camera_controls.cpp | 4 +-\n src/libcamera/control_serializer.cpp | 501 ++++++++++++++++++\n src/libcamera/controls.cpp | 139 +++--\n src/libcamera/include/byte_stream_buffer.h | 63 +++\n src/libcamera/include/camera_controls.h | 2 +-\n src/libcamera/include/control_serializer.h | 52 ++\n src/libcamera/include/control_validator.h | 2 +-\n src/libcamera/include/ipa_context_wrapper.h | 47 ++\n src/libcamera/include/ipa_module.h | 5 +-\n src/libcamera/include/meson.build | 3 +\n src/libcamera/ipa_context_wrapper.cpp | 249 +++++++++\n src/libcamera/ipa_controls.cpp | 187 +++++++\n src/libcamera/ipa_interface.cpp | 325 ++++++++++--\n src/libcamera/ipa_manager.cpp | 67 ++-\n src/libcamera/ipa_module.cpp | 23 +-\n src/libcamera/meson.build | 4 +\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 +-\n src/libcamera/pipeline/uvcvideo.cpp | 4 +-\n src/libcamera/pipeline/vimc.cpp | 4 +-\n src/libcamera/proxy/ipa_proxy_linux.cpp | 2 +-\n .../proxy/worker/ipa_proxy_linux_worker.cpp | 8 +-\n src/libcamera/v4l2_controls.cpp | 14 +-\n src/libcamera/v4l2_device.cpp | 23 +-\n test/byte-stream-buffer.cpp | 172 ++++++\n test/camera/buffer_import.cpp | 14 +-\n test/camera/capture.cpp | 15 +-\n test/camera/configuration_default.cpp | 16 +-\n test/camera/configuration_set.cpp | 15 +-\n test/camera/meson.build | 2 +-\n test/camera/statemachine.cpp | 15 +-\n test/controls/control_info.cpp | 77 +++\n test/controls/control_list.cpp | 39 +-\n test/controls/meson.build | 1 +\n test/ipa/ipa_wrappers_test.cpp | 390 ++++++++++++++\n test/ipa/meson.build | 5 +-\n test/{camera => libtest}/camera_test.cpp | 24 +-\n test/{camera => libtest}/camera_test.h | 12 +-\n test/libtest/meson.build | 1 +\n test/meson.build | 2 +\n test/serialization/control_serialization.cpp | 161 ++++++\n test/serialization/meson.build | 11 +\n test/serialization/serialization_test.cpp | 89 ++++\n test/serialization/serialization_test.h | 33 ++\n 59 files changed, 3432 insertions(+), 217 deletions(-)\n create mode 100644 include/ipa/ipa_controls.h\n create mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp\n create mode 100644 src/ipa/libipa/ipa_interface_wrapper.h\n create mode 100644 src/ipa/libipa/meson.build\n create mode 100644 src/libcamera/byte_stream_buffer.cpp\n create mode 100644 src/libcamera/control_serializer.cpp\n create mode 100644 src/libcamera/include/byte_stream_buffer.h\n create mode 100644 src/libcamera/include/control_serializer.h\n create mode 100644 src/libcamera/include/ipa_context_wrapper.h\n create mode 100644 src/libcamera/ipa_context_wrapper.cpp\n create mode 100644 src/libcamera/ipa_controls.cpp\n create mode 100644 test/byte-stream-buffer.cpp\n create mode 100644 test/controls/control_info.cpp\n create mode 100644 test/ipa/ipa_wrappers_test.cpp\n rename test/{camera => libtest}/camera_test.cpp (55%)\n rename test/{camera => libtest}/camera_test.h (77%)\n create mode 100644 test/serialization/control_serialization.cpp\n create mode 100644 test/serialization/meson.build\n create mode 100644 test/serialization/serialization_test.cpp\n create mode 100644 test/serialization/serialization_test.h" }