By using avio_get_dyn_buf() + ffio_free_dyn_buf() instead of avio_close_dyn_buf() + av_free() one can avoid an allocation + copy for small dynamic buffers (i.e. small master elements).
Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> --- libavformat/matroskaenc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index a38ce4325d..570f361351 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -845,11 +845,11 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, ff_put_wav_header(s, dyn_cp, par, FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX); } - codecpriv_size = avio_close_dyn_buf(dyn_cp, &codecpriv); + codecpriv_size = avio_get_dyn_buf(dyn_cp, &codecpriv); if (codecpriv_size) put_ebml_binary(pb, MATROSKA_ID_CODECPRIVATE, codecpriv, codecpriv_size); - av_free(codecpriv); + ffio_free_dyn_buf(&dyn_cp); return ret; } @@ -933,13 +933,13 @@ static int mkv_write_video_color(AVIOContext *pb, AVCodecParameters *par, AVStre end_ebml_master(dyn_cp, meta_element); } - colorinfo_size = avio_close_dyn_buf(dyn_cp, &colorinfo_ptr); + colorinfo_size = avio_get_dyn_buf(dyn_cp, &colorinfo_ptr); if (colorinfo_size) { ebml_master colorinfo = start_ebml_master(pb, MATROSKA_ID_VIDEOCOLOR, colorinfo_size); avio_write(pb, colorinfo_ptr, colorinfo_size); end_ebml_master(pb, colorinfo); } - av_free(colorinfo_ptr); + ffio_free_dyn_buf(&dyn_cp); return 0; } -- 2.20.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".