mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
parent
67ce9e0463
commit
a31f68fb44
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user