[Bug 701997] [regression] playbin: loses audio clock and hangs when switching songs after about-to-finish

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue Jun 18 06:26:29 PDT 2013


https://bugzilla.gnome.org/show_bug.cgi?id=701997
  GStreamer | gst-plugins-base | git

--- Comment #6 from Edward Hervey <bilboed at gmail.com> 2013-06-18 13:26:23 UTC ---
The observed path goes like this:

0) standard playback, except that the sink selection is now done in playbin and
not playsink, therefore group->audio_sink gets set to the sink used in
playsink. This doesn't cause any issue ... for the time being. In this case
pulsesink is used.

... playback of first URI ....

1) the uridecodebin gets drained, about-to-finish is notified, a new URI gets
set and therefore setup_next_source gets called

2) setup_next_source

2.1) calls deactivate_group on the old (drained) group

2.1.1) unlinks selectors, releases playsink pads, NULLs/unrefs selectors. That
part is fine

2.1.2) .. but then it compares the group->audio_sink to playbin->audio_sink and
considers it as a custom sink so sets it to NULL and unrefs it. This is wrong
IMHO. Changing states of elements still being used in playsink should not be
playbin's responsibility. Note that the audio_sink is *still* present in
playsink, it was not removed from it !

2.1.3) due to setting pulsesink to NULL, a clock-lost message is posted on the
bus, the bins/pipeline know they will need to grab a new clock

3) ... I gave up trying to follow what happens after that, but essentially
there is a race betwen playbin (and contents) going to PLAYING and people
fighting over whether pulsesink should go to NULL or PLAYING, the end result
being that when playbin asks for someone to provide a clock, pulsesink is in
NULL, doesn't have a valid ringbuffer, and therefore doesn't return a clock


The first part that really makes me uncomfortable is 2.1.2 ....

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list