From daff04bd1837442286fcb6b58546a2cc7f5b589d Mon Sep 17 00:00:00 2001 From: Steven Liu <lq@chinaffmpeg.org> Date: Wed, 11 Jan 2017 04:38:34 +0800 Subject: [PATCH] avformat/hlsenc: fix the bug when the largest segment duration pointer right value is 0 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 | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 3d2d41a7b95..a2c606cb6e3 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -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; -- GitLab