gstreamer/subprojects/gst-plugins-base/gst
Yacine Bandou 1b191d1d8d 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/6887>
2024-05-23 17:51:02 +01: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: set mix-matrix when user changes it to empty 2024-03-01 11:58:57 +00: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 meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +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: Add the parser before timestamper to tosync list 2024-03-29 19:45:23 +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-23 17:51:02 +01:00
rawparse video: Add arbitrary tile dimensions support 2022-11-18 22:59:29 +00:00
subparse subparsers: Give proper category to subtitle "decoders" 2024-02-22 14:39:54 +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 17:33:48 +01:00
videoconvertscale video-filters: Fix passthrough with ANY caps feature 2023-10-03 21:13:00 +00:00
videorate videorate: Reset last_ts when a new segment is received 2024-04-03 00:33:15 +01:00
videotestsrc videotestsrc: add mutex around cache buffer to prevent race condition 2024-05-21 14:48:14 +01: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