[FFmpeg-cvslog] Fix support for flvtool2 "keyframes based" generated index in FLV format decoder

Kharkov Alexander git at videolan.org
Sat Apr 9 03:49:48 CEST 2011


ffmpeg | branch: master | Kharkov Alexander <kharkovalexander at gmail.com> | Fri Apr  8 16:20:45 2011 +0700| [ba667e600ffedad9d34caabe13f775b411f33a27] | committer: Michael Niedermayer

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 <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ba667e600ffedad9d34caabe13f775b411f33a27
---

 libavformat/flvdec.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index a63fffd..104fc42 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(&times);
     av_freep(&filepositions);
-    avio_seek(ioc, max_pos, SEEK_SET);
+    avio_seek(ioc, initial_pos, SEEK_SET);
     return ret;
 }
 



More information about the ffmpeg-cvslog mailing list