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