mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-13 23:39:44 +03:00
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:
parent
d85a91cf56
commit
d2c097c482
1 changed files with 17 additions and 23 deletions
|
@ -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
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue