[FFmpeg-cvslog] r20032 - trunk/libavformat/mov.c
bcoudurier
subversion
Sat Sep 26 22:51:38 CEST 2009
Author: bcoudurier
Date: Sat Sep 26 22:51:38 2009
New Revision: 20032
Log:
Export mov/mp4 major and compatible brands as metadata.
Patch by haim alon, haim dot alter at gmail dot com
Modified:
trunk/libavformat/mov.c
Modified: trunk/libavformat/mov.c
==============================================================================
--- trunk/libavformat/mov.c Sat Sep 26 21:55:21 2009 (r20031)
+++ trunk/libavformat/mov.c Sat Sep 26 22:51:38 2009 (r20032)
@@ -490,15 +490,35 @@ static int mov_read_mdat(MOVContext *c,
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;
}
More information about the ffmpeg-cvslog
mailing list