aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-11-27 13:22:10 +0100
committerJames Almer <jamrial@gmail.com>2019-11-28 15:20:37 -0300
commit3a58ec7c772563fbacba63289aa49bc56a496e3f (patch)
treeb5029f86c9ac1ebc376c8e2175c665bb4885a567
parentaad82270b60ad244330a137457f5a227fac9b175 (diff)
downloadffmpeg-3a58ec7c772563fbacba63289aa49bc56a496e3f.tar.gz
avformat/matroskaenc: Avoid allocation for small dynamic buffers
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.rheinhardt@gmail.com>
-rw-r--r--libavformat/matroskaenc.c8
1 files 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;
}