diff options
author | haim alon <haim.alter@gmail.com> | 2009-09-26 20:51:38 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-09-26 20:51:38 +0000 |
commit | 7b5252ce3e85be727c1f8cd49e2b8d942fc087d9 (patch) | |
tree | c62a758a72538f34f8a22e58726de42f134c46d9 /libavformat/mov.c | |
parent | f331cec47dcb177e9582937a7a96f95e3a7a0901 (diff) | |
download | ffmpeg-7b5252ce3e85be727c1f8cd49e2b8d942fc087d9.tar.gz |
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
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r-- | libavformat/mov.c | 30 |
1 files changed, 25 insertions, 5 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); - - if (type != MKTAG('q','t',' ',' ')) + 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}; + + 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; } |