[libcamera-devel] [PATCH v3 00/38] IPA isolation implementation

Paul Elder paul.elder at ideasonboard.com
Fri Oct 2 16:31:16 CEST 2020


This patchset implements IPA isolation, and is fully plumbed and
runnable on all pipeline handlers. This also includes code
generators for the IPA proxies, and headers and serializers for custom
data structures and functions. Unlike the RFC, this patch series is
structured like a normal patch series, in order that should be merged.
The only exception is patches 15/38-35/38, which must be squashed to
avoid bisection breakage, and are only kept separate to ease review.

To see samples of generated code (without running this), see the RFC
"IPA isolation example, with IPC, fully plumbed".

To restate the problem, we have two goals:
- to be able to run IPAs isolated in a separate process
- the isolation must be transparent to both the pipeline handler and
  the IPA
During design of the IPC mechanism, we realized that we could support
both custom fuctions and custom data structures, which would be a lot
nicer than the tedious manual de/serialization that we had before with
IPAOperationData.

The architecture of the whole thing is as follows:

pipeline handler -> IPAProxyRPi --thread--> IPARPi
                                \
                                 \-> IPAIPC --IPC--> IPAProxyRPiWorker -> IPARPi

Where the pipeline author defines the interface between the pipeline
handler and the IPA, as well as any data structures. Based on this,
headers, de/serializers, and the proxy (including the worker) will be
generated.

Patches 1/38~03/38 will be fast tracked, and I plan to merge them
separately from the rest of this series after they are approved in this
round.

Patch 4/38 imports mojo directly from the chromium repos, with some
big things pruned. Patches 6/38 to 13/38 add the meat of this IPC and
custom IPA interface mechanisms. Patches 15/38 to 35/38 are modifications
in the rest of libcamera to make the whole mechanism work, and must be
squashed together to avoid bisection breakage. Patches 36/38 and 37/38
add tests for the serializer and IPC components of this series.

Patch 27/38 may be of interest, as it shows how one would write the
interface and data definition. In v2 I have customized the raspberrypi
mojom file to take advantage of the freedom in definition the IPA
interface and data structures (as opposed to v1, where it was
practically a direct translation of IPAOperationData). In v3 I have
added namespace support to the data definition, and this is reflected in
its usage.

In v2 I have added some rules to the mojom file, such as start(),
stop(), and init() are required, along with the main and callback
interfaces. These are documented in core.mojom in patch 26/38 and
enforced in the code generator in patch 06/38. core.mojom is a new
addition in v2, and is where common mojom "structs" (which represent
libcamera objects) and IPA interface definition documentaion are.

Patch 28/38 is also noteworthy, as it shows how one would use the
interface that has been defined. Since the headers and proxies are
autogenerated, there isn't a patch where the generated code can be seen,
however.

Patches 29/38 and 30/38 also define mojom files and use them, but are
for vimc and rkisp1, respectively. These will also give an idea on how
the mojom definition looks and how it will be used.

Changes in v3:
- add support for namespaces in the mojom file
  - note that they individually must not collide with existing
    namespaces (enforced by the C++ compiler)
- move IPAIPCUnixSocket helper functions away from global and into the
  class
- add SPDX and copyright to python scripts
- add parser.py to wrap the mojo parser
- make IPADataSerializer definition a bit cleaner with reimplemented POD
  manipulation functions
- expand mojom documentation in core.mojom

Changes in v2:
- upgrade documentation
- fix documentation compiling
- plumb the new IPC system through the other pipelines
- fix the issue where editing jinja templates wouldn't trigger
  recompile
- enforce IPA interface rules in code generator
- fix previously-untriggered code generation bugs
- add de/serializers for all primitive types, string, and const
  ControlList
- customized the RPi IPA interface
- add licenses
- add tests

