[libcamera-devel] [PATCH v3 03/23] libcamera: Introduce internal controls

Jacopo Mondi jacopo at jmondi.org
Thu Jun 30 15:38:42 CEST 2022


Introduce the enumeration of internal controls in
internal_control_ids.yaml.

Plumb in the build system the command to generate the definition of
internal controls by re-using the same mechanism used for public
controls to make it easy to extend it to also handle internal properties
in future.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois at yoseli.org>
---
 include/libcamera/internal/meson.build  | 15 ++++++++++++++
 src/libcamera/internal_control_ids.yaml | 27 +++++++++++++++++++++++++
 src/libcamera/meson.build               | 17 ++++++++++++++++
 3 files changed, 59 insertions(+)
 create mode 100644 src/libcamera/internal_control_ids.yaml

diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
index 7a780d48ee57..1559c3c368c4 100644
--- a/include/libcamera/internal/meson.build
+++ b/include/libcamera/internal/meson.build
@@ -9,6 +9,21 @@ libcamera_tracepoint_header = custom_target(
     command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
 )
 
+# Generate the list of internal controls identifiers
+internal_control_source_files = ['control_ids']
+
+libcamera_internal_control_headers = []
+
+foreach header : internal_control_source_files
+    input_files = files('../../../src/libcamera/internal_' + header +'.yaml',\
+                        '../' + header + '.h.in')
+    libcamera_internal_control_headers += custom_target(
+            'internal_' + header + '_h',
+            input : input_files,
+            output : header + '.h',
+            command : [gen_controls, '--internal=True','-o', '@OUTPUT@', '@INPUT@'])
+endforeach
+
 libcamera_internal_headers = files([
     'bayer_format.h',
     'byte_stream_buffer.h',
diff --git a/src/libcamera/internal_control_ids.yaml b/src/libcamera/internal_control_ids.yaml
new file mode 100644
index 000000000000..6d3775afcf67
--- /dev/null
+++ b/src/libcamera/internal_control_ids.yaml
@@ -0,0 +1,27 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# Copyright (C) 2022, Google Inc.
+#
+%YAML 1.2
+---
+# Enumeration of internal libcamera controls
+# Not exposed to application, for library use only
+
+controls:
+
+  - ExposureTime:
+      type: int32_t
+      description: |
+        The sensor exposure time in milliseconds.
+
+  - FrameDuration:
+      type: int64_t
+      description: |
+        The sensor frame duration time in milliseconds.
+
+  - AnalogueGain:
+      type: float
+      description: |
+        The sensor analogue gain value.
+
+...
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index b57bee7ef6ca..89fdf347c708 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -52,6 +52,7 @@ libcamera_sources = files([
 libcamera_sources += libcamera_public_headers
 libcamera_sources += libcamera_generated_ipa_headers
 libcamera_sources += libcamera_tracepoint_header
+libcamera_sources += libcamera_internal_control_headers
 
 includes = [
     libcamera_includes,
@@ -99,6 +100,7 @@ if not libyaml.found()
     libyaml = libyaml_wrap.dependency('yaml')
 endif
 
+# Generate control_ids.cpp and property_ids.cpp
 control_sources = []
 
 foreach source : control_source_files
@@ -111,6 +113,21 @@ endforeach
 
 libcamera_sources += control_sources
 
+# Generate internal_control_ids.cpp
+internal_control_source_files = ['control_ids']
+internal_control_sources = []
+
+foreach source : internal_control_source_files
+    input_files = files('internal_' + source +'.yaml', source + '.cpp.in')
+    internal_control_sources += custom_target('internal_' + source + '_cpp',
+                                              input : input_files,
+                                              output : 'internal_' + source + '.cpp',
+                                              command : [gen_controls, '--internal=True',\
+                                                                       '-o', '@OUTPUT@',\
+                                                                       '@INPUT@'])
+endforeach
+libcamera_sources += internal_control_sources
+
 gen_version = meson.project_source_root() / 'utils' / 'gen-version.sh'
 
 # Use vcs_tag() and not configure_file() or run_command(), to ensure that the
-- 
2.36.1



More information about the libcamera-devel mailing list