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.rheinha...@gmail.com> > --- > libavformat/aviobuf.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-)
Patchset applied. _______________________________________________ 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".