summaryrefslogtreecommitdiff
path: root/libavformat/hlsenc.c
diff options
context:
space:
mode:
authorSteven Liu <lq@chinaffmpeg.org>2017-01-11 04:38:34 +0800
committerSteven Liu <lq@chinaffmpeg.org>2017-01-11 04:38:34 +0800
commitdaff04bd1837442286fcb6b58546a2cc7f5b589d (patch)
tree21bb49b755e1bbee1370a51957fb45b9f3e5a08b /libavformat/hlsenc.c
parent2deafd98988871f25b0778059ee84a704372ec24 (diff)
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>
Diffstat (limited to 'libavformat/hlsenc.c')
-rw-r--r--libavformat/hlsenc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 3d2d41a7b9..a2c606cb6e 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;