> 在 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 ? Thanks Steven _______________________________________________ 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".