pipewire/spa
Barnabás Pőcze 7b4713ec73 spa: libcamera: manager: keep libcamera::CameraManager
At the moment, the camera manager shared pointer is released when the last
listener is removed, and recreated when the first listener is added. This
is the same behaviour that the alsa and v4l2 monitors implement with their
respective udev, inotify monitors.

However, for `libcamera::CameraManager`, this is likely not the best way
for multiple reasons:

  (a) it is a complex object with significant construction and starting cost,
      which includes starting threads and usually loading shared libraries;
  (b) usually one listener is added right after creating, and it is removed
      right before destruction, in which there are real no advantages;
  (c) the camera manager, being a shared resource, might very well be kept
      alive by some other component, in which case there is again not much
      real benefit.

So simplify the code by getting a camera manager reference at the beginning
and keeping it until the libcamera monitor is destroyed.

This also fixes a race condition where a hot-plugged camera might not have
been detected if the libcamera event was emitted between these two:

  collect_existing_devices(impl);
  start_monitor(impl);

(cherry picked from commit 8614fc45f8)
2025-09-26 09:58:10 +02:00
..
examples Port videotestsrc to LoopUtils 2024-07-01 15:28:14 +00:00
include meta: add SPA_META_SYNC_TIMELINE_UNSCHEDULED_RELEASE 2025-09-11 09:48:21 +02:00
include-private/spa-private spa: move dbus helpers out of bluez plugin 2024-02-05 13:03:20 +00:00
lib spa: remove some old includes 2024-11-26 13:30:58 +01:00
plugins spa: libcamera: manager: keep libcamera::CameraManager 2025-09-26 09:58:10 +02:00
tests Add GNU/Hurd support 2023-09-24 15:11:52 +00:00
tools spa: add spa_json_object_next 2024-09-16 09:50:36 +02:00
meson.build spa: fix ALSA UMP support detection in meson 2025-03-11 12:27:25 +01:00