[gstreamer-bugs] [Bug 577288] New: "Internal playbin error" when seeking to the end of files

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Mon Mar 30 03:06:23 PDT 2009


If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
  http://bugzilla.gnome.org/show_bug.cgi?id=577288

  GStreamer | gst-plugins-base | Ver: 0.10.22
           Summary: "Internal playbin error" when seeking to the end of
                    files
           Product: GStreamer
           Version: 0.10.22
          Platform: Other
        OS/Version: All
            Status: UNCONFIRMED
          Severity: minor
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: csaba.kos at gmail.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


DESCRIPTION:
When using "Songbird 1.1.1" on Mac/Linux/Win32, seeking to the end of a song
using the seek bar sometimes results in an error message: "Internal playbin
error."

******** Relevant log output ********
playbin2 gstplaybin2.c:1910:no_more_pads_cb:<player> no more pads in group
0x938ae0

(<unknown>:21033): GStreamer-CRITICAL **: gst_ghost_pad_new: assertion
`!gst_pad_is_linked (target)' failed

(<unknown>:21033): GStreamer-CRITICAL **: gst_pad_link_prepare: assertion
`GST_IS_PAD (sinkpad)' failed
playbin2 gstplaybin2.c:1925:no_more_pads_cb:<player> linked type audio/x-raw-,
result: -6
playbin2 gstplaybin2.c:1929:no_more_pads_cb:<player> error: Internal playbin
error.
playbin2 gstplaybin2.c:1929:no_more_pads_cb:<player> error: Failed to link
selector to sink. Error -6
******** Relevant log output ********


POSSIBLE REASON:
I'm a beginner to gstreamer, but it seems to me that the problem might be the
following:
1. In gstplaysink.c (from gst-plugins-base 0.10.22, lines 1532-1546), an
"audiotee" element is created lazily.
2. After that, a ghost pad is created (lines 1547-1552):
 playsink->audio_pad =
            gst_ghost_pad_new ("audio_sink", playsink->audio_tee_sink);
3. At some point, the ghost pad is released in gst_play_sink_release_pad()
(lines 1592-1615).
4. Next time when a ghost pad is created in step 2 above, the
"playsink->audio_tee_sink" element is still linked to some other element,
therefore gst_ghost_pad_new() asserts and fails.

So in short, the problem seems to be that no one unlinks the audio_tee_sink
element from its peer.



SUGGESTION:
Unlink the audio_tee_sink element in gst_play_sink_release_pad(). For example,
add the following line to gstplaysink.c (line 1603):
gst_pad_unlink(playsink->audio_tee_sink->peer, playsink->audio_tee_sink);

So that it will look like;
  } else if (pad == playsink->audio_pad) {
    res = &playsink->audio_pad;
    gst_pad_unlink(playsink->audio_tee_sink->peer, playsink->audio_tee_sink);
// line 1603
  } else if (pad == playsink->text_pad) {

This solves the problem for me, and it seems that it does not introduce any
other problems.


-- 
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.

You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=577288.




More information about the Gstreamer-bugs mailing list