From patchwork Tue Sep 24 17:24:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 1999 Return-Path: Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6B08160BCF for ; Tue, 24 Sep 2019 19:23:28 +0200 (CEST) X-Originating-IP: 213.45.248.89 Received: from uno.homenet.telecomitalia.it (host89-248-dynamic.45-213-r.retail.telecomitalia.it [213.45.248.89]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id EF3AA60006 for ; Tue, 24 Sep 2019 17:23:27 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Tue, 24 Sep 2019 19:24:42 +0200 Message-Id: <20190924172503.30864-1-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 00/21] Implement control serialization X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Sep 2019 17:23:28 -0000 Hello, this series implements and test serialization of Control and V4L2Controls. It is based on v2 of the just sent "[PATCH v2 0/5] libcamera: Control framework backend rework" The series stats by defining an interface for serializable types, which should implement the serialize() and deserialize() operations. It provides an helper class with methods to serialize/deserialize DataValue and DataInfo types (introduced in the above mentioned series) to a known memory format. Space optimization are indeed possible, this is just an initial version. It then makes ControlList and V4L2ControlList containers of DataValue instances and ControlInfoMap and V4L2ControlInfoMap containers of DataInfo. Once all types are backed by serializable classes (DataValue and DataInfo) it is possible to easy implements their serialization/deserialization processes. Tests are added for all the 4 serializable types. The last 7 patches, based on the out-of-tree: "ipa: Remove IPAInterface::init()" "ipa: Convert the IPA API to plain C" (here included for reference) are proof of concept (POC) patches which implements serialization of a ControlList in the dummy_ipa class, adding support for setting controls to the cam application. Being POC patches I have not added documentation there, expect Doxygen warnings on this part of the series. Thanks j Jacopo Mondi (20): libcamera: utils: Provide an ALIGN macro libcamera: Define interface for serializable data types libcamera: Implement serialization helper class libcamera: controls: Implement ControlList serialization libcamera: controls: Make ControlInfoMap a class libcamera: controls: Implement ControlInfoMap serialization libcamera: v4l2_controls: Make V4L2Control a DataValue libcamera: v4l2_controls: Implement V4L2ControlList serialization libcamera: v4l2_controls: Make V4L2ControlInfoMap a class libcamera: v4l2_controls: Implement V4L2ControlInfoMap serialization libcamera: controls: Remove explicit from ControlInfo constructor test: serialization: Add control serialization test test: serialization: Add control info serialization test test: serialization: Add V4L2ControlList serialization test test: serialization: Add V4L2ControlInfoList serialization test ipa: Convert the IPA API to plain C POC: Add control related operation to IPA POC: dummy_ipa: printout deserialize control value POC: vimc: Initialize and set controls from request POC: cam: Set random controls Niklas Söderlund (1): ipa: Remove IPAInterface::init() Documentation/Doxyfile.in | 1 + Documentation/meson.build | 2 + include/ipa/ipa_interface.h | 27 +- include/libcamera/controls.h | 36 +- include/libcamera/meson.build | 1 + include/libcamera/serializable.h | 44 ++ src/cam/capture.cpp | 12 + src/cam/capture.h | 2 + src/ipa/ipa_dummy.cpp | 32 +- src/ipa/libipa/ipa_interface_wrapper.cpp | 95 ++++ src/ipa/libipa/ipa_interface_wrapper.h | 35 ++ src/ipa/libipa/meson.build | 10 + src/ipa/meson.build | 3 + src/libcamera/controls.cpp | 208 ++++++++- src/libcamera/include/ipa_context_wrapper.h | 33 ++ src/libcamera/include/ipa_module.h | 5 +- src/libcamera/include/meson.build | 2 + src/libcamera/include/serializer.h | 93 ++++ src/libcamera/include/utils.h | 2 + src/libcamera/include/v4l2_controls.h | 45 +- src/libcamera/ipa_context_wrapper.cpp | 71 +++ src/libcamera/ipa_interface.cpp | 80 +++- src/libcamera/ipa_manager.cpp | 67 ++- src/libcamera/ipa_module.cpp | 23 +- src/libcamera/meson.build | 3 + src/libcamera/pipeline/uvcvideo.cpp | 6 +- src/libcamera/pipeline/vimc.cpp | 16 +- src/libcamera/proxy/ipa_proxy_linux.cpp | 17 +- .../proxy/worker/ipa_proxy_linux_worker.cpp | 8 +- src/libcamera/serializable.cpp | 110 +++++ src/libcamera/serializer.cpp | 420 ++++++++++++++++++ src/libcamera/utils.cpp | 11 + src/libcamera/v4l2_controls.cpp | 242 ++++++++-- src/libcamera/v4l2_device.cpp | 11 +- test/meson.build | 1 + test/serialization/control_info_list.cpp | 122 +++++ test/serialization/control_list.cpp | 101 +++++ test/serialization/meson.build | 14 + test/serialization/serialization_test.cpp | 292 ++++++++++++ test/serialization/serialization_test.h | 86 ++++ test/serialization/v4l2_control_info_list.cpp | 107 +++++ test/serialization/v4l2_control_list.cpp | 114 +++++ 42 files changed, 2510 insertions(+), 100 deletions(-) create mode 100644 include/libcamera/serializable.h create mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp create mode 100644 src/ipa/libipa/ipa_interface_wrapper.h create mode 100644 src/ipa/libipa/meson.build create mode 100644 src/libcamera/include/ipa_context_wrapper.h create mode 100644 src/libcamera/include/serializer.h create mode 100644 src/libcamera/ipa_context_wrapper.cpp create mode 100644 src/libcamera/serializable.cpp create mode 100644 src/libcamera/serializer.cpp create mode 100644 test/serialization/control_info_list.cpp create mode 100644 test/serialization/control_list.cpp create mode 100644 test/serialization/meson.build create mode 100644 test/serialization/serialization_test.cpp create mode 100644 test/serialization/serialization_test.h create mode 100644 test/serialization/v4l2_control_info_list.cpp create mode 100644 test/serialization/v4l2_control_list.cpp --- 2.23.0