[libcamera-devel] [PATCH v3 00/17] Python bindings event handling
Tomi Valkeinen
tomi.valkeinen at ideasonboard.com
Fri Jul 1 10:45:04 CEST 2022
Hi,
v3 introduces an alternative new event system compared to the v2. I like
this one much better. It's much simpler and more understandable.
The series has been re-arranged a bit so that up to, and including, the
"py: Switch to non-blocking eventfd" patch, there are no API changes.
Except a small thing, the change to non-blocking. Afaik this should not
cause breakage in picamera2. These can be merged after reviews.
Then we break the API with the use of exceptions instead of return
codes. And continue by adding the new API for the events, but keeping
the deprecated get_ready_requests.
One particular thing I want to mention about the new event system is
that most of the events are always subscribed, so the user will e.g. get
CameraAdded event without specifically subscribing to it. The only
exception is the BufferCompleted event, and I had no other reason for
this than I just thought it's rarely used (?), we get it every frame,
and thus making it opt-in reduces the extra overhead. But I really have
no idea if it's really rarely used, and if the overhead is even
noticeable.
I first tried with a full opt-in approach, but I'm not sure what would
be a good API for that. I tried with a setEvents(event_mask) but that's
not very nice to use. We could perhaps have a container struct with a
bool for each event type, so that you'd do something like:
cm.enabled_events.buffer_completed = True
cm.enabled_events.camera_added = True
Or we could add a parameter to camera.start() to define which events the
user is interested in (but this wouldn't cover Camera Added/Removed).
Tomi
Tomi Valkeinen (17):
py: cam.py: Fix multi camera capture without -C
py: Add Python logging category
py: Move ControlValue helpers to py_helpers.cpp
py: cam.py: Remove todo comment
py: Create PyCameraManager
py: Use UniqueFD
py: Set EFD_CLOEXEC on eventfd to avoid fd leaking
py: Use libcamera's Mutex classes
py: Switch to non-blocking eventfd
py: Use exceptions instead of returning error codes
py: New event handling
py: cam.py: Use new events support
py: unittests.py: Use new events support
py: simple-capture.py: Use new events support
py: simple-continuous-capture.py: Use new events support
py: simple-cam.py: Use new events support
py: Add hotplug-monitor.py
src/py/cam/cam.py | 55 ++--
src/py/examples/hotplug-monitor.py | 39 +++
src/py/examples/simple-cam.py | 31 +-
src/py/examples/simple-capture.py | 41 +--
src/py/examples/simple-continuous-capture.py | 37 +--
src/py/libcamera/meson.build | 2 +
src/py/libcamera/py_camera_manager.cpp | 286 ++++++++++++++++++
src/py/libcamera/py_camera_manager.h | 95 ++++++
src/py/libcamera/py_helpers.cpp | 97 ++++++
src/py/libcamera/py_helpers.h | 13 +
src/py/libcamera/py_main.cpp | 297 +++++++------------
src/py/libcamera/py_main.h | 14 +
test/py/unittests.py | 93 +++---
13 files changed, 781 insertions(+), 319 deletions(-)
create mode 100644 src/py/examples/hotplug-monitor.py
create mode 100644 src/py/libcamera/py_camera_manager.cpp
create mode 100644 src/py/libcamera/py_camera_manager.h
create mode 100644 src/py/libcamera/py_helpers.cpp
create mode 100644 src/py/libcamera/py_helpers.h
create mode 100644 src/py/libcamera/py_main.h
--
2.34.1
More information about the libcamera-devel
mailing list