[libcamera-devel] [PATCH v1 0/5] cam: Move request processing to main thread
Umang Jain
email at uajain.com
Wed Nov 18 10:49:53 CET 2020
Hi Laurent,
Ack for the entire series:
Acked-by: Umang Jain <email at uajain.com>
I found a typo in patch 4/5 's commit message but since this series is
already, let it be. Thanks for your work. :)
On 11/13/20 12:08 PM, Laurent Pinchart wrote:
> Hello,
>
> This patch series improves the cam application by moving request
> processing to the main thread to avoid blocking the camera manager
> thread (in which the request completion signal is emitted) for extended
> periods of time. This helps meeting the realtime constraints of pipeline
> handlers.
>
> Note that move requesting processing to a different thread isn't a
> magical solution, if the average processing time for a request is larger
> than the frame interval, a request queue underrun will still occur. It
> however helps handling random delays in request processing.
>
> Included in the series is a move to libevent to implement the cam event
> loop. The event loop is currently based on the libcamera event
> dispatcher for historical reasons. The event dispatcher API exposed by
> libcamera is incomplete, as thread support is internal to libcamera.
> Instead of reimplementing the missing parts in the cam event loop, or
> exposing thread support in the libcamera public API, moving to libevent
> allows making the event dispatcher implementation fully private (in
> patch 3/5). It isn't the job of libcamera to provide such generic APIs.
>
> Laurent Pinchart (5):
> test: Get event dispatcher from current thread
> cam: Use libevent to implement event loop
> libcamera: Move EventDispatcher to internal API
> cam: event_loop: Add deferred calls support
> cam: Move request processing to main thread
>
> include/libcamera/camera_manager.h | 4 --
> .../{ => internal}/event_dispatcher.h | 0
> .../internal/event_dispatcher_poll.h | 2 +-
> .../libcamera/{ => internal}/event_notifier.h | 0
> include/libcamera/internal/meson.build | 3 +
> include/libcamera/{ => internal}/timer.h | 0
> include/libcamera/meson.build | 3 -
> src/cam/capture.cpp | 9 +++
> src/cam/capture.h | 1 +
> src/cam/event_loop.cpp | 63 ++++++++++++++++---
> src/cam/event_loop.h | 24 ++++---
> src/cam/main.cpp | 16 ++---
> src/cam/meson.build | 13 +++-
> src/libcamera/camera_manager.cpp | 44 +------------
> src/libcamera/device_enumerator_udev.cpp | 3 +-
> src/libcamera/event_dispatcher.cpp | 2 +-
> src/libcamera/event_dispatcher_poll.cpp | 5 +-
> src/libcamera/event_notifier.cpp | 4 +-
> src/libcamera/ipc_unixsocket.cpp | 3 +-
> src/libcamera/pipeline/rkisp1/timeline.h | 3 +-
> src/libcamera/process.cpp | 3 +-
> .../proxy/worker/ipa_proxy_linux_worker.cpp | 2 +-
> src/libcamera/thread.cpp | 3 +-
> src/libcamera/timer.cpp | 4 +-
> src/libcamera/v4l2_device.cpp | 3 +-
> src/libcamera/v4l2_videodevice.cpp | 2 +-
> test/camera/buffer_import.cpp | 8 +--
> test/camera/capture.cpp | 9 ++-
> test/event-dispatcher.cpp | 5 +-
> test/event-thread.cpp | 5 +-
> test/event.cpp | 7 +--
> test/hotplug-cameras.cpp | 4 +-
> test/ipa/ipa_interface_test.cpp | 6 +-
> test/ipc/unixsocket.cpp | 5 +-
> test/log/log_process.cpp | 4 +-
> test/object-invoke.cpp | 2 +-
> test/process/process_test.cpp | 5 +-
> test/timer-thread.cpp | 5 +-
> test/timer.cpp | 5 +-
> test/v4l2_videodevice/buffer_sharing.cpp | 4 +-
> test/v4l2_videodevice/capture_async.cpp | 4 +-
> test/v4l2_videodevice/v4l2_m2mdevice.cpp | 4 +-
> 42 files changed, 159 insertions(+), 142 deletions(-)
> rename include/libcamera/{ => internal}/event_dispatcher.h (100%)
> rename include/libcamera/{ => internal}/event_notifier.h (100%)
> rename include/libcamera/{ => internal}/timer.h (100%)
>
More information about the libcamera-devel
mailing list