mpegtsbase: Error out on EOS without any pad
authorEdward Hervey <edward.hervey@collabora.co.uk>
Thu, 1 Mar 2012 16:59:57 +0000 (17:59 +0100)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Thu, 1 Mar 2012 17:15:51 +0000 (18:15 +0100)
Avoids ending up with hanging pipelines

gst/mpegtsdemux/mpegtsbase.c

index a62314fd917657af4fe97cff3289f29e8602a46d..0f6a308c82bb7f7e27c55a75312eff1e07ab3b71 100644 (file)
@@ -1439,9 +1439,16 @@ error:
   {
     const gchar *reason = gst_flow_get_name (ret);
     GST_DEBUG_OBJECT (base, "Pausing task, reason %s", reason);
-    if (ret == GST_FLOW_UNEXPECTED)
-      GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, gst_event_new_eos ());
-    else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
+    if (ret == GST_FLOW_UNEXPECTED) {
+      /* Push EOS downstream */
+      if (!GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base,
+              gst_event_new_eos ())) {
+        /* If that failed, emit an error so the pipeline can be stopped */
+        GST_ELEMENT_ERROR (base, STREAM, DEMUX, (NULL),
+            ("got eos but no streams (yet)"));
+
+      }
+    } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
       GST_ELEMENT_ERROR (base, STREAM, FAILED,
           (_("Internal data stream error.")),
           ("stream stopped, reason %s", reason));