OSDN Git Service

Enable av_read_pause(), av_read_play() and the ASF demuxer's av_read_seek()
authorBjörn Axelsson <gecko@acc.umu.se>
Mon, 17 Dec 2007 09:28:46 +0000 (09:28 +0000)
committerBenoit Fouet <benoit.fouet@free.fr>
Mon, 17 Dec 2007 09:28:46 +0000 (09:28 +0000)
to use the protocol-native functionality if available.
Patch by Björn Axelsson: bjorn point axelsson at intinor dot se
Original thread: [FFmpeg-devel] [PATCH][4/4] Enable use of the extended API
Date: Thu Nov 22 16:01:06 CET 2007

Originally committed as revision 11248 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/asf.c
libavformat/utils.c

index b2f54d9..2316ed5 100644 (file)
@@ -1049,6 +1049,14 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
     if (asf->packet_size <= 0)
         return -1;
 
+    /* Try using the protocol's read_seek if available */
+    if(s->pb && s->pb->read_seek) {
+        int ret = av_url_read_fseek(s->pb, stream_index, pts, flags);
+        if(ret >= 0)
+            asf_reset_header(s);
+        return ret;
+    }
+
     if (!asf->index_read)
         asf_build_simple_index(s, stream_index);
 
index 3cd0755..7ab8d7e 100644 (file)
@@ -2030,16 +2030,20 @@ int av_find_stream_info(AVFormatContext *ic)
 
 int av_read_play(AVFormatContext *s)
 {
-    if (!s->iformat->read_play)
-        return AVERROR(ENOSYS);
-    return s->iformat->read_play(s);
+    if (s->iformat->read_play)
+        return s->iformat->read_play(s);
+    if (s->pb && s->pb->read_play)
+        return av_url_read_fplay(s->pb);
+    return AVERROR(ENOSYS);
 }
 
 int av_read_pause(AVFormatContext *s)
 {
-    if (!s->iformat->read_pause)
-        return AVERROR(ENOSYS);
-    return s->iformat->read_pause(s);
+    if (s->iformat->read_pause)
+        return s->iformat->read_pause(s);
+    if (s->pb && s->pb->read_pause)
+        return av_url_read_fpause(s->pb);
+    return AVERROR(ENOSYS);
 }
 
 void av_close_input_file(AVFormatContext *s)