Commit 3e2b6358 authored by Michael Niedermayer's avatar Michael Niedermayer

bypass internal buffer for "large" packets

Originally committed as revision 4080 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent d46db490
...@@ -333,10 +333,28 @@ int get_buffer(ByteIOContext *s, unsigned char *buf, int size) ...@@ -333,10 +333,28 @@ int get_buffer(ByteIOContext *s, unsigned char *buf, int size)
if (len > size) if (len > size)
len = size; len = size;
if (len == 0) { if (len == 0) {
if(size > s->buffer_size && !s->update_checksum){
len = s->read_packet(s->opaque, buf, size);
if (len <= 0) {
/* do not modify buffer if EOF reached so that a seek back can
be done without rereading data */
s->eof_reached = 1;
if(len<0)
s->error= len;
break;
} else {
s->pos += len;
size -= len;
buf += len;
s->buf_ptr = s->buffer;
s->buf_end = s->buffer/* + len*/;
}
}else{
fill_buffer(s); fill_buffer(s);
len = s->buf_end - s->buf_ptr; len = s->buf_end - s->buf_ptr;
if (len == 0) if (len == 0)
break; break;
}
} else { } else {
memcpy(buf, s->buf_ptr, len); memcpy(buf, s->buf_ptr, len);
buf += len; buf += len;
......
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