[FFmpeg-devel] [PATCH 1/7] avformat/aviobuf: Avoid allocating buffer when using dynamic buffer

James Almer jamrial at gmail.com
Thu Nov 28 20:23:56 EET 2019


On 11/27/2019 9:22 AM, Andreas Rheinhardt wrote:
> Up until now, using a dynamic buffer entailed at least three
> allocations: One for the AVIOContext, one for the AVIOContext's opaque
> (which, among other things, contains the small write buffer), and one
> for the big buffer that is independently allocated that is returned when
> calling avio_close_dyn_buf().
> 
> It is possible to avoid the third allocation if one doesn't use a
> packetized dynamic buffer, if all the data written so far fit into the
> write buffer and if one does not require the actual (big) buffer to have
> an indefinite lifetime. This is done by making avio_get_dyn_buf() return
> a pointer to the data in the write buffer if nothing has been written to
> the main buffer yet. The dynamic buffer will then be freed using
> ffio_free_dynamic_buffer (which needed to be modified not to call
> avio_close_dyn_buf() internally).
> 
> So a typical use-case like:
> 
> size = avio_close_dyn_buf(dyn_pb, &buf);
> do something with buf
> av_free(buf);
> 
> can be converted to:
> 
> size = avio_get_dyn_buf(dyn_pb, &buf);
> do something with buf
> ffio_free_dynamic_buffer(&dyn_pb);
> 
> In more complex scenarios this can simplify freeing as well, because it
> is now clear that freeing always has to be performed via
> ffio_free_dynamic_buffer().
> 
> Of course, in case this saves an allocation it also saves a memcpy.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavformat/aviobuf.c | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)

Patchset applied.


More information about the ffmpeg-devel mailing list