[libcamera-devel,00/21] Implement control serialization
mbox series

Message ID 20190924172503.30864-1-jacopo@jmondi.org
Headers show
Series
  • Implement control serialization
Related show

Message

Jacopo Mondi Sept. 24, 2019, 5:24 p.m. UTC
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