summaryrefslogtreecommitdiff
path: root/libavformat/vorbiscomment.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/vorbiscomment.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/vorbiscomment.c')
-rw-r--r--libavformat/vorbiscomment.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/libavformat/vorbiscomment.c b/libavformat/vorbiscomment.c
index edaeae2772..a929634cc0 100644
--- a/libavformat/vorbiscomment.c
+++ b/libavformat/vorbiscomment.c
@@ -19,10 +19,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "avio.h"
#include "avformat.h"
#include "metadata.h"
#include "vorbiscomment.h"
-#include "libavcodec/bytestream.h"
#include "libavutil/dict.h"
/**
@@ -62,13 +62,13 @@ int64_t ff_vorbiscomment_length(const AVDictionary *m, const char *vendor_string
return len;
}
-int ff_vorbiscomment_write(uint8_t **p, const AVDictionary *m,
+int ff_vorbiscomment_write(AVIOContext *pb, const AVDictionary *m,
const char *vendor_string,
AVChapter **chapters, unsigned int nb_chapters)
{
int cm_count = 0;
- bytestream_put_le32(p, strlen(vendor_string));
- bytestream_put_buffer(p, vendor_string, strlen(vendor_string));
+ avio_wl32(pb, strlen(vendor_string));
+ avio_write(pb, vendor_string, strlen(vendor_string));
if (chapters && nb_chapters) {
for (int i = 0; i < nb_chapters; i++) {
cm_count += av_dict_count(chapters[i]->metadata) + 1;
@@ -77,16 +77,16 @@ int ff_vorbiscomment_write(uint8_t **p, const AVDictionary *m,
if (m) {
int count = av_dict_count(m) + cm_count;
AVDictionaryEntry *tag = NULL;
- bytestream_put_le32(p, count);
+ avio_wl32(pb, count);
while ((tag = av_dict_get(m, "", tag, AV_DICT_IGNORE_SUFFIX))) {
int64_t len1 = strlen(tag->key);
int64_t len2 = strlen(tag->value);
if (len1+1+len2 > UINT32_MAX)
return AVERROR(EINVAL);
- bytestream_put_le32(p, len1+1+len2);
- bytestream_put_buffer(p, tag->key, len1);
- bytestream_put_byte(p, '=');
- bytestream_put_buffer(p, tag->value, len2);
+ avio_wl32(pb, len1 + 1 + len2);
+ avio_write(pb, tag->key, len1);
+ avio_w8(pb, '=');
+ avio_write(pb, tag->value, len2);
}
for (int i = 0; i < nb_chapters; i++) {
AVChapter *chp = chapters[i];
@@ -101,11 +101,11 @@ int ff_vorbiscomment_write(uint8_t **p, const AVDictionary *m,
s = s % 60;
snprintf(chapter_number, sizeof(chapter_number), "%03d", i);
snprintf(chapter_time, sizeof(chapter_time), "%02d:%02d:%02d.%03d", h, m, s, ms);
- bytestream_put_le32(p, 10+1+12);
- bytestream_put_buffer(p, "CHAPTER", 7);
- bytestream_put_buffer(p, chapter_number, 3);
- bytestream_put_byte(p, '=');
- bytestream_put_buffer(p, chapter_time, 12);
+ avio_wl32(pb, 10 + 1 + 12);
+ avio_write(pb, "CHAPTER", 7);
+ avio_write(pb, chapter_number, 3);
+ avio_w8(pb, '=');
+ avio_write(pb, chapter_time, 12);
tag = NULL;
while ((tag = av_dict_get(chapters[i]->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
@@ -113,18 +113,18 @@ int ff_vorbiscomment_write(uint8_t **p, const AVDictionary *m,
int64_t len2 = strlen(tag->value);
if (len1+1+len2+10 > UINT32_MAX)
return AVERROR(EINVAL);
- bytestream_put_le32(p, 10+len1+1+len2);
- bytestream_put_buffer(p, "CHAPTER", 7);
- bytestream_put_buffer(p, chapter_number, 3);
+ avio_wl32(pb, 10 + len1 + 1 + len2);
+ avio_write(pb, "CHAPTER", 7);
+ avio_write(pb, chapter_number, 3);
if (!strcmp(tag->key, "title"))
- bytestream_put_buffer(p, "NAME", 4);
+ avio_write(pb, "NAME", 4);
else
- bytestream_put_buffer(p, tag->key, len1);
- bytestream_put_byte(p, '=');
- bytestream_put_buffer(p, tag->value, len2);
+ avio_write(pb, tag->key, len1);
+ avio_w8(pb, '=');
+ avio_write(pb, tag->value, len2);
}
}
} else
- bytestream_put_le32(p, 0);
+ avio_wl32(pb, 0);
return 0;
}