dashdemux: Use the smallest queue value to define buffering state
authorThiago Santos <thiago.sousa.santos@collabora.com>
Tue, 29 Jan 2013 16:04:01 +0000 (13:04 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Wed, 8 May 2013 21:14:34 +0000 (18:14 -0300)
The smallest queue should be used to prevent blocking the download
thread when a stream has too much data buffered, leaving the other
streams starving from fragments

ext/dash/gstdashdemux.c

index 1bfc805..b07d54a 100644 (file)
@@ -1237,17 +1237,19 @@ gst_dash_demux_reset (GstDashDemux * demux, gboolean dispose)
 static GstClockTime
 gst_dash_demux_get_buffering_time (GstDashDemux * demux)
 {
-  GstClockTime buffer_time = 0;
+  GstClockTime buffer_time = GST_CLOCK_TIME_NONE;
   GSList *iter;
 
   for (iter = demux->streams; iter; iter = g_slist_next (iter)) {
-    buffer_time = gst_dash_demux_stream_get_buffering_time (iter->data);
+    GstClockTime btime = gst_dash_demux_stream_get_buffering_time (iter->data);
 
-    if (buffer_time)
-      return buffer_time;
+    if (!GST_CLOCK_TIME_IS_VALID (buffer_time) || buffer_time > btime)
+      buffer_time = btime;
   }
 
-  return 0;
+  if (!GST_CLOCK_TIME_IS_VALID (buffer_time))
+    buffer_time = 0;
+  return buffer_time;
 }
 
 static GstClockTime