summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2007-01-01 21:49:09 +0000
committerMichael Niedermayer <michaelni@gmx.at>2007-01-01 21:49:09 +0000
commit8e287af090d0ef65043f3b30573ead754375ff8f (patch)
tree9dbf6079fc3ef4287edce6436643ed6e2317f6dd /libavformat
parentecec87afc6f14794c7062ee4e83d05c6da1fd944 (diff)
seekless filesize retrieving support in 7 lines of code, also doesnt break compatibility
Originally committed as revision 7395 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avio.c3
-rw-r--r--libavformat/avio.h2
-rw-r--r--libavformat/aviobuf.c3
3 files changed, 8 insertions, 0 deletions
diff --git a/libavformat/avio.c b/libavformat/avio.c
index a2b8a83259..f2fe0e13c6 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -148,9 +148,12 @@ offset_t url_filesize(URLContext *h)
{
offset_t pos, size;
+ size= url_seek(h, 0, AVSEEK_SIZE);
+ if(size<0){
pos = url_seek(h, 0, SEEK_CUR);
size = url_seek(h, -1, SEEK_END)+1;
url_seek(h, pos, SEEK_SET);
+ }
return size;
}
diff --git a/libavformat/avio.h b/libavformat/avio.h
index f0fd1a85cf..27fb241e33 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -69,6 +69,8 @@ void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
/* not implemented */
int url_poll(URLPollEntry *poll_table, int n, int timeout);
+#define AVSEEK_SIZE 0x10000
+
typedef struct URLProtocol {
const char *name;
int (*url_open)(URLContext *h, const char *filename, int flags);
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index f3e7d5081f..450b4cf11d 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -170,8 +170,11 @@ offset_t url_fsize(ByteIOContext *s)
if (!s->seek)
return -EPIPE;
+ size = s->seek(s->opaque, 0, AVSEEK_SIZE);
+ if(size<0){
size = s->seek(s->opaque, -1, SEEK_END) + 1;
s->seek(s->opaque, s->pos, SEEK_SET);
+ }
return size;
}