From ba667e600ffedad9d34caabe13f775b411f33a27 Mon Sep 17 00:00:00 2001 From: Kharkov Alexander Date: Fri, 8 Apr 2011 16:20:45 +0700 Subject: [PATCH] Fix support for flvtool2 "keyframes based" generated index in FLV format decoder Current keyframes data parser unconditionally rewind metadata to the end at the end of function. As result ALL metadata located after keyframes index not parsed, and as metadata object can have ANY placement inside metadata it can lead to unpredictable result (bitrate can not be found, etc.). As result FLV movie will not play at all in such situation. Signed-off-by: Michael Niedermayer --- libavformat/flvdec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index a63fffdde9..104fc4288d 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -131,6 +131,7 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream int64_t *times = NULL; int64_t *filepositions = NULL; int ret = 0; + int64_t initial_pos = url_ftell(ioc); while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { int64_t** current_array; @@ -174,7 +175,7 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream finish: av_freep(×); av_freep(&filepositions); - avio_seek(ioc, max_pos, SEEK_SET); + avio_seek(ioc, initial_pos, SEEK_SET); return ret; }