diff options
author | Paul B Mahol <onemda@gmail.com> | 2012-10-25 23:33:34 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2012-10-26 03:12:45 +0000 |
commit | 7fe6f6e2b10fe278fecea850fda1d8e321330c15 (patch) | |
tree | 36d79b3bd83a4eb5d01bbf76f34dca413792876f | |
parent | 507f2940ccdcedf2fdc064c5fb6022b60bace8ca (diff) | |
download | ffmpeg-7fe6f6e2b10fe278fecea850fda1d8e321330c15.tar.gz |
caf muxer: write metadata
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | Changelog | 1 | ||||
-rw-r--r-- | libavformat/cafenc.c | 17 | ||||
-rw-r--r-- | libavformat/version.h | 2 | ||||
-rw-r--r-- | tests/ref/lavf/caf | 4 |
4 files changed, 21 insertions, 3 deletions
@@ -17,6 +17,7 @@ version <next>: - support for building DLLs using MSVC - LVF demuxer - ffescape tool +- metadata (info chunk) support in CAF muxer version 1.0: diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c index dc222cd50d..cc39a8341c 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 = 0; switch (enc->codec_id) { case AV_CODEC_ID_AAC: @@ -180,6 +183,20 @@ static int caf_write_header(AVFormatContext *s) avio_write(pb, enc->extradata, enc->extradata_size); } + if (av_dict_count(s->metadata)) { + ffio_wfourcc(pb, "info"); //< Information chunk + while ((t = av_dict_get(s->metadata, "", t, AV_DICT_IGNORE_SUFFIX))) { + chunk_size += strlen(t->key) + strlen(t->value) + 2; + } + avio_wb64(pb, chunk_size + 4); + avio_wb32(pb, av_dict_count(s->metadata)); + t = NULL; + while ((t = av_dict_get(s->metadata, "", t, AV_DICT_IGNORE_SUFFIX))) { + avio_put_str(pb, t->key); + avio_put_str(pb, t->value); + } + } + ffio_wfourcc(pb, "data"); //< Audio Data chunk caf->data = avio_tell(pb); avio_wb64(pb, -1); //< mChunkSize diff --git a/libavformat/version.h b/libavformat/version.h index fe31a7d78d..bab294c73c 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVFORMAT_VERSION_MAJOR 54 -#define LIBAVFORMAT_VERSION_MINOR 34 +#define LIBAVFORMAT_VERSION_MINOR 35 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ diff --git a/tests/ref/lavf/caf b/tests/ref/lavf/caf index 972b27cc19..f2ae9c33c9 100644 --- a/tests/ref/lavf/caf +++ b/tests/ref/lavf/caf @@ -1,3 +1,3 @@ -71e1abdfc59613fe05fca2939f02e02d *./tests/data/lavf/lavf.caf -90204 ./tests/data/lavf/lavf.caf +6c97bfc8e455d5fb8b3b45806857a953 *./tests/data/lavf/lavf.caf +90235 ./tests/data/lavf/lavf.caf ./tests/data/lavf/lavf.caf CRC=0xf1ae5536 |