From 4b5490014fb102cf65481d76222130d885eecebd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 4 Feb 2006 15:41:43 +0000 Subject: [PATCH] gst/avi/gstavidemux.*: Third attempt, use gst_pad_is_linked() this time. 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 | 8 ++++++++ gst/avi/gstavidemux.c | 19 +++++++++---------- gst/avi/gstavidemux.h | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f9c64c..e34adcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-02-04 Tim-Philipp Müller + + * 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 * gst/id3demux/id3v2frames.c: (id3demux_id3v2_parse_frame), diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 74709a5..a67ebc2 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -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)); diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h index 4aa5176..a4324de 100644 --- a/gst/avi/gstavidemux.h +++ b/gst/avi/gstavidemux.h @@ -62,6 +62,7 @@ typedef struct { /* pad, strh */ GstPad *pad; + GstFlowReturn last_flow; gst_riff_strh *strh; union { gst_riff_strf_vids *vids; -- 2.7.4