]> git.sesse.net Git - ffmpeg/commitdiff
avformat/hlsenc: fix the bug when the largest segment duration pointer right value...
authorSteven Liu <lq@chinaffmpeg.org>
Tue, 10 Jan 2017 20:38:34 +0000 (04:38 +0800)
committerSteven Liu <lq@chinaffmpeg.org>
Tue, 10 Jan 2017 20:38:34 +0000 (04:38 +0800)
when the segments largest duration value is look like 4.000000, the
EXT-X-TARGETDURATION value should equ 4.
it's wrong when hlsenc use ceil, so fix it.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
libavformat/hlsenc.c

index 3d2d41a7b9564beb5ef6fe265fc171434f255ef7..a2c606cb6e3abbc9112479eb4315e44d27d3ab17 100644 (file)
@@ -141,6 +141,11 @@ typedef struct HLSContext {
     char current_segment_final_filename_fmt[1024]; // when renaming segments
 } HLSContext;
 
+static int get_int_from_double(double val)
+{
+    return (int)((val - (int)val) >= 0.001) ? (int)(val + 1) : (int)val;
+}
+
 static int mkdir_p(const char *path) {
     int ret = 0;
     char *temp = av_strdup(path);
@@ -668,8 +673,8 @@ static int hls_window(AVFormatContext *s, int last)
         goto fail;
 
     for (en = hls->segments; en; en = en->next) {
-        if (target_duration < en->duration)
-            target_duration = ceil(en->duration);
+        if (target_duration <= en->duration)
+            target_duration = get_int_from_double(en->duration);
     }
 
     hls->discontinuity_set = 0;