Commit 67ce9e04 authored by Andreas Rheinhardt's avatar Andreas Rheinhardt Committed by James Almer

avformat/apetag: Avoid allocation for small tags

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 tags. Furthermore, it simplifies freeing.
Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
parent 163bb9ac
...@@ -186,11 +186,11 @@ int ff_ape_write_tag(AVFormatContext *s) ...@@ -186,11 +186,11 @@ int ff_ape_write_tag(AVFormatContext *s)
{ {
AVDictionaryEntry *e = NULL; AVDictionaryEntry *e = NULL;
int size, ret, count = 0; int size, ret, count = 0;
AVIOContext *dyn_bc = NULL; AVIOContext *dyn_bc;
uint8_t *dyn_buf = NULL; uint8_t *dyn_buf;
if ((ret = avio_open_dyn_buf(&dyn_bc)) < 0) if ((ret = avio_open_dyn_buf(&dyn_bc)) < 0)
goto end; return ret;
ff_standardize_creation_time(s); ff_standardize_creation_time(s);
while ((e = av_dict_get(s->metadata, "", e, AV_DICT_IGNORE_SUFFIX))) { while ((e = av_dict_get(s->metadata, "", e, AV_DICT_IGNORE_SUFFIX))) {
...@@ -211,7 +211,7 @@ int ff_ape_write_tag(AVFormatContext *s) ...@@ -211,7 +211,7 @@ int ff_ape_write_tag(AVFormatContext *s)
if (!count) if (!count)
goto end; goto end;
size = avio_close_dyn_buf(dyn_bc, &dyn_buf); size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
if (size <= 0) if (size <= 0)
goto end; goto end;
size += APE_TAG_FOOTER_BYTES; size += APE_TAG_FOOTER_BYTES;
...@@ -239,9 +239,7 @@ int ff_ape_write_tag(AVFormatContext *s) ...@@ -239,9 +239,7 @@ int ff_ape_write_tag(AVFormatContext *s)
ffio_fill(s->pb, 0, 8); // reserved ffio_fill(s->pb, 0, 8); // reserved
end: end:
if (dyn_bc && !dyn_buf) ffio_free_dyn_buf(&dyn_bc);
avio_close_dyn_buf(dyn_bc, &dyn_buf);
av_freep(&dyn_buf);
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