From: Jan Schmidt Date: Mon, 22 Jun 2009 04:00:54 +0000 (+0100) Subject: multiqueue: Fire the overrun signal on EOS X-Git-Tag: RELEASE-0.10.24~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3c87b8850f81d7820e0bfcb8641fc1a1d06cd36f;p=platform%2Fupstream%2Fgstreamer.git multiqueue: Fire the overrun signal on EOS Fixes startup of some short MPEG files with decodebin2/playbin2 where all the data fits in the multiqueue and EOS arrives before the group is exposed. --- diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c index 930d7ed..c922ad7 100644 --- a/plugins/elements/gstmultiqueue.c +++ b/plugins/elements/gstmultiqueue.c @@ -169,6 +169,7 @@ static void gst_single_queue_free (GstSingleQueue * squeue); static void wake_up_next_non_linked (GstMultiQueue * mq); static void compute_high_id (GstMultiQueue * mq); +static void single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq); static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink%d", GST_PAD_SINK, @@ -1090,6 +1091,7 @@ gst_multi_queue_sink_event (GstPad * pad, GstEvent * event) switch (type) { case GST_EVENT_EOS: sq->is_eos = TRUE; + single_queue_overrun_cb (sq->queue, sq); break; case GST_EVENT_NEWSEGMENT: apply_segment (mq, sq, sref, &sq->sink_segment); @@ -1312,7 +1314,8 @@ single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq) ssize.bytes, sq->max_size.bytes, sq->cur_time, sq->max_size.time); /* if this queue is filled completely we must signal overrun */ - if (IS_FILLED (bytes, ssize.bytes) || IS_FILLED (time, sq->cur_time)) { + if (sq->is_eos || IS_FILLED (bytes, ssize.bytes) || + IS_FILLED (time, sq->cur_time)) { GST_LOG_OBJECT (mq, "Queue %d is filled", ssq->id); filled = TRUE; }