On Sun, Aug 11, 2019 at 4:43 PM Steven Liu <l...@chinaffmpeg.org> wrote: > > > > > 在 2019年8月8日,19:32,Jun Zhao <mypopy...@gmail.com> 写道: > > > > From: tomajsjiang <tomajsji...@tencent.com> > > > > Add new API ffio_realloc_buf for AVIO buffer realloc. > > > > Signed-off-by: Zhongxing Jiang <tomajsji...@tencent.com> > > --- > > libavformat/avio_internal.h | 9 +++++++++ > > libavformat/aviobuf.c | 31 +++++++++++++++++++++++++++++++ > > 2 files changed, 40 insertions(+), 0 deletions(-) > > > > diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h > > index 04c1ad5..eb628ac 100644 > > --- a/libavformat/avio_internal.h > > +++ b/libavformat/avio_internal.h > > @@ -87,6 +87,15 @@ int ffio_read_size(AVIOContext *s, unsigned char *buf, > > int size); > > int ffio_set_buf_size(AVIOContext *s, int buf_size); > > > > /** > > + * Reallocate a given buffer for AVIOContext. > > + * > > + * @param s the AVIOContext to realloc. > > + * @param buf_size required new buffer size. > > + * @return 0 on success, a negative AVERROR on failure. > > + */ > > +int ffio_realloc_buf(AVIOContext *s, int buf_size); > > + > > +/** > > * Ensures that the requested seekback buffer size will be available > > * > > * Will ensure that when reading sequentially up to buf_size, seeking > > diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c > > index 2d01102..3b59180 100644 > > --- a/libavformat/aviobuf.c > > +++ b/libavformat/aviobuf.c > > @@ -1093,6 +1093,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); > > -- > > 1.7.1 > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe”. > > patchset LGTM > > btw, maybe this should bump version.h ? > ffio_realloc_buf is an internal function, I don't know is it needed to bump the version. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".