On Tue, Apr 12, 2011 at 11:41:13AM +0300, Martin Storsjö wrote:
> From: Kharkov Alexander <[email protected]>
> 
> 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.
> ---
>  libavformat/flvdec.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
> index f27b70c..5438ab0 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 = url_ftell(ioc);

avio_tell()

>  
>      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;
>  }
>  

This looks shady. Why should it rewind to the original position?

-- 
Anton Khirnov

Attachment: signature.asc
Description: Digital signature

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to