decodebin: Do not block on sticky and oob events
authorMatej Knopp <matej.knopp@gmail.com>
Mon, 16 Apr 2012 11:43:41 +0000 (13:43 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 Apr 2012 11:49:07 +0000 (13:49 +0200)
gst/playback/gstdecodebin2.c

index b2cb4ee..b2d271e 100644 (file)
@@ -3752,6 +3752,14 @@ source_pad_blocked_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
   GstDecodeChain *chain;
   GstDecodeBin *dbin;
 
+  if ((GST_PAD_PROBE_INFO_TYPE (info) & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) &&
+      (GST_EVENT_IS_STICKY (GST_PAD_PROBE_INFO_EVENT (info))
+          || !GST_EVENT_IS_SERIALIZED (GST_PAD_PROBE_INFO_EVENT (info)))) {
+    /* do not block on sticky or out of band events otherwise the allocation query
+       from demuxer might block the loop thread */
+    return GST_PAD_PROBE_PASS;
+  }
+
   chain = dpad->chain;
   dbin = chain->dbin;