GNOME Bugzilla – Bug 774322
playbin3: can't disable audio/video via flags property
Last modified: 2016-11-16 13:48:21 UTC
This doesn't work. It will freeze immediately or after 1-2 seconds: No audio - plays video for 1-2 seconds, then freezes: gst-launch-1.0 playbin3 uri=file:///foo.mkv flags="soft-colorbalance+deinterlace+soft-volume+text+video" No video - plays audio for 1-2 seconds, then stops (no video though, that's good): gst-launch-1.0 playbin3 uri=file:///foo.mkv flags="soft-colorbalance+deinterlace+soft-volume+text+audio"
Haven't yet found the root cause, but the relevant property is Multiqueue's "sync-by-running-time".
The problem here is: * Multiqueue is in sync-by-running-time mode, and hence using a 'high time' per pad group to advance not-linked pads * There is only 1 pad in each group (1 video, 1 audio) * In that case, the group-high-time is set to the global mq high-time, to follow behind any other groups * the not-linked video pad gets the mq->high_time taken from the audio stream, then goes to sleep * per-group high time is only recomputed when a pad from the group has pushed something, so after the single video pad goes to sleep, nothing will ever recompute its high-time My proposed patch keeps the group_high_time = NONE in such single-pad groups, and uses that as a flag to check them against the global high time instead, which is always recomputed.
Created attachment 340011 [details] [review] multiqueue: Make sure not-linked streams get woken up When running in sync-by-running-time mode, pad groups that have exactly 1 pad and it's not-linked might never wake up after computing a high time, as the per-pad-group high time was only recomputed when a pad in the group advances. Wake those up using the global multiqueue high-time across all other groups instead.
Pushing after a review on IRC.