mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
The handling of `impl::pendingRequests` is a bit problematic because, for example, during startup, if `spa_libcamera_buffer_recycle()` observes that `impl::active == false`, then it will try to append to `impl::pendingRequests`, which is being iterated in the main thread in `spa_libcamera_stream_on()`. That is not allowed on an `std::deque`. So instead remove it altogether, and simply queue all requests when starting. After `libcamera::Camera::stop()` returns, every request is guaranteed not to be used by libcamera, and they can be freely reused, so this is safe to do. This also removes the need for calling `spa_libcamera_buffer_recycle()` when the buffers are set/unset on a port since that function no longer changes anything apart from updating `buffer::flags` but `spa_libcamera_alloc_buffers()` is modified appropriately to take care of that. And in the case of `spa_libcamera_clear_buffers()` clearing the flag is not required because the next `spa_libcamera_alloc_buffers()` call will reset reset the flags. |
||
|---|---|---|
| .. | ||
| libcamera-device.cpp | ||
| libcamera-manager.cpp | ||
| libcamera-manager.hpp | ||
| libcamera-source.cpp | ||
| libcamera.c | ||
| libcamera.h | ||
| meson.build | ||