From 0b068047354692442aa49bc418b398d2636facf3 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Mon, 29 Jul 2013 15:48:32 +0200 Subject: [PATCH] queue2: Fix backwards seeks into undowloaded ranges When in download buffering mode queue2 didn't check if a range offset is in a undownloaded range before the currently in-progress range. Causing seeks to an earlier offset to, well, take a while. --- plugins/elements/gstqueue2.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c index 0af6fc1e9d..a55e76a5d0 100644 --- a/plugins/elements/gstqueue2.c +++ b/plugins/elements/gstqueue2.c @@ -1124,21 +1124,13 @@ gst_queue2_have_data (GstQueue2 * queue, guint64 offset, guint length) guint64 threshold = 1024 * 512; if (QUEUE_IS_USING_RING_BUFFER (queue)) { - guint64 distance; - - distance = QUEUE_MAX_BYTES (queue) - queue->cur_level.bytes; - /* don't wait for the complete buffer to fill */ - distance = MIN (distance, threshold); - - if (offset >= queue->current->offset && offset <= - queue->current->writing_pos + distance) { - GST_INFO_OBJECT (queue, - "requested data is within range, wait for data"); - return FALSE; - } - } else if (offset < queue->current->writing_pos + threshold) { - update_cur_pos (queue, queue->current, offset + length); - GST_INFO_OBJECT (queue, "wait for data"); + threshold = MIN (threshold, + QUEUE_MAX_BYTES (queue) - queue->cur_level.bytes); + } + if (offset >= queue->current->offset && offset <= + queue->current->writing_pos + threshold) { + GST_INFO_OBJECT (queue, + "requested data is within range, wait for data"); return FALSE; } }