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;
}