From 1f71f191bec611541623545eee4adb7774e2b671 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 18 Nov 2013 10:46:00 -0300 Subject: [PATCH] multiqueue: post 100% buffering if single queue is not linked This makes buffering stop in case a stream switch happens. This is important for adaptive streams that can disable not-linked streams to avoid consuming the network bandwidth. https://bugzilla.gnome.org/show_bug.cgi?id=719575 --- plugins/elements/gstmultiqueue.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c index 6474ca51ed..0d976c0d3c 100644 --- a/plugins/elements/gstmultiqueue.c +++ b/plugins/elements/gstmultiqueue.c @@ -836,7 +836,7 @@ update_buffering (GstMultiQueue * mq, GstSingleQueue * sq) size.bytes, sq->max_size.bytes, sq->cur_time, sq->max_size.time); /* get bytes and time percentages and take the max */ - if (sq->is_eos) { + if (sq->is_eos || sq->srcresult == GST_FLOW_NOT_LINKED) { percent = 100; } else { percent = 0; @@ -1197,6 +1197,7 @@ gst_multi_queue_loop (GstPad * pad) GstFlowReturn result; GstClockTime next_time; gboolean is_buffer; + gboolean do_update_buffering = FALSE; sq = (GstSingleQueue *) gst_pad_get_element_private (pad); mq = sq->mqueue; @@ -1348,6 +1349,7 @@ gst_multi_queue_loop (GstPad * pad) sq->id); compute_high_id (mq); + do_update_buffering = TRUE; /* maybe no-one is waiting */ if (mq->numwaiting > 0) { @@ -1369,6 +1371,10 @@ gst_multi_queue_loop (GstPad * pad) sq->pushed = TRUE; sq->srcresult = result; sq->last_oldid = newid; + + if (do_update_buffering) + update_buffering (mq, sq); + GST_MULTI_QUEUE_MUTEX_UNLOCK (mq); if (result != GST_FLOW_OK && result != GST_FLOW_NOT_LINKED