mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
03febb5048
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> |
||
---|---|---|
.. | ||
gstdecodebin2.c | ||
gstdecodebin3-parse.c | ||
gstdecodebin3.c | ||
gstparsebin.c | ||
gstplay-enum.c | ||
gstplay-enum.h | ||
gstplaybackelement.c | ||
gstplaybackelements.h | ||
gstplaybackplugin.c | ||
gstplaybackutils.c | ||
gstplaybackutils.h | ||
gstplaybin2.c | ||
gstplaybin3.c | ||
gstplaysink.c | ||
gstplaysink.h | ||
gstplaysinkaudioconvert.c | ||
gstplaysinkaudioconvert.h | ||
gstplaysinkconvertbin.c | ||
gstplaysinkconvertbin.h | ||
gstplaysinkvideoconvert.c | ||
gstplaysinkvideoconvert.h | ||
gstrawcaps.h | ||
gststreamsynchronizer.c | ||
gststreamsynchronizer.h | ||
gstsubtitleoverlay.c | ||
gstsubtitleoverlay.h | ||
gsturidecodebin.c | ||
gsturidecodebin3.c | ||
gsturisourcebin.c | ||
meson.build |