Commit 8e287af0 authored by Michael Niedermayer's avatar Michael Niedermayer

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
parent ecec87af
...@@ -148,9 +148,12 @@ offset_t url_filesize(URLContext *h) ...@@ -148,9 +148,12 @@ offset_t url_filesize(URLContext *h)
{ {
offset_t pos, size; offset_t pos, size;
size= url_seek(h, 0, AVSEEK_SIZE);
if(size<0){
pos = url_seek(h, 0, SEEK_CUR); pos = url_seek(h, 0, SEEK_CUR);
size = url_seek(h, -1, SEEK_END)+1; size = url_seek(h, -1, SEEK_END)+1;
url_seek(h, pos, SEEK_SET); url_seek(h, pos, SEEK_SET);
}
return size; return size;
} }
......
...@@ -69,6 +69,8 @@ void url_set_interrupt_cb(URLInterruptCB *interrupt_cb); ...@@ -69,6 +69,8 @@ void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
/* not implemented */ /* not implemented */
int url_poll(URLPollEntry *poll_table, int n, int timeout); int url_poll(URLPollEntry *poll_table, int n, int timeout);
#define AVSEEK_SIZE 0x10000
typedef struct URLProtocol { typedef struct URLProtocol {
const char *name; const char *name;
int (*url_open)(URLContext *h, const char *filename, int flags); int (*url_open)(URLContext *h, const char *filename, int flags);
......
...@@ -170,8 +170,11 @@ offset_t url_fsize(ByteIOContext *s) ...@@ -170,8 +170,11 @@ offset_t url_fsize(ByteIOContext *s)
if (!s->seek) if (!s->seek)
return -EPIPE; return -EPIPE;
size = s->seek(s->opaque, 0, AVSEEK_SIZE);
if(size<0){
size = s->seek(s->opaque, -1, SEEK_END) + 1; size = s->seek(s->opaque, -1, SEEK_END) + 1;
s->seek(s->opaque, s->pos, SEEK_SET); s->seek(s->opaque, s->pos, SEEK_SET);
}
return size; return size;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment