From: Sebastian Dröge Date: Fri, 27 Aug 2010 16:47:03 +0000 (+0200) Subject: mvedemux: Add proper flow return aggregation X-Git-Tag: 1.19.3~507^2~16453 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f6713f9c3b8429056c6675a4aaa3f80d2b9e7223;p=platform%2Fupstream%2Fgstreamer.git mvedemux: Add proper flow return aggregation NOT_LINKED should only be returned if all streams returned NOT_LINKED. --- diff --git a/gst/mve/gstmvedemux.c b/gst/mve/gstmvedemux.c index 90f18fd..e60d880 100644 --- a/gst/mve/gstmvedemux.c +++ b/gst/mve/gstmvedemux.c @@ -317,6 +317,7 @@ gst_mve_video_init (GstMveDemux * mve, const guint8 * data) stream->palette = NULL; stream->caps = NULL; stream->last_ts = GST_CLOCK_TIME_NONE; + stream->last_flow = GST_FLOW_OK; mve->video_stream = stream; } @@ -661,6 +662,7 @@ gst_mve_audio_init (GstMveDemux * mve, guint8 version, const guint8 * data, stream = g_new0 (GstMveDemuxStream, 1); stream->offset = 0; stream->last_ts = 0; + stream->last_flow = GST_FLOW_OK; mve->audio_stream = stream; } else { stream = mve->audio_stream; @@ -1037,10 +1039,17 @@ gst_mve_demux_chain (GstPad * sinkpad, GstBuffer * inbuf) GST_BUFFER_SIZE (outbuf), GST_PAD_NAME (stream->pad)); ret = gst_pad_push (stream->pad, outbuf); + stream->last_flow = ret; } - if (!GST_FLOW_IS_FATAL (ret)) - ret = GST_FLOW_OK; + if (ret == GST_FLOW_NOT_LINKED) { + if (mve->audio_stream + && mve->audio_stream->last_flow != GST_FLOW_NOT_LINKED) + ret = GST_FLOW_OK; + if (mve->video_stream + && mve->video_stream->last_flow != GST_FLOW_NOT_LINKED) + ret = GST_FLOW_OK; + } /* update current offset */ mve->chunk_offset += mve->needed_bytes; diff --git a/gst/mve/gstmvedemux.h b/gst/mve/gstmvedemux.h index 502a50f..375e56e 100644 --- a/gst/mve/gstmvedemux.h +++ b/gst/mve/gstmvedemux.h @@ -78,6 +78,8 @@ struct _GstMveDemuxStream { GstClockTime last_ts; gint64 offset; + GstFlowReturn last_flow; + /* video properties */ guint16 width; guint16 height;