[FFmpeg-cvslog] flvdec: Fix support for flvtool2 "keyframes based" generated index

Kharkov Alexander git at videolan.org
Wed Apr 13 02:57:45 CEST 2011


ffmpeg | branch: master | Kharkov Alexander <kharkovalexander at gmail.com> | Fri Apr  8 16:20:45 2011 +0700| [b5304f7b2ec56b872e9a007d7f040930ebe55095] | committer: Martin Storsjö

flvdec: Fix support for flvtool2 "keyframes based" generated index

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: Martin Storsjö <martin at martin.st>

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

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

diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index f27b70c..62d25c8 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -136,6 +136,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 = avio_tell(ioc);
 
     while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
         int64_t* current_array;
@@ -183,7 +184,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