[PATCH 0/3] gstreamer: Generate controls from control_ids_*.yaml files
Jaslo Ziska
jaslo at ziska.de
Mon Aug 5 11:28:35 CEST 2024
Hi everyone,
in this patchset I implemented libcamerasrc properties which are generated from
the control_ids_*.yaml files.
The first commit removes the auto-focus-mode property which was already
implemented (it is added again in the next commit).
The second commit adds a Python script to generate C++ code capable of
interacting with the controls and adds the controls to libcamerasrc.
The third commit is just a small fix for the missing closing "greater than"
symbol in the author string I noticed.
The gstlibcamera-controls.h file is taken from Nicolas' branch with the change
that I removed the enum with the control names from the class. Instead the enum
variants from libcamera::controls:: are now used directly.
The structure of the gstlibcamera-controls.cpp.in file is also taken from
Nicolas. The only change is that its content now gets generated by
gen-gst-controls.py
The boilerplate of gen-gst-controls.py is mostly copied from gen-controls.py.
This is also where I have some questions:
The definition of the ControlEnum and Control Python classes (and some helper
functions) is now duplicate code. Should this be handled differently somehow to
avoid the code duplication?
I haven't added a copyright to gen-gst-controls.py yet as I am not sure because
I copied much of it from gen-controls.py.
Another small issue is that I haven't implemented the Rectangle type yet and
thus the controls using it won't show up. The reason for this is that there
is the AfWindows control which is an array of Rectangles. As the gstreamer
properties can only be glib types I wasn't sure what to do here: For a
single Rectangle you could use an array and make the entries (x, y, w, h)
but what about an array of Rectangles? Should it use an array with 4 * N
entries, so (x, y, w, h) for each value?
At the moment the gstreamer properties all have zero (or the first enum value)
as a default and the minimum and maximum numeric values as minimum and maximum
values for numbers. Also all controls are defined as readable and writeable.
Because of this (maybe as a discussion) I have a small wish list of things I'd
like to see added in the control_ids_*.yaml files which would greatly improve
the gstreamer properties:
For enum and bool controls: the default value if available.
For numeric controls: the minimum, maximum and default value.
And for all controls: whether it is read-only, write-only or read-write.
Best regards,
Jaslo
Jaslo Ziska (3):
gstreamer: Remove auto-focus-mode property
gstreamer: Generate controls from control_ids_*.yaml files
gstreamer: Fix missing "greater than" symbol in author string
src/gstreamer/gstlibcamera-controls.cpp.in | 46 +++
src/gstreamer/gstlibcamera-controls.h | 36 ++
src/gstreamer/gstlibcamerasrc.cpp | 47 +--
src/gstreamer/meson.build | 14 +
utils/gen-gst-controls.py | 398 +++++++++++++++++++++
utils/meson.build | 1 +
6 files changed, 510 insertions(+), 32 deletions(-)
create mode 100644 src/gstreamer/gstlibcamera-controls.cpp.in
create mode 100644 src/gstreamer/gstlibcamera-controls.h
create mode 100755 utils/gen-gst-controls.py
--
2.46.0
More information about the libcamera-devel
mailing list