diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2019-11-27 13:22:07 +0100 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2019-11-28 15:20:37 -0300 |
commit | a31f68fb449eaf6f030ce5633435663f154bb34d (patch) | |
tree | 41579ac790215b1b84c484a97a873467c7e98dd0 /libavformat/av1.c | |
parent | 67ce9e0463e170179ece4abc33be716282a0202b (diff) | |
download | ffmpeg-a31f68fb449eaf6f030ce5633435663f154bb34d.tar.gz |
avformat/av1: Avoid allocation for small headers
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 headers. Furthermore, it simplifies freeing.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/av1.c')
-rw-r--r-- | libavformat/av1.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/libavformat/av1.c b/libavformat/av1.c index 03669dfd2a..132f4e987b 100644 --- a/libavformat/av1.c +++ b/libavformat/av1.c @@ -326,7 +326,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) AV1SequenceParameters seq_params; PutBitContext pbc; uint8_t header[4]; - uint8_t *seq = NULL, *meta = NULL; + uint8_t *seq, *meta; int64_t obu_size; int start_pos, type, temporal_id, spatial_id; int ret, nb_seq = 0, seq_size, meta_size; @@ -376,7 +376,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) buf += len; } - seq_size = avio_close_dyn_buf(seq_pb, &seq); + seq_size = avio_get_dyn_buf(seq_pb, &seq); if (!seq_size) { ret = AVERROR_INVALIDDATA; goto fail; @@ -401,17 +401,13 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) avio_write(pb, header, sizeof(header)); avio_write(pb, seq, seq_size); - meta_size = avio_close_dyn_buf(meta_pb, &meta); + meta_size = avio_get_dyn_buf(meta_pb, &meta); if (meta_size) avio_write(pb, meta, meta_size); fail: - if (!seq) - avio_close_dyn_buf(seq_pb, &seq); - if (!meta) - avio_close_dyn_buf(meta_pb, &meta); - av_free(seq); - av_free(meta); + ffio_free_dyn_buf(&seq_pb); + ffio_free_dyn_buf(&meta_pb); return ret; } |