summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2009-06-22 05:00:54 +0100
committerJan Schmidt <thaytan@noraisin.net>2009-06-24 15:22:51 +0100
commit3c87b8850f81d7820e0bfcb8641fc1a1d06cd36f (patch)
tree7d218343a0f5646a79ae1cc5b28a4f76c652f06d /plugins
parent638dc67d16719d0fb1b02d87c7501d4152e153ca (diff)
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.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/elements/gstmultiqueue.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c
index 930d7ed26e..c922ad7cff 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;
}