Mercurial > libavformat.hg
changeset 5234:b133e5865370 libavformat
Export mov/mp4 major and compatible brands as metadata.
Patch by haim alon, haim dot alter at gmail dot com
author | bcoudurier |
---|---|
date | Sat, 26 Sep 2009 20:51:38 +0000 |
parents | cdb08821fda4 |
children | bf1b8e6b3a84 |
files | mov.c |
diffstat | 1 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mov.c Thu Sep 24 19:20:53 2009 +0000 +++ b/mov.c Sat Sep 26 20:51:38 2009 +0000 @@ -490,15 +490,35 @@ 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; }