Browse Source

lavf: call the new seek API from the old.

If the demuxer implements read_seek2() and not read_seek(),
call avformat_seek_file() from av_seek_frame().
Allow to properly seek in formats that only implement the
new API from applications that use the old one.
Tested with mplayer and a concat script.
tags/n2.0
Nicolas George 12 years ago
parent
commit
cc24afb45c
1 changed files with 13 additions and 1 deletions
  1. +13
    -1
      libavformat/utils.c

+ 13
- 1
libavformat/utils.c View File

@@ -2135,7 +2135,19 @@ static int seek_frame_internal(AVFormatContext *s, int stream_index,

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
{
int ret = seek_frame_internal(s, stream_index, timestamp, flags);
int ret;

if (s->iformat->read_seek2 && !s->iformat->read_seek) {
int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
if ((flags & AVSEEK_FLAG_BACKWARD))
max_ts = timestamp;
else
min_ts = timestamp;
return avformat_seek_file(s, stream_index, min_ts, timestamp, max_ts,
flags & ~AVSEEK_FLAG_BACKWARD);
}
ret = seek_frame_internal(s, stream_index, timestamp, flags);

if (ret >= 0)
ret = avformat_queue_attached_pictures(s);


Loading…
Cancel
Save