[FFmpeg-devel] [PATCH] caf muxer: write metadata

Michael Niedermayer michaelni at gmx.at
Fri Oct 26 04:11:44 CEST 2012


On Thu, Oct 25, 2012 at 11:52:40PM +0000, Paul B Mahol wrote:
> 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);

this is not guranteed to work with non seekable output.

otherwise LGTM

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20121026/d2475fb1/attachment.asc>


More information about the ffmpeg-devel mailing list