Commit a31f68fb authored by Andreas Rheinhardt's avatar Andreas Rheinhardt Committed by James Almer

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: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
parent 67ce9e04
...@@ -326,7 +326,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) ...@@ -326,7 +326,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
AV1SequenceParameters seq_params; AV1SequenceParameters seq_params;
PutBitContext pbc; PutBitContext pbc;
uint8_t header[4]; uint8_t header[4];
uint8_t *seq = NULL, *meta = NULL; uint8_t *seq, *meta;
int64_t obu_size; int64_t obu_size;
int start_pos, type, temporal_id, spatial_id; int start_pos, type, temporal_id, spatial_id;
int ret, nb_seq = 0, seq_size, meta_size; 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) ...@@ -376,7 +376,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
buf += len; buf += len;
} }
seq_size = avio_close_dyn_buf(seq_pb, &seq); seq_size = avio_get_dyn_buf(seq_pb, &seq);
if (!seq_size) { if (!seq_size) {
ret = AVERROR_INVALIDDATA; ret = AVERROR_INVALIDDATA;
goto fail; goto fail;
...@@ -401,17 +401,13 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) ...@@ -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, header, sizeof(header));
avio_write(pb, seq, seq_size); 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) if (meta_size)
avio_write(pb, meta, meta_size); avio_write(pb, meta, meta_size);
fail: fail:
if (!seq) ffio_free_dyn_buf(&seq_pb);
avio_close_dyn_buf(seq_pb, &seq); ffio_free_dyn_buf(&meta_pb);
if (!meta)
avio_close_dyn_buf(meta_pb, &meta);
av_free(seq);
av_free(meta);
return ret; return ret;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment