From: Michael Niedermayer Date: Mon, 1 Jan 2007 21:49:09 +0000 (+0000) Subject: seekless filesize retrieving support in 7 lines of code, also doesnt break compatibility X-Git-Tag: v0.5~10672 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8e287af090d0ef65043f3b30573ead754375ff8f;p=platform%2Fupstream%2Flibav.git 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 --- diff --git a/libavformat/avio.c b/libavformat/avio.c index a2b8a83..f2fe0e1 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 f0fd1a8..27fb241 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 f3e7d50..450b4cf 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; }