Paul Elder (38):
  Documentation: coding-style: Document global variable guidelines
  libcamera: ProcessManager: make ProcessManager lifetime explicitly
    managed
  libcamera: PipelineHandler: Move printing pipeline names to
    CameraManager
  libcamera: process: forward-declare EventNotifier
  libcamera: meson: Add internal headers to sources
  utils: ipc: import mojo
  libcamera: Update dep5 to specify license for mojo
  utils: ipc: add templates for code generation for IPC mechanism
  utils: ipc: add generator script
  Documentation: skip generating documentation for generated code
  meson: ipa, proxy: Generate headers and proxy with mojo
  ipa: raspberrypi: meson: Add dependency on generated headers
  libcamera: Add IPADataSerializer
  libcamera: Add IPAIPC
  libcamera: Add IPAIPC implementation based on unix socket
  libcamera: IPAModule: Replace ipa_context with IPAInterface
  libcamera: ipa_context_wrapper: Remove ipa_context_wrapper
  libcamera: IPAProxy: Remove stop() override
  libcamera: IPAProxy: Add isolate parameter to create()
  libcamera: PipelineHandler: Remove IPA from base class
  libcamera: IPAInterface: Remove all functions from IPAInterface
  libcamera: IPAInterface: make ipaCreate return IPAInterface
  libcamera: IPAInterface: remove ipa_context and functions from
    documentation
  libcamera: IPAManager: Fetch IPAProxy corresponding to pipeline
  libcamera: IPAManager: add isolation flag to proxy creation
  ipa: Add core.mojom
  ipa: raspberrypi: Add mojom data definition file
  libcamera: pipeline, ipa: raspberrypi: Use new data definition
  libcamera: pipeline, ipa: vimc: Support the new IPC mechanism
  libcamera: pipeline, ipa: rkisp1: Support the new IPC mechanism
  libcamera: IPAProxy: Remove registration mechanism
  libcamera: proxy: Remove IPAProxyLinux and IPAProxyThread
  libcamera: IPAManager: Make createIPA return proxy directly
  ipa: remove libipa
  tests: ipa_interface_test: Update to use new createIPA
  tests: Remove IPA wrappers test
  tests: Add IPADataSerializer test
  tests: Add test for IPAIPCUnixSocket

 .reuse/dep5                                   |    6 +
 Documentation/Doxyfile.in                     |    7 +-
 Documentation/coding-style.rst                |   15 +
 Documentation/meson.build                     |    2 -
 .../libcamera/internal/ipa_context_wrapper.h  |   52 -
 .../libcamera/internal/ipa_data_serializer.h  | 1220 +++++++++++
 include/libcamera/internal/ipa_ipc.h          |   41 +
 .../libcamera/internal/ipa_ipc_unixsocket.h   |  115 +
 include/libcamera/internal/ipa_manager.h      |   31 +-
 include/libcamera/internal/ipa_module.h       |    4 +-
 include/libcamera/internal/ipa_proxy.h        |   31 -
 include/libcamera/internal/meson.build        |    1 -
 include/libcamera/internal/pipeline_handler.h |    1 -
 include/libcamera/internal/process.h          |   29 +
 include/libcamera/ipa/core.mojom              |   74 +
 include/libcamera/ipa/ipa_interface.h         |  126 +-
 include/libcamera/ipa/meson.build             |   89 +
 include/libcamera/ipa/raspberrypi.h           |   55 +-
 include/libcamera/ipa/raspberrypi.mojom       |  157 ++
 include/libcamera/ipa/rkisp1.h                |   14 +-
 include/libcamera/ipa/rkisp1.mojom            |   42 +
 include/libcamera/ipa/{ipa_vimc.h => vimc.h}  |    4 +
 include/libcamera/ipa/vimc.mojom              |   12 +
 src/ipa/libipa/ipa_interface_wrapper.cpp      |  285 ---
 src/ipa/libipa/ipa_interface_wrapper.h        |   61 -
 src/ipa/libipa/meson.build                    |   15 -
 src/ipa/meson.build                           |    2 -
 src/ipa/raspberrypi/meson.build               |    4 +-
 src/ipa/raspberrypi/raspberrypi.cpp           |  154 +-
 src/ipa/rkisp1/meson.build                    |    5 +-
 src/ipa/rkisp1/rkisp1.cpp                     |   55 +-
 src/ipa/vimc/meson.build                      |    5 +-
 src/ipa/vimc/vimc.cpp                         |   20 +-
 src/libcamera/camera_manager.cpp              |    5 +
 src/libcamera/ipa_context_wrapper.cpp         |  297 ---
 src/libcamera/ipa_data_serializer.cpp         |  154 ++
 src/libcamera/ipa_interface.cpp               |  517 +----
 src/libcamera/ipa_ipc.cpp                     |  110 +
 src/libcamera/ipa_ipc_unixsocket.cpp          |  175 ++
 src/libcamera/ipa_manager.cpp                 |   47 +-
 src/libcamera/ipa_module.cpp                  |   10 +-
 src/libcamera/ipa_proxy.cpp                   |  101 -
 src/libcamera/meson.build                     |    6 +-
 .../pipeline/raspberrypi/raspberrypi.cpp      |  170 +-
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   44 +-
 src/libcamera/pipeline/vimc/vimc.cpp          |    8 +-
 src/libcamera/pipeline_handler.cpp            |   11 -
 src/libcamera/process.cpp                     |   46 +-
 src/libcamera/proxy/ipa_proxy_linux.cpp       |  103 -
 src/libcamera/proxy/ipa_proxy_thread.cpp      |  172 --
 src/libcamera/proxy/meson.build               |   19 +-
 .../proxy/worker/ipa_proxy_linux_worker.cpp   |   90 -
 src/libcamera/proxy/worker/meson.build        |   22 +-
 test/ipa/ipa_interface_test.cpp               |    7 +-
 test/ipa/ipa_wrappers_test.cpp                |  452 ----
 test/ipa/meson.build                          |    5 +-
 test/ipc/meson.build                          |    3 +-
 test/ipc/unixsocket_ipc.cpp                   |  238 ++
 test/log/log_process.cpp                      |    2 +
 test/process/process_test.cpp                 |    2 +
 .../ipa_data_serializer_test.cpp              |  463 ++++
 test/serialization/meson.build                |    3 +-
 utils/ipc/generate.py                         |   21 +
 .../libcamera_templates/meson.build           |   11 +
 .../module_generated.h.tmpl                   |   96 +
 .../module_ipa_proxy.cpp.tmpl                 |  222 ++
 .../module_ipa_proxy.h.tmpl                   |  107 +
 .../module_ipa_proxy_worker.cpp.tmpl          |  178 ++
 .../module_serializer.h.tmpl                  |   44 +
 .../libcamera_templates/proxy_functions.tmpl  |  185 ++
 .../libcamera_templates/serializer.tmpl       |  268 +++
 utils/ipc/generators/meson.build              |    3 +
 .../generators/mojom_libcamera_generator.py   |  452 ++++
 utils/ipc/meson.build                         |   14 +
 utils/ipc/mojo/public/LICENSE                 |   27 +
 utils/ipc/mojo/public/tools/.style.yapf       |    6 +
 utils/ipc/mojo/public/tools/BUILD.gn          |   18 +
 utils/ipc/mojo/public/tools/bindings/BUILD.gn |  108 +
 .../ipc/mojo/public/tools/bindings/README.md  |  816 +++++++
 .../chromium_bindings_configuration.gni       |   51 +
 .../tools/bindings/compile_typescript.py      |   27 +
 .../tools/bindings/concatenate-files.py       |   54 +
 ...concatenate_and_replace_closure_exports.py |   73 +
 .../bindings/format_typemap_generator_args.py |   36 +
 .../tools/bindings/gen_data_files_list.py     |   52 +
 .../tools/bindings/generate_type_mappings.py  |  187 ++
 .../ipc/mojo/public/tools/bindings/mojom.gni  | 1941 +++++++++++++++++
 .../bindings/mojom_bindings_generator.py      |  390 ++++
 .../mojom_bindings_generator_unittest.py      |   62 +
 .../tools/bindings/mojom_types_downgrader.py  |  119 +
 .../tools/bindings/validate_typemap_config.py |   57 +
 utils/ipc/mojo/public/tools/mojom/README.md   |   14 +
 .../mojom/check_stable_mojom_compatibility.py |  170 ++
 ...eck_stable_mojom_compatibility_unittest.py |  260 +++
 .../mojo/public/tools/mojom/const_unittest.py |   90 +
 .../mojo/public/tools/mojom/enum_unittest.py  |   92 +
 .../mojo/public/tools/mojom/mojom/BUILD.gn    |   43 +
 .../mojo/public/tools/mojom/mojom/__init__.py |    0
 .../mojo/public/tools/mojom/mojom/error.py    |   28 +
 .../mojo/public/tools/mojom/mojom/fileutil.py |   45 +
 .../tools/mojom/mojom/fileutil_unittest.py    |   40 +
 .../tools/mojom/mojom/generate/__init__.py    |    0
 .../mojom/mojom/generate/constant_resolver.py |   93 +
 .../tools/mojom/mojom/generate/generator.py   |  325 +++
 .../mojom/generate/generator_unittest.py      |   74 +
 .../tools/mojom/mojom/generate/module.py      | 1635 ++++++++++++++
 .../mojom/mojom/generate/module_unittest.py   |   31 +
 .../public/tools/mojom/mojom/generate/pack.py |  258 +++
 .../mojom/mojom/generate/pack_unittest.py     |  225 ++
 .../mojom/mojom/generate/template_expander.py |   83 +
 .../tools/mojom/mojom/generate/translate.py   |  854 ++++++++
 .../mojom/generate/translate_unittest.py      |   73 +
 .../tools/mojom/mojom/parse/__init__.py       |    0
 .../public/tools/mojom/mojom/parse/ast.py     |  427 ++++
 .../tools/mojom/mojom/parse/ast_unittest.py   |  121 +
 .../mojom/mojom/parse/conditional_features.py |   82 +
 .../parse/conditional_features_unittest.py    |  233 ++
 .../public/tools/mojom/mojom/parse/lexer.py   |  251 +++
 .../tools/mojom/mojom/parse/lexer_unittest.py |  198 ++
 .../public/tools/mojom/mojom/parse/parser.py  |  488 +++++
 .../mojom/mojom/parse/parser_unittest.py      | 1390 ++++++++++++
 .../mojo/public/tools/mojom/mojom_parser.py   |  361 +++
 .../tools/mojom/mojom_parser_test_case.py     |   73 +
 .../tools/mojom/mojom_parser_unittest.py      |  171 ++
 .../tools/mojom/stable_attribute_unittest.py  |  127 ++
 .../mojom/version_compatibility_unittest.py   |  397 ++++
 .../public/tools/run_all_python_unittests.py  |   28 +
 utils/ipc/tools/diagnosis/crbug_1001171.py    |   51 +
 utils/meson.build                             |    1 +
 129 files changed, 17795 insertions(+), 2678 deletions(-)
 delete mode 100644 include/libcamera/internal/ipa_context_wrapper.h
 create mode 100644 include/libcamera/internal/ipa_data_serializer.h
 create mode 100644 include/libcamera/internal/ipa_ipc.h
 create mode 100644 include/libcamera/internal/ipa_ipc_unixsocket.h
 create mode 100644 include/libcamera/ipa/core.mojom
 create mode 100644 include/libcamera/ipa/raspberrypi.mojom
 create mode 100644 include/libcamera/ipa/rkisp1.mojom
 rename include/libcamera/ipa/{ipa_vimc.h => vimc.h} (87%)
 create mode 100644 include/libcamera/ipa/vimc.mojom
 delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp
 delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h
 delete mode 100644 src/ipa/libipa/meson.build
 delete mode 100644 src/libcamera/ipa_context_wrapper.cpp
 create mode 100644 src/libcamera/ipa_data_serializer.cpp
 create mode 100644 src/libcamera/ipa_ipc.cpp
 create mode 100644 src/libcamera/ipa_ipc_unixsocket.cpp
 delete mode 100644 src/libcamera/proxy/ipa_proxy_linux.cpp
 delete mode 100644 src/libcamera/proxy/ipa_proxy_thread.cpp
 delete mode 100644 src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
 delete mode 100644 test/ipa/ipa_wrappers_test.cpp
 create mode 100644 test/ipc/unixsocket_ipc.cpp
 create mode 100644 test/serialization/ipa_data_serializer_test.cpp
 create mode 100755 utils/ipc/generate.py
 create mode 100644 utils/ipc/generators/libcamera_templates/meson.build
 create mode 100644 utils/ipc/generators/libcamera_templates/module_generated.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_serializer.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/serializer.tmpl
 create mode 100644 utils/ipc/generators/meson.build
 create mode 100644 utils/ipc/generators/mojom_libcamera_generator.py
 create mode 100644 utils/ipc/meson.build
 create mode 100644 utils/ipc/mojo/public/LICENSE
 create mode 100644 utils/ipc/mojo/public/tools/.style.yapf
 create mode 100644 utils/ipc/mojo/public/tools/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/bindings/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/bindings/README.md
 create mode 100644 utils/ipc/mojo/public/tools/bindings/chromium_bindings_configuration.gni
 create mode 100644 utils/ipc/mojo/public/tools/bindings/compile_typescript.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/concatenate-files.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/format_typemap_generator_args.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/gen_data_files_list.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/generate_type_mappings.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/mojom.gni
 create mode 100755 utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/mojom_types_downgrader.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/README.md
 create mode 100755 utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py
 create mode 100755 utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/const_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/enum_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/error.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/fileutil.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/constant_resolver.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/generator.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/module.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/pack.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/translate.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/ast.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/parser.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/mojom/mojom_parser.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/run_all_python_unittests.py
 create mode 100644 utils/ipc/tools/diagnosis/crbug_1001171.py

-- 
2.27.0












Paul Elder (38):
  Documentation: coding-style: Document global variable guidelines
  libcamera: ProcessManager: make ProcessManager lifetime explicitly
    managed
  libcamera: PipelineHandler: Move printing pipeline names to
    CameraManager
  utils: ipc: import mojo
  libcamera: Update dep5 to specify license for mojo
  utils: ipc: add templates for code generation for IPC mechanism
  utils: ipc: add generator script
  utils: ipc: add parser script
  Documentation: skip generating documentation for generated code
  libcamera: Add IPADataSerializer
  libcamera: Add IPAIPC
  libcamera: Add IPAIPC implementation based on unix socket
  meson: ipa, proxy: Generate headers and proxy with mojo
  ipa: raspberrypi: meson: Add dependency on generated headers
  libcamera: IPAModule: Replace ipa_context with IPAInterface
  libcamera: ipa_context_wrapper: Remove ipa_context_wrapper
  libcamera: IPAProxy: Remove stop() override
  libcamera: IPAProxy: Add isolate parameter to create()
  libcamera: PipelineHandler: Remove IPA from base class
  libcamera: IPAInterface: Remove all functions from IPAInterface
  libcamera: IPAInterface: make ipaCreate return IPAInterface
  libcamera: IPAInterface: remove ipa_context and functions from
    documentation
  libcamera: IPAManager: Fetch IPAProxy corresponding to pipeline
  libcamera: IPAManager: add isolation flag to proxy creation
  libcamera: IPAManager: Make createIPA return proxy directly
  ipa: Add core.mojom
  ipa: raspberrypi: Add mojom data definition file
  libcamera: pipeline, ipa: raspberrypi: Use new data definition
  libcamera: pipeline, ipa: vimc: Support the new IPC mechanism
  libcamera: pipeline, ipa: rkisp1: Support the new IPC mechanism
  libcamera: IPAProxy: Remove registration mechanism
  libcamera: proxy: Remove IPAProxyLinux and IPAProxyThread
  ipa: remove libipa
  tests: ipa_interface_test: Update to use new createIPA
  tests: Remove IPA wrappers test
  tests: Add IPADataSerializer test
  tests: Add test for IPAIPCUnixSocket
  README: Add dependency on python3-ply for IPA interface generation

 .reuse/dep5                                   |    6 +
 Documentation/Doxyfile.in                     |    7 +-
 Documentation/coding-style.rst                |   19 +
 Documentation/meson.build                     |    2 -
 README.rst                                    |    3 +
 .../libcamera/internal/ipa_context_wrapper.h  |   52 -
 .../libcamera/internal/ipa_data_serializer.h  | 1014 +++++++++
 include/libcamera/internal/ipa_ipc.h          |   41 +
 .../libcamera/internal/ipa_ipc_unixsocket.h   |   62 +
 include/libcamera/internal/ipa_manager.h      |   31 +-
 include/libcamera/internal/ipa_module.h       |    4 +-
 include/libcamera/internal/ipa_proxy.h        |   31 -
 include/libcamera/internal/meson.build        |    1 -
 include/libcamera/internal/pipeline_handler.h |    1 -
 include/libcamera/internal/process.h          |   29 +
 include/libcamera/ipa/core.mojom              |   83 +
 include/libcamera/ipa/ipa_interface.h         |  126 +-
 include/libcamera/ipa/meson.build             |   94 +
 include/libcamera/ipa/raspberrypi.h           |   55 +-
 include/libcamera/ipa/raspberrypi.mojom       |  158 ++
 include/libcamera/ipa/rkisp1.h                |   18 +-
 include/libcamera/ipa/rkisp1.mojom            |   42 +
 include/libcamera/ipa/{ipa_vimc.h => vimc.h}  |    8 +
 include/libcamera/ipa/vimc.mojom              |   12 +
 src/ipa/libipa/ipa_interface_wrapper.cpp      |  285 ---
 src/ipa/libipa/ipa_interface_wrapper.h        |   61 -
 src/ipa/libipa/meson.build                    |   15 -
 src/ipa/meson.build                           |    2 -
 src/ipa/raspberrypi/meson.build               |    4 +-
 src/ipa/raspberrypi/raspberrypi.cpp           |  162 +-
 src/ipa/rkisp1/meson.build                    |    5 +-
 src/ipa/rkisp1/rkisp1.cpp                     |   55 +-
 src/ipa/vimc/meson.build                      |    5 +-
 src/ipa/vimc/vimc.cpp                         |   20 +-
 src/libcamera/camera_manager.cpp              |    5 +
 src/libcamera/ipa_context_wrapper.cpp         |  297 ---
 src/libcamera/ipa_data_serializer.cpp         |  154 ++
 src/libcamera/ipa_interface.cpp               |  517 +----
 src/libcamera/ipa_ipc.cpp                     |  114 +
 src/libcamera/ipa_ipc_unixsocket.cpp          |  211 ++
 src/libcamera/ipa_manager.cpp                 |   47 +-
 src/libcamera/ipa_module.cpp                  |   10 +-
 src/libcamera/ipa_proxy.cpp                   |  101 -
 src/libcamera/meson.build                     |    5 +-
 .../pipeline/raspberrypi/raspberrypi.cpp      |  164 +-
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   44 +-
 src/libcamera/pipeline/vimc/vimc.cpp          |    8 +-
 src/libcamera/pipeline_handler.cpp            |   11 -
 src/libcamera/process.cpp                     |   46 +-
 src/libcamera/proxy/ipa_proxy_linux.cpp       |  103 -
 src/libcamera/proxy/ipa_proxy_thread.cpp      |  172 --
 src/libcamera/proxy/meson.build               |   21 +-
 .../proxy/worker/ipa_proxy_linux_worker.cpp   |   90 -
 src/libcamera/proxy/worker/meson.build        |   23 +-
 test/ipa/ipa_interface_test.cpp               |   10 +-
 test/ipa/ipa_wrappers_test.cpp                |  452 ----
 test/ipa/meson.build                          |    7 +-
 test/ipc/meson.build                          |    3 +-
 test/ipc/unixsocket_ipc.cpp                   |  238 ++
 test/log/log_process.cpp                      |    2 +
 test/process/process_test.cpp                 |    2 +
 .../ipa_data_serializer_test.cpp              |  464 ++++
 test/serialization/meson.build                |    3 +-
 utils/ipc/generate.py                         |   29 +
 .../libcamera_templates/meson.build           |   11 +
 .../module_generated.h.tmpl                   |  106 +
 .../module_ipa_proxy.cpp.tmpl                 |  233 ++
 .../module_ipa_proxy.h.tmpl                   |  117 +
 .../module_ipa_proxy_worker.cpp.tmpl          |  184 ++
 .../module_serializer.h.tmpl                  |   44 +
 .../libcamera_templates/proxy_functions.tmpl  |  185 ++
 .../libcamera_templates/serializer.tmpl       |  276 +++
 utils/ipc/generators/meson.build              |    3 +
 .../generators/mojom_libcamera_generator.py   |  461 ++++
 utils/ipc/meson.build                         |   14 +
 utils/ipc/mojo/public/LICENSE                 |   27 +
 utils/ipc/mojo/public/tools/.style.yapf       |    6 +
 utils/ipc/mojo/public/tools/BUILD.gn          |   18 +
 utils/ipc/mojo/public/tools/bindings/BUILD.gn |  108 +
 .../ipc/mojo/public/tools/bindings/README.md  |  816 +++++++
 .../chromium_bindings_configuration.gni       |   51 +
 .../tools/bindings/compile_typescript.py      |   27 +
 .../tools/bindings/concatenate-files.py       |   54 +
 ...concatenate_and_replace_closure_exports.py |   73 +
 .../bindings/format_typemap_generator_args.py |   36 +
 .../tools/bindings/gen_data_files_list.py     |   52 +
 .../tools/bindings/generate_type_mappings.py  |  187 ++
 .../ipc/mojo/public/tools/bindings/mojom.gni  | 1941 +++++++++++++++++
 .../bindings/mojom_bindings_generator.py      |  390 ++++
 .../mojom_bindings_generator_unittest.py      |   62 +
 .../tools/bindings/mojom_types_downgrader.py  |  119 +
 .../tools/bindings/validate_typemap_config.py |   57 +
 utils/ipc/mojo/public/tools/mojom/README.md   |   14 +
 .../mojom/check_stable_mojom_compatibility.py |  170 ++
 ...eck_stable_mojom_compatibility_unittest.py |  260 +++
 .../mojo/public/tools/mojom/const_unittest.py |   90 +
 .../mojo/public/tools/mojom/enum_unittest.py  |   92 +
 .../mojo/public/tools/mojom/mojom/BUILD.gn    |   43 +
 .../mojo/public/tools/mojom/mojom/__init__.py |    0
 .../mojo/public/tools/mojom/mojom/error.py    |   28 +
 .../mojo/public/tools/mojom/mojom/fileutil.py |   45 +
 .../tools/mojom/mojom/fileutil_unittest.py    |   40 +
 .../tools/mojom/mojom/generate/__init__.py    |    0
 .../mojom/mojom/generate/constant_resolver.py |   93 +
 .../tools/mojom/mojom/generate/generator.py   |  325 +++
 .../mojom/generate/generator_unittest.py      |   74 +
 .../tools/mojom/mojom/generate/module.py      | 1635 ++++++++++++++
 .../mojom/mojom/generate/module_unittest.py   |   31 +
 .../public/tools/mojom/mojom/generate/pack.py |  258 +++
 .../mojom/mojom/generate/pack_unittest.py     |  225 ++
 .../mojom/mojom/generate/template_expander.py |   83 +
 .../tools/mojom/mojom/generate/translate.py   |  854 ++++++++
 .../mojom/generate/translate_unittest.py      |   73 +
 .../tools/mojom/mojom/parse/__init__.py       |    0
 .../public/tools/mojom/mojom/parse/ast.py     |  427 ++++
 .../tools/mojom/mojom/parse/ast_unittest.py   |  121 +
 .../mojom/mojom/parse/conditional_features.py |   82 +
 .../parse/conditional_features_unittest.py    |  233 ++
 .../public/tools/mojom/mojom/parse/lexer.py   |  251 +++
 .../tools/mojom/mojom/parse/lexer_unittest.py |  198 ++
 .../public/tools/mojom/mojom/parse/parser.py  |  488 +++++
 .../mojom/mojom/parse/parser_unittest.py      | 1390 ++++++++++++
 .../mojo/public/tools/mojom/mojom_parser.py   |  361 +++
 .../tools/mojom/mojom_parser_test_case.py     |   73 +
 .../tools/mojom/mojom_parser_unittest.py      |  171 ++
 .../tools/mojom/stable_attribute_unittest.py  |  127 ++
 .../mojom/version_compatibility_unittest.py   |  397 ++++
 .../public/tools/run_all_python_unittests.py  |   28 +
 utils/ipc/parser.py                           |   20 +
 utils/ipc/tools/diagnosis/crbug_1001171.py    |   51 +
 utils/meson.build                             |    1 +
 131 files changed, 17693 insertions(+), 2683 deletions(-)
 delete mode 100644 include/libcamera/internal/ipa_context_wrapper.h
 create mode 100644 include/libcamera/internal/ipa_data_serializer.h
 create mode 100644 include/libcamera/internal/ipa_ipc.h
 create mode 100644 include/libcamera/internal/ipa_ipc_unixsocket.h
 create mode 100644 include/libcamera/ipa/core.mojom
 create mode 100644 include/libcamera/ipa/raspberrypi.mojom
 create mode 100644 include/libcamera/ipa/rkisp1.mojom
 rename include/libcamera/ipa/{ipa_vimc.h => vimc.h} (84%)
 create mode 100644 include/libcamera/ipa/vimc.mojom
 delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.cpp
 delete mode 100644 src/ipa/libipa/ipa_interface_wrapper.h
 delete mode 100644 src/ipa/libipa/meson.build
 delete mode 100644 src/libcamera/ipa_context_wrapper.cpp
 create mode 100644 src/libcamera/ipa_data_serializer.cpp
 create mode 100644 src/libcamera/ipa_ipc.cpp
 create mode 100644 src/libcamera/ipa_ipc_unixsocket.cpp
 delete mode 100644 src/libcamera/proxy/ipa_proxy_linux.cpp
 delete mode 100644 src/libcamera/proxy/ipa_proxy_thread.cpp
 delete mode 100644 src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
 delete mode 100644 test/ipa/ipa_wrappers_test.cpp
 create mode 100644 test/ipc/unixsocket_ipc.cpp
 create mode 100644 test/serialization/ipa_data_serializer_test.cpp
 create mode 100755 utils/ipc/generate.py
 create mode 100644 utils/ipc/generators/libcamera_templates/meson.build
 create mode 100644 utils/ipc/generators/libcamera_templates/module_generated.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/module_serializer.h.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
 create mode 100644 utils/ipc/generators/libcamera_templates/serializer.tmpl
 create mode 100644 utils/ipc/generators/meson.build
 create mode 100644 utils/ipc/generators/mojom_libcamera_generator.py
 create mode 100644 utils/ipc/meson.build
 create mode 100644 utils/ipc/mojo/public/LICENSE
 create mode 100644 utils/ipc/mojo/public/tools/.style.yapf
 create mode 100644 utils/ipc/mojo/public/tools/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/bindings/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/bindings/README.md
 create mode 100644 utils/ipc/mojo/public/tools/bindings/chromium_bindings_configuration.gni
 create mode 100644 utils/ipc/mojo/public/tools/bindings/compile_typescript.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/concatenate-files.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/format_typemap_generator_args.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/gen_data_files_list.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/generate_type_mappings.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/mojom.gni
 create mode 100755 utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py
 create mode 100644 utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/mojom_types_downgrader.py
 create mode 100755 utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/README.md
 create mode 100755 utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py
 create mode 100755 utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/const_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/enum_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/BUILD.gn
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/error.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/fileutil.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/constant_resolver.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/generator.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/module.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/pack.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/translate.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/ast.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/parser.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/mojom/mojom_parser.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py
 create mode 100644 utils/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py
 create mode 100755 utils/ipc/mojo/public/tools/run_all_python_unittests.py
 create mode 100755 utils/ipc/parser.py
 create mode 100644 utils/ipc/tools/diagnosis/crbug_1001171.py

-- 
2.27.0



More information about the libcamera-devel mailing list