[Bug 671570] playbin: video freezes while audio continues normally when you disable subtitle

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Mon Oct 29 08:44:21 PDT 2012


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

--- Comment #9 from Sunil Angadi <sunilangadi.v at gmail.com> 2012-10-29 15:44:09 UTC ---
Created an attachment (id=227547)
 --> (https://bugzilla.gnome.org/attachment.cgi?id=227547)
gstreamer playbin pipeline

For the file I am playing attached is the pipeline.

Here are the observations:

The portion of interest is path
uridecobin1--inputselector--streamsync--subqueue (filesrc,reading the subtitle
file, is pushing the data to subqueue) and elements marked with * are threads.

Actually the video playback is not stuck forever but for about 6 mins(5:37 to
be precise), thereafter playback resumes.

Here is what is happening.
   a. Filesrc is pushing data to subqueue but subqueue seems to be full hence
this path is blocked and
      holds streamsynchronizer's 'pad stream lock' associated with text(sink
pad).
      [Independently, as an experiment, I put a breakpoint at gst_base_src_loop
at start-up and let it run freely with subtitles enabled.
      The breakpoint gets hit 5 times at start-up and thereafter it gets hit at
time 5:37; till then this path is blocked].
   b. Now, when subtitle are disabled main function tries to release
streamsynchronizer's pad associated with text and gets blocked
       since 'pad stream lock' is being taken as mentioned in point 'a'.
   c. Video is not being played because actual video rendering is being done by
main function(i.e main function has set the video sink(gstcluttersink) 
       to playbin2. Below given is piece of code which is waking up the main
loop for rendering a frame.

      static void
      clutter_gst_source_push (ClutterGstSource *gst_source,
                         GstBuffer        *buffer)
      {
        ClutterGstVideoSinkPrivate *priv = gst_source->sink->priv;

        g_mutex_lock (gst_source->buffer_lock);
        if (gst_source->buffer)
          gst_buffer_unref (gst_source->buffer);
        gst_source->buffer = gst_buffer_ref (buffer);
        g_mutex_unlock (gst_source->buffer_lock);

        g_main_context_wakeup (priv->clutter_main_context);
      }
      Cross checked that 'priv->clutter_main_context' corresponds to main
function main loop context.     

And finally video starts playing back after about 5 mins when the path
mentioned in point 'a' releases the 'stream lock' for pad that is being
released when subs get disabled.

All in all, seems like it is the problem with 'buffer size' being configured
for filesource in uridecodebin1/subqueue getting full i.e subqueue getting
drained at a slower rate and subtitle path getting blocked for about 5 minutes
after each time it reads the subtitle file.

-- 
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