[FFmpeg-devel] [PATCH 1/3] lavf: call the new seek API from the old.
Nicolas George
nicolas.george at normalesup.org
Fri May 3 10:53:54 CEST 2013
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.
Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
libavformat/utils.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
Updated to filter out AVSEEK_FLAG_BACKWARD. This is somewhat redundant with
the next patch, but better safe than sorry.
diff --git a/libavformat/utils.c b/libavformat/utils.c
index c1f1362..50ceb1f 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -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);
--
1.7.10.4
More information about the ffmpeg-devel
mailing list