[FFmpeg-devel] [PATCH] caf muxer: write metadata
Paul B Mahol
onemda at gmail.com
Fri Oct 26 01:52:40 CEST 2012
Signed-off-by: Paul B Mahol <onemda at gmail.com>
---
libavformat/cafenc.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index dc222cd..baa8270 100644
--- a/libavformat/cafenc.c
+++ b/libavformat/cafenc.c
@@ -25,6 +25,7 @@
#include "isom.h"
#include "avio_internal.h"
#include "libavutil/intfloat.h"
+#include "libavutil/dict.h"
typedef struct {
int64_t data;
@@ -102,7 +103,9 @@ static int caf_write_header(AVFormatContext *s)
AVIOContext *pb = s->pb;
AVCodecContext *enc = s->streams[0]->codec;
CAFContext *caf = s->priv_data;
+ AVDictionaryEntry *t = NULL;
unsigned int codec_tag = ff_codec_get_tag(ff_codec_caf_tags, enc->codec_id);
+ int64_t chunk_size;
switch (enc->codec_id) {
case AV_CODEC_ID_AAC:
@@ -180,6 +183,19 @@ static int caf_write_header(AVFormatContext *s)
avio_write(pb, enc->extradata, enc->extradata_size);
}
+ ffio_wfourcc(pb, "info"); //< Information chunk
+ caf->data = avio_tell(pb);
+ avio_wb64(pb, 0);
+ avio_wb32(pb, av_dict_count(s->metadata));
+ while ((t = av_dict_get(s->metadata, "", t, AV_DICT_IGNORE_SUFFIX))) {
+ avio_put_str(pb, t->key);
+ avio_put_str(pb, t->value);
+ }
+ chunk_size = avio_tell(pb) - caf->data;
+ avio_seek(pb, caf->data, SEEK_SET);
+ avio_wb64(pb, chunk_size - 8);
+ avio_seek(pb, caf->data + chunk_size, SEEK_SET);
+
ffio_wfourcc(pb, "data"); //< Audio Data chunk
caf->data = avio_tell(pb);
avio_wb64(pb, -1); //< mChunkSize
--
1.7.11.2
More information about the ffmpeg-devel
mailing list