From 7b5252ce3e85be727c1f8cd49e2b8d942fc087d9 Mon Sep 17 00:00:00 2001 From: haim alon Date: Sat, 26 Sep 2009 20:51:38 +0000 Subject: [PATCH] Export mov/mp4 major and compatible brands as metadata. Patch by haim alon, haim dot alter at gmail dot com Originally committed as revision 20032 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/mov.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index dc22597624..ce5ea788b8 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -490,15 +490,35 @@ static int mov_read_mdat(MOVContext *c, ByteIOContext *pb, MOVAtom atom) return 0; /* now go for moov */ } +/* read major brand, minor version and compatible brands and store them as metadata */ static int mov_read_ftyp(MOVContext *c, ByteIOContext *pb, MOVAtom atom) { - uint32_t type = get_le32(pb); + uint32_t minor_ver; + int comp_brand_size; + char minor_ver_str[11]; /* 32 bit integer -> 10 digits + null */ + char* comp_brands_str; + uint8_t type[5] = {0}; - if (type != MKTAG('q','t',' ',' ')) + get_buffer(pb, type, 4); + if (strcmp(type, "qt, ")) c->isom = 1; av_log(c->fc, AV_LOG_DEBUG, "ISO: File Type Major Brand: %.4s\n",(char *)&type); - get_be32(pb); /* minor version */ - url_fskip(pb, atom.size - 8); + av_metadata_set(&c->fc->metadata, "major_brand", type); + minor_ver = get_be32(pb); /* minor version */ + snprintf(minor_ver_str, sizeof(minor_ver_str), "%d", minor_ver); + av_metadata_set(&c->fc->metadata, "minor_version", minor_ver_str); + + comp_brand_size = atom.size - 8; + if (comp_brand_size < 0) + return -1; + comp_brands_str = av_malloc(comp_brand_size + 1); /* Add null terminator */ + if (!comp_brands_str) + return AVERROR(ENOMEM); + get_buffer(pb, comp_brands_str, comp_brand_size); + comp_brands_str[comp_brand_size] = 0; + av_metadata_set(&c->fc->metadata, "compatible_brands", comp_brands_str); + av_freep(&comp_brands_str); + return 0; }