[FFmpeg-cvslog] lavf: call the new seek API from the old.

Nicolas George git at videolan.org
Sat May 4 17:11:27 CEST 2013


ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Mon Apr 29 23:58:22 2013 +0200| [cc24afb45cfda95eda91ae8dbdfaa26aa35acc36] | committer: Nicolas George

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cc24afb45cfda95eda91ae8dbdfaa26aa35acc36
---

 libavformat/utils.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/libavformat/utils.c b/libavformat/utils.c
index 71246a9..29f4c1d 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);



More information about the ffmpeg-cvslog mailing list