summaryrefslogtreecommitdiff
path: root/libavformat/flacenc.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-04-28 04:54:05 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-05-03 13:43:54 +0200
commit6397b4d6a241692a1c7bb611a3fd42b0de2d32b5 (patch)
tree1a9f9efdbb428d1727d0b917e36ad9eb587d4d94 /libavformat/flacenc.c
parent704d7c9f4616d71db1a1baa0a1726c77a9957521 (diff)
avformat/vorbiscomment: Switch to AVIOContext from bytestream API
Up until now ff_vorbiscomment_write() used the bytestream API to write VorbisComments. Therefore the caller had to provide a sufficiently large buffer to write the output. Yet two of the three callers (namely the FLAC and the Matroska muxer) actually want the output to be written via an AVIOContext; therefore they allocated buffers of the right size just for this purpose (i.e. they get freed immediately afterwards). Only the Ogg muxer actually wants a buffer. But given that it is easy to wrap a buffer into an AVIOContext this commit changes ff_vorbiscomment_write() to use an AVIOContext for its output. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/flacenc.c')
-rw-r--r--libavformat/flacenc.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c
index 0e88e18355..b947a3b067 100644
--- a/libavformat/flacenc.c
+++ b/libavformat/flacenc.c
@@ -29,7 +29,6 @@
#include "id3v2.h"
#include "internal.h"
#include "vorbiscomment.h"
-#include "libavcodec/bytestream.h"
typedef struct FlacMuxerContext {
@@ -62,25 +61,16 @@ static int flac_write_block_comment(AVIOContext *pb, AVDictionary **m,
{
const char *vendor = bitexact ? "ffmpeg" : LIBAVFORMAT_IDENT;
int64_t len;
- uint8_t *p, *p0;
ff_metadata_conv(m, ff_vorbiscomment_metadata_conv, NULL);
len = ff_vorbiscomment_length(*m, vendor, NULL, 0);
if (len >= ((1<<24) - 4))
return AVERROR(EINVAL);
- p0 = av_malloc(len+4);
- if (!p0)
- return AVERROR(ENOMEM);
- p = p0;
-
- bytestream_put_byte(&p, last_block ? 0x84 : 0x04);
- bytestream_put_be24(&p, len);
- ff_vorbiscomment_write(&p, *m, vendor, NULL, 0);
-
- avio_write(pb, p0, len+4);
- av_freep(&p0);
- p = NULL;
+
+ avio_w8(pb, last_block ? 0x84 : 0x04);
+ avio_wb24(pb, len);
+ ff_vorbiscomment_write(pb, *m, vendor, NULL, 0);
return 0;
}