gstreamer/subprojects/gst-plugins-base/gst
Yacine Bandou 03febb5048 streamsynchronizer: Fix deadlock when streams have been flushed before others start
To simplify the description, I'm assuming we only have two streams: video and audio.

For the video stream, we have the following events :
- STREAM_START => stream->wait set to true
- NEW_SEGMENT(1) => blocked waiting in gst_stream_synchronizer_wait
- FLUSH_START => unblocked
- FLUSH_STOP => stream->wait reset to false
- NEW_SEGMENT(2) => not waiting, since stream->wait is false

Then for the audio stream, we have the following events :
- STREAM_START => stream->wait set to true
- NEW_SEGMENT(2) => blocked waiting in gst_stream_synchronizer_wait for ever.

Note: The first NEW_SEGMENT event and the FLUSH_START, FLUSH_STOP events of the audio stream
are dropped before being received by the streamsynchronizer element, because the decodebin audio pad src
is not yet linked to the playsink audio pad sink.

To fix this deadlock, we don't reset stream->wait to false in the FLUSH_STOP event when it is not
waiting for the EOS of the other streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6763>
2024-05-20 20:31:11 +00:00
..
adder meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
app meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioconvert audioconvert: add possibility to reorder input channels 2024-04-22 12:06:11 +02:00
audiomixer meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audiorate meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioresample audioconvert, audioresample, audiofilter: fix divide by 0 for input buffer without caps 2022-11-26 08:47:49 +00:00
audiotestsrc audiotestsrc: Initialize all samples in wave=ticks mode 2023-04-22 08:44:02 +00:00
compositor gst: Move GstQueueArray as GstVecDeque to core 2024-05-06 18:25:42 +00:00
debugutils debug: delete reference to gstdump script 2023-11-22 11:45:38 +01:00
dsd dsd: Add code for DSD audio support 2023-06-23 01:27:03 +00:00
encoding encodebin: Fix pad removal for encodebin vs encodebin2 2024-04-18 09:11:58 +00:00
gio gio: Drop some trailing whitespace in giobasesink 2023-10-04 12:56:03 +00:00
overlaycomposition video-filters: Fix passthrough with ANY caps feature 2023-10-03 21:13:00 +00:00
pbtypes meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
playback streamsynchronizer: Fix deadlock when streams have been flushed before others start 2024-05-20 20:31:11 +00:00
rawparse video: Add arbitrary tile dimensions support 2022-11-18 22:59:29 +00:00
subparse subparse: Don't unref seek event twice if forwarding it directly failed 2024-05-20 16:16:06 +00:00
tcp meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
typefind typefind: Handle WavPack block sizes > 131072 2024-04-04 15:10:02 +00:00
videoconvertscale gstcudaconvertscale, gstvavpp, videoconvertscale: downgrade 'Can't keep DAR' to debug 2024-03-13 16:06:56 +00:00
videorate videorate: Reset last_ts when a new segment is received 2024-04-02 21:06:21 +00:00
videotestsrc videotestsrc: fix max value for timestamp-offset 2023-09-28 17:32:36 +00:00
volume volume: Expose the volume-full-range as another property 2024-02-27 12:33:44 +00:00
meson.build debug: add new element fakevideodec 2023-11-17 15:57:46 +00:00