[libcamera-devel] [PATCH 3/3] Documentation: Update the "Start an event loop" section

Jacopo Mondi jacopo at jmondi.org
Thu Jun 16 13:06:39 CEST 2022


Hi Daniel,

   I wonder if we shouldn't just drop the whole

Start an event loop
~~~~~~~~~~~~~~~~~~~

paragraph

On Wed, Jun 15, 2022 at 06:26:01PM +0200, Daniel Semkowicz via libcamera-devel wrote:
> Event loop was moved to be a part of CameraManager, so it is no longer
> a user responsibility to control the event dispatching.
> ---
>  .../guides/application-developer.rst          | 20 ++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/guides/application-developer.rst b/Documentation/guides/application-developer.rst
> index 00bafb10..97c032a5 100644
> --- a/Documentation/guides/application-developer.rst
> +++ b/Documentation/guides/application-developer.rst
> @@ -27,10 +27,12 @@ defined names and types without the need of prefixing them.
>     #include <iomanip>
>     #include <iostream>
>     #include <memory>
> +   #include <thread>
>
>     #include <libcamera/libcamera.h>
>
>     using namespace libcamera;
> +   using namespace std::chrono_literals;
>
>     int main()
>     {
> @@ -506,7 +508,7 @@ and queue all the previously created requests.
>     for (std::unique_ptr<Request> &request : requests)
>         camera->queueRequest(request.get());
>
> -Start an event loop
> +Event loop
>  ~~~~~~~~~~~~~~~~~~~
>
>  The libcamera library needs an event loop to monitor and dispatch events
> @@ -524,17 +526,17 @@ a notifier it is monitoring, it emits the notifier's
>  notifiers' signals and emit application visible events, such as the
>  ``Camera::bufferReady`` and ``Camera::requestCompleted`` signals.
>
> -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.
> +Event loop is handled internally by ``CameraManager`` instance in a separate
> +thread. ``CameraManager::start()`` creates a new thread and starts the event
> +loop processing.
> +
> +As the ``CameraManager`` was already started in our example, we need to prevent
> +the immediate termination of the application. The code below pauses the main
> +thread for 3 seconds, so that the event loop thread can process the requests.
>
>  .. code:: cpp
>
> -   EventDispatcher *dispatcher = cm->eventDispatcher();
> -   Timer timer;
> -   timer.start(3000);
> -   while (timer.isRunning())
> -       dispatcher->processEvents();
> +   std::this_thread::sleep_for(3000ms);
>
>  Clean up and stop the application
>  ---------------------------------
> --
> 2.34.1
>


More information about the libcamera-devel mailing list