summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorZhang Rui <bbcallen@gmail.com>2013-07-22 21:21:38 +0800
committerMichael Niedermayer <michaelni@gmx.at>2013-07-22 19:34:47 +0200
commit2a5891bb9dfe55145a2f7dc9bcea8dbeaf2abc5f (patch)
treedb76163312f1532d6473864df87ef8896f7d0f67 /libavformat
parent47d57f24e35f0e9694c615b81511dde4cda95c72 (diff)
avformat/hls: parse EXTINF duration as floating-point number
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/hls.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c
index 95bbd45be6..995dc9fa87 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -56,7 +56,7 @@ enum KeyType {
};
struct segment {
- int duration;
+ double duration;
char url[MAX_URL_SIZE];
char key[MAX_URL_SIZE];
enum KeyType key_type;
@@ -206,7 +206,8 @@ static void handle_key_args(struct key_info *info, const char *key,
static int parse_playlist(HLSContext *c, const char *url,
struct variant *var, AVIOContext *in)
{
- int ret = 0, duration = 0, is_segment = 0, is_variant = 0, bandwidth = 0;
+ int ret = 0, is_segment = 0, is_variant = 0, bandwidth = 0;
+ double duration = 0.0;
enum KeyType key_type = KEY_NONE;
uint8_t iv[16] = "";
int has_iv = 0;
@@ -286,7 +287,7 @@ static int parse_playlist(HLSContext *c, const char *url,
var->finished = 1;
} else if (av_strstart(line, "#EXTINF:", &ptr)) {
is_segment = 1;
- duration = atoi(ptr);
+ duration = atof(ptr);
} else if (av_strstart(line, "#", NULL)) {
continue;
} else if (line[0]) {
@@ -523,7 +524,7 @@ static int hls_read_header(AVFormatContext *s)
/* If this isn't a live stream, calculate the total duration of the
* stream. */
if (c->variants[0]->finished) {
- int64_t duration = 0;
+ double duration = 0.0;
for (i = 0; i < c->variants[0]->n_segments; i++)
duration += c->variants[0]->segments[i]->duration;
s->duration = duration * AV_TIME_BASE;