After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 774322 - playbin3: can't disable audio/video via flags property
playbin3: can't disable audio/video via flags property
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
unspecified
Other Linux
: Normal minor
: 1.10.1
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2016-11-12 14:28 UTC by Tim-Philipp Müller
Modified: 2016-11-16 13:48 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
multiqueue: Make sure not-linked streams get woken up (5.47 KB, patch)
2016-11-16 12:24 UTC, Jan Schmidt
committed Details | Review

Description Tim-Philipp Müller 2016-11-12 14:28:32 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"
Comment 1 Wonchul Lee 2016-11-14 08:10:59 UTC
Haven't yet found the root cause, but the relevant property is Multiqueue's "sync-by-running-time".
Comment 2 Jan Schmidt 2016-11-16 12:24:35 UTC
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.
Comment 3 Jan Schmidt 2016-11-16 12:24:57 UTC
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.
Comment 4 Jan Schmidt 2016-11-16 13:47:53 UTC
Pushing after a review on IRC.