summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-11-27 13:22:07 +0100
committerJames Almer <jamrial@gmail.com>2019-11-28 15:20:37 -0300
commita31f68fb449eaf6f030ce5633435663f154bb34d (patch)
tree41579ac790215b1b84c484a97a873467c7e98dd0
parent67ce9e0463e170179ece4abc33be716282a0202b (diff)
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>
-rw-r--r--libavformat/av1.c14
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;
}