[libcamera-devel] [PATCH v5 15/23] ipa: Add core.mojom
Paul Elder
paul.elder at ideasonboard.com
Sat Dec 5 11:30:58 CET 2020
Add a base mojom file to contain empty mojom definitions of libcamera
objects, as well as documentation for the IPA interfaces that need to be
defined in the mojom files.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v5:
- add todo for defining some libcamera ipa structs in mojom
- remove ipa_mojom_core from dependencies of everything in the generator
stage
- add documentation for the base IPA functions (init, stop, start)
Changes in v4:
- move docs to IPA guide
Changes in v3:
- add doc that structs need to be defined
- add doc to recommend namespacing
- change indentation
- add requirement that base controls *must* be defined in
libcamera::{pipeline_name}::Controls
New in v2
---
include/libcamera/ipa/core.mojom | 48 ++++++++++++++++++++++++++
include/libcamera/ipa/meson.build | 14 +++++++-
src/libcamera/proxy/meson.build | 4 +--
src/libcamera/proxy/worker/meson.build | 4 +--
4 files changed, 65 insertions(+), 5 deletions(-)
create mode 100644 include/libcamera/ipa/core.mojom
diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
new file mode 100644
index 00000000..95d12b63
--- /dev/null
+++ b/include/libcamera/ipa/core.mojom
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+/*
+ * Any libcamera objects that are used by any interfaces that aren't defined
+ * in mojom must be declared here, and a (de)serializer be implemented as a
+ * template specialization of IPADataSerializer. In addition, the corresponding
+ * header file (or forward-declarations) must be included in {pipeline_name}.h.
+ *
+ * For libcamera types, the [hasFd] attribute is needed to notify the compiler
+ * that the struct embeds a FileDescriptor.
+ */
+struct CameraSensorInfo {};
+struct ControlInfoMap {};
+struct ControlList {};
+struct FileDescriptor {};
+
+/* \todo Define these structures fully in mojom. */
+[hasFd] struct IPABuffer {};
+struct IPASettings {};
+struct IPAStream {};
+
+/**
+ * \fn init()
+ * \brief Initialise the IPAInterface
+ * \param[in] settings The IPA initialization settings
+ *
+ * This function initializes the IPA interface. It shall be called before any
+ * other function of the IPAInterface. The \a settings carry initialization
+ * parameters that are valid for the whole life time of the IPA interface.
+ */
+
+/**
+ * \fn start()
+ * \brief Start the IPA
+ *
+ * This method informs the IPA module that the camera is about to be started.
+ * The IPA module shall prepare any resources it needs to operate.
+ *
+ * \return 0 on success or a negative error code otherwise
+ */
+
+/**
+ * \fn stop()
+ * \brief Stop the IPA
+ *
+ * This method informs the IPA module that the camera is stopped. The IPA module
+ * shall release resources prepared in start().
+ */
diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build
index d7a2b6b2..087f5bbd 100644
--- a/include/libcamera/ipa/meson.build
+++ b/include/libcamera/ipa/meson.build
@@ -13,6 +13,17 @@ install_headers(libcamera_ipa_headers,
# Prepare IPA/IPC generation components
#
+core_mojom_file = 'core.mojom'
+ipa_mojom_core = custom_target(core_mojom_file.split('.')[0] + '_mojom_module',
+ input : core_mojom_file,
+ output : core_mojom_file + '-module',
+ command : [
+ mojom_parser,
+ '--output-root', meson.build_root(),
+ '--input-root', meson.source_root(),
+ '--mojoms', '@INPUT@'
+ ])
+
ipa_mojom_files = []
ipa_mojoms = []
@@ -30,6 +41,7 @@ foreach file : ipa_mojom_files
mojom = custom_target(file.split('.')[0] + '_mojom_module',
input : file,
output : file + '-module',
+ depends : ipa_mojom_core,
command : [
mojom_parser,
'--output-root', meson.build_root(),
@@ -68,7 +80,7 @@ foreach file : ipa_mojom_files
# ipa_proxy_{pipeline}.h
proxy_header = custom_target(name + '_proxy_h',
input : mojom,
- output : 'ipa_proxy_' + name + '.h',
+ output : name + '_ipa_proxy.h',
depends : mojom_templates,
command : [
mojom_generator, 'generate',
diff --git a/src/libcamera/proxy/meson.build b/src/libcamera/proxy/meson.build
index 5965589f..a3f6b223 100644
--- a/src/libcamera/proxy/meson.build
+++ b/src/libcamera/proxy/meson.build
@@ -4,8 +4,8 @@
foreach mojom : ipa_mojoms
proxy = custom_target(mojom['name'] + '_proxy_cpp',
input : mojom['mojom'],
- output : 'ipa_proxy_' + mojom['name'] + '.cpp',
- depends : [mojom_templates],
+ output : mojom['name'] + '_ipa_proxy.cpp',
+ depends : mojom_templates,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
diff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build
index f3129b76..cc55078f 100644
--- a/src/libcamera/proxy/worker/meson.build
+++ b/src/libcamera/proxy/worker/meson.build
@@ -6,8 +6,8 @@ proxy_install_dir = join_paths(get_option('libexecdir'), 'libcamera')
foreach mojom : ipa_mojoms
worker = custom_target(mojom['name'] + '_proxy_worker',
input : mojom['mojom'],
- output : 'ipa_proxy_' + mojom['name'] + '_worker.cpp',
- depends : [mojom_templates],
+ output : mojom['name'] + '_ipa_proxy_worker.cpp',
+ depends : mojom_templates,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
--
2.27.0
More information about the libcamera-devel
mailing list