On Sun, Oct 02, 2011 at 12:09:07PM -0400, Justin Ruggles wrote:
> This prevents flushing the packet buffer when the input format does not
> support seeking.
> ---
>  libavformat/utils.c |   24 ++++++++++++++----------
>  1 files changed, 14 insertions(+), 10 deletions(-)
> 
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 0ba6fc3..f16ac7c 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -1749,10 +1749,10 @@ int av_seek_frame(AVFormatContext *s, int 
> stream_index, int64_t timestamp, int f
>      int ret;
>      AVStream *st;
>  
> -    ff_read_frame_flush(s);
> -
> -    if(flags & AVSEEK_FLAG_BYTE)
> +    if (flags & AVSEEK_FLAG_BYTE) {
> +        ff_read_frame_flush(s);
>          return seek_frame_byte(s, stream_index, timestamp, flags);
> +    }
>  
>      if(stream_index < 0){
>          stream_index= av_find_default_stream_index(s);
> @@ -1765,18 +1765,22 @@ int av_seek_frame(AVFormatContext *s, int 
> stream_index, int64_t timestamp, int f
>      }
>  
>      /* first, we try the format specific seek */
> -    if (s->iformat->read_seek)
> +    if (s->iformat->read_seek) {
> +        ff_read_frame_flush(s);
>          ret = s->iformat->read_seek(s, stream_index, timestamp, flags);
> -    else
> +    } else
>          ret = -1;
>      if (ret >= 0) {
>          return 0;
>      }
>  
> -    if(s->iformat->read_timestamp && !(s->iformat->flags & 
> AVFMT_NOBINSEARCH))
> +    if (s->iformat->read_timestamp && !(s->iformat->flags & 
> AVFMT_NOBINSEARCH)) {
> +        ff_read_frame_flush(s);
>          return av_seek_frame_binary(s, stream_index, timestamp, flags);
> -    else if (!(s->iformat->flags & AVFMT_NOGENSEARCH))
> +    } else if (!(s->iformat->flags & AVFMT_NOGENSEARCH)) {
> +        ff_read_frame_flush(s);
>          return seek_frame_generic(s, stream_index, timestamp, flags);
> +    }
>      else
>          return -1;
>  }
> @@ -1786,10 +1790,10 @@ int avformat_seek_file(AVFormatContext *s, int 
> stream_index, int64_t min_ts, int
>      if(min_ts > ts || max_ts < ts)
>          return -1;
>  
> -    ff_read_frame_flush(s);
> -
> -    if (s->iformat->read_seek2)
> +    if (s->iformat->read_seek2) {
> +        ff_read_frame_flush(s);
>          return s->iformat->read_seek2(s, stream_index, min_ts, ts, max_ts, 
> flags);
> +    }
>  
>      if(s->iformat->read_timestamp){
>          //try to seek via read_timestamp()

ok

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

Reply via email to