|
|
|
@ -1096,6 +1096,37 @@ int ffio_set_buf_size(AVIOContext *s, int buf_size) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int ffio_realloc_buf(AVIOContext *s, int buf_size) |
|
|
|
|
{ |
|
|
|
|
uint8_t *buffer; |
|
|
|
|
int data_size; |
|
|
|
|
|
|
|
|
|
if (!s->buffer_size) |
|
|
|
|
return ffio_set_buf_size(s, buf_size); |
|
|
|
|
|
|
|
|
|
if (buf_size <= s->buffer_size) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
buffer = av_malloc(buf_size); |
|
|
|
|
if (!buffer) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
data_size = s->write_flag ? (s->buf_ptr - s->buffer) : (s->buf_end - s->buf_ptr); |
|
|
|
|
if (data_size > 0) |
|
|
|
|
memcpy(buffer, s->write_flag ? s->buffer : s->buf_ptr, data_size); |
|
|
|
|
av_free(s->buffer); |
|
|
|
|
s->buffer = buffer; |
|
|
|
|
s->orig_buffer_size = buf_size; |
|
|
|
|
s->buffer_size = buf_size; |
|
|
|
|
s->buf_ptr = s->write_flag ? (s->buffer + data_size) : s->buffer; |
|
|
|
|
if (s->write_flag) |
|
|
|
|
s->buf_ptr_max = s->buffer + data_size; |
|
|
|
|
|
|
|
|
|
s->buf_end = s->write_flag ? (s->buffer + s->buffer_size) : (s->buf_ptr + data_size); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int url_resetbuf(AVIOContext *s, int flags) |
|
|
|
|
{ |
|
|
|
|
av_assert1(flags == AVIO_FLAG_WRITE || flags == AVIO_FLAG_READ); |
|
|
|
|