queue2: Fix backwards seeks into undowloaded ranges
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Mon, 29 Jul 2013 13:48:32 +0000 (15:48 +0200)
committerSjoerd Simons <sjoerd@luon.net>
Wed, 31 Jul 2013 07:50:47 +0000 (09:50 +0200)
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

index 0af6fc1..a55e76a 100644 (file)
@@ -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;
       }
     }