Documentation: Update the "Start an event loop" section

Event loop was moved to be a part of CameraManager, so it is no longer
a user responsibility to control the event dispatching.

Signed-off-by: Daniel Semkowicz <dse@thaumatec.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Daniel Semkowicz 2022-06-17 16:35:49 +02:00 committed by Laurent Pinchart
parent d85a91cf56
commit d2c097c482

View file

@ -27,10 +27,12 @@ defined names and types without the need of prefixing them.
#include <iomanip> #include <iomanip>
#include <iostream> #include <iostream>
#include <memory> #include <memory>
#include <thread>
#include <libcamera/libcamera.h> #include <libcamera/libcamera.h>
using namespace libcamera; using namespace libcamera;
using namespace std::chrono_literals;
int main() int main()
{ {
@ -506,35 +508,27 @@ and queue all the previously created requests.
for (std::unique_ptr<Request> &request : requests) for (std::unique_ptr<Request> &request : requests)
camera->queueRequest(request.get()); camera->queueRequest(request.get());
Start an event loop Event processing
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
The libcamera library needs an event loop to monitor and dispatch events libcamera creates an internal execution thread at `CameraManager::start()`_
generated by the video devices part of the capture pipeline. libcamera provides time to decouple its own event processing from the application's main thread.
its own ``EventDispatcher`` class (inspired by the `Qt event system`_) to Applications are thus free to manage their own execution opportunely, and only
process and deliver events generated by ``EventNotifiers``. need to respond to events generated by libcamera emitted through signals.
.. _Qt event system: https://doc.qt.io/qt-5/eventsandfilters.html .. _CameraManager::start(): https://libcamera.org/api-html/classlibcamera_1_1CameraManager.html#a49e322880a2a26013bb0076788b298c5
The libcamera library implements this by creating instances of the Real-world applications will likely either integrate with the event loop of the
``EventNotifier`` class, which models a file descriptor event source registered framework they use, or create their own event loop to respond to user events.
to an ``EventDispatcher``. Whenever the ``EventDispatcher`` detects an event on For the simple application presented in this example, it is enough to prevent
a notifier it is monitoring, it emits the notifier's immediate termination by pausing for 3 seconds. During that time, the libcamera
``EventNotifier::activated`` signal. The libcamera components connect to the thread will generate request completion events that the application will handle
notifiers' signals and emit application visible events, such as the in the ``requestComplete()`` slot connected to the ``Camera::requestCompleted``
``Camera::bufferReady`` and ``Camera::requestCompleted`` signals. signal.
The code below retrieves a reference to the system-wide event dispatcher and for
the a fixed duration of 3 seconds, processes all the events detected in the
system.
.. code:: cpp .. code:: cpp
EventDispatcher *dispatcher = cm->eventDispatcher(); std::this_thread::sleep_for(3000ms);
Timer timer;
timer.start(3000);
while (timer.isRunning())
dispatcher->processEvents();
Clean up and stop the application Clean up and stop the application
--------------------------------- ---------------------------------