hlsdemux: switch to higher/lower bitrate by more than one step at a time
authorYouness Alaoui <youness.alaoui@collabora.co.uk>
Wed, 31 Aug 2011 03:47:52 +0000 (03:47 +0000)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 31 Aug 2011 10:12:33 +0000 (12:12 +0200)
gst/hls/gsthlsdemux.c

index a7f3a4b..bfda3a5 100644 (file)
@@ -1229,14 +1229,20 @@ gst_hls_demux_switch_playlist (GstHLSDemux * demux)
 
   /* if we are on time switch to a higher bitrate */
   if (diff > limit) {
-    gst_hls_demux_change_playlist (demux, TRUE);
+    while (diff > limit) {
+      gst_hls_demux_change_playlist (demux, TRUE);
+      diff -= limit;
+    }
+    demux->accumulated_delay = 0;
   } else if (diff < 0) {
     /* if the client is too slow wait until it has accumulated a certain delay to
      * switch to a lower bitrate */
     demux->accumulated_delay -= diff;
     if (demux->accumulated_delay >= limit) {
-      gst_hls_demux_change_playlist (demux, FALSE);
-    } else if (demux->accumulated_delay < 0) {
+      while (demux->accumulated_delay >= limit) {
+        gst_hls_demux_change_playlist (demux, FALSE);
+        demux->accumulated_delay -= limit;
+      }
       demux->accumulated_delay = 0;
     }
   }