avformat/hlsenc: correctly compute target duration
authorNicolas Martyanoff <khaelin@gmail.com>
Mon, 7 Jul 2014 11:26:12 +0000 (13:26 +0200)
committerAnssi Hannula <anssi.hannula@iki.fi>
Wed, 9 Jul 2014 22:31:04 +0000 (01:31 +0300)
With HLS, the duration of all segments must be lower or equal to the target
duration. Therefore floor(duration + 0.5) yields incorrect results.

For example, for duration = 1.35, floor(duration + 0.5) yields 1.0, but the
correct result is 2.0.

Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
libavformat/hlsenc.c

index 86447d8..388a23a 100644 (file)
@@ -141,7 +141,7 @@ static int hls_window(AVFormatContext *s, int last)
 
     for (en = hls->list; en; en = en->next) {
         if (target_duration < en->duration)
-            target_duration = (int) floor(en->duration + 0.5);
+            target_duration = ceil(en->duration);
     }
 
     avio_printf(hls->pb, "#EXTM3U\n");