# HG changeset patch # User bcoudurier # Date 1253998298 0 # Node ID b133e58653701352bc328092377504ae2a658212 # Parent cdb08821fda462add120ae743a8d393f81dce9c5 Export mov/mp4 major and compatible brands as metadata. Patch by haim alon, haim dot alter at gmail dot com diff -r cdb08821fda4 -r b133e5865370 mov.c --- 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; }