[FFmpeg-devel] [PATCH]Check if free atoms in mov are actually moov atoms
Carl Eugen Hoyos
cehoyos at ag.or.at
Thu Mar 6 13:21:39 CET 2014
Hi!
Attached patch fixes ticket #1551, this is how vlc decodes the sample.
Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavformat/mov.c b/libavformat/mov.c
index c14e3c1..7fc0b36 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -3014,6 +3014,19 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if (atom.size >= 8) {
a.size = avio_rb32(pb);
a.type = avio_rl32(pb);
+ if (a.type == MKTAG('f','r','e','e') &&
+ a.size >= 8 &&
+ !c->found_moov) {
+ uint8_t buf[8];
+ uint32_t *type = (uint32_t *)buf + 1;
+ avio_read(pb, buf, 8);
+ avio_seek(pb, -8, SEEK_CUR);
+ if (*type == MKTAG('m','v','h','d') ||
+ *type == MKTAG('c','m','o','v')) {
+ av_log(c->fc, AV_LOG_WARNING, "Detected moov in a free atom.");
+ a.type = MKTAG('m','o','o','v');
+ }
+ }
if (atom.type != MKTAG('r','o','o','t') &&
atom.type != MKTAG('m','o','o','v'))
{
More information about the ffmpeg-devel
mailing list