gst/avi/gstavidemux.*: Third attempt, use gst_pad_is_linked() this time.
authorTim-Philipp Müller <tim@centricular.net>
Sat, 4 Feb 2006 15:41:43 +0000 (15:41 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 4 Feb 2006 15:41:43 +0000 (15:41 +0000)
Original commit message from CVS:
* gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
(gst_avi_demux_all_source_pads_unlinked),
(gst_avi_demux_process_next_entry):
* gst/avi/gstavidemux.h:
Third attempt, use gst_pad_is_linked() this time.

ChangeLog
gst/avi/gstavidemux.c
gst/avi/gstavidemux.h

index 8f9c64ce4103ed9a139bd39820a428793a8b8d04..e34adcd8c1a38ae889189fca44b36db09e0517b1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-02-04  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
+       (gst_avi_demux_all_source_pads_unlinked),
+       (gst_avi_demux_process_next_entry):
+       * gst/avi/gstavidemux.h:
+         Third attempt, use gst_pad_is_linked() this time.
+
 2006-02-04  Jan Schmidt  <thaytan@mad.scientist.com>
 
        * gst/id3demux/id3v2frames.c: (id3demux_id3v2_parse_frame),
index 74709a59116a2656511e08a9c20f8747e8d50768..a67ebc2d5a4b4f7282c52d3bf85199226fdd7a1c 100644 (file)
@@ -1052,6 +1052,7 @@ gst_avi_demux_parse_stream (GstElement * element, GstBuffer * buf)
   if (stream->pad)
     gst_object_unref (stream->pad);
   pad = stream->pad = gst_pad_new_from_template (templ, padname);
+  stream->last_flow = GST_FLOW_OK;
   g_free (padname);
 
   gst_pad_use_fixed_caps (pad);
@@ -2243,20 +2244,17 @@ gst_avi_demux_invert (avi_stream_context * stream, GstBuffer * buf)
 static gboolean
 gst_avi_demux_all_source_pads_unlinked (GstAviDemux * avi)
 {
-  gint i, num_unlinked = 0;
+  gint i;
 
   for (i = 0; i < avi->num_streams; ++i) {
-    GstPad *peer;
-
-    peer = gst_pad_get_peer (avi->stream[i].pad);
-    if (peer) {
-      gst_object_unref (peer);
-    } else if (avi->stream[i].current_frame > 0) {
-      ++num_unlinked;
-    }
+    if (gst_pad_is_linked (avi->stream[i].pad))
+      return FALSE;
+    /* ignore unlinked state if we haven't tried to push on this pad yet */
+    if (avi->stream[i].last_flow == GST_FLOW_OK)
+      return FALSE;
   }
 
-  return (num_unlinked == avi->num_streams);
+  return TRUE;
 }
 
 static GstFlowReturn
@@ -2314,6 +2312,7 @@ gst_avi_demux_process_next_entry (GstAviDemux * avi)
             GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
             GST_PAD_NAME (stream->pad));
         res = gst_pad_push (stream->pad, buf);
+        stream->last_flow = res;
         if (res != GST_FLOW_OK && res != GST_FLOW_NOT_LINKED) {
           GST_DEBUG_OBJECT (avi, "Flow on pad %s: %s",
               GST_PAD_NAME (stream->pad), gst_flow_get_name (res));
index 4aa5176944bba9e280e9ee6596c0de7f9a13005b..a4324de4225f66251610b9d4e07507ccd440b55b 100644 (file)
@@ -62,6 +62,7 @@ typedef struct {
 
   /* pad, strh */
   GstPad        *pad;
+  GstFlowReturn  last_flow;
   gst_riff_strh *strh;
   union {
     gst_riff_strf_vids *vids;