[FFmpeg-devel] [PATCH]Improve MPEG-in-mov detection
Carl Eugen Hoyos
cehoyos at ag.or.at
Fri Oct 19 19:41:29 CEST 2012
Hi!
Sorry for coming late!
I found one MPEG-in-mov sample that is still recognised as mov (it has a
description of "\x0\x0\x0\x0") and tried to read the QuickTime specification.
As I understand it, we should search for "MPEG" media description, patch is
attached.
(I also verified that QuickTime accepts other values than "m1s " for
mpeg-in-mov.)
Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavformat/mov.c b/libavformat/mov.c
index b296c24..24b68c8 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -2908,15 +2908,14 @@ static int mov_probe(AVProbeData *p)
* MOV-packed MPEG-PS */
offset = moov_offset;
- while(offset < (p->buf_size - 20)){ /* Sufficient space */
- /* We found an actual stsd atom */
- if(AV_RL32(p->buf+offset) == MKTAG('s','t','s','d') &&
- /* Make sure there's only one stream */
- AV_RB32(p->buf + offset + 8) == 1 &&
- AV_RL32(p->buf + offset + 16) == MKTAG('m','1','s',' ')
- ){
- av_log(NULL, AV_LOG_WARNING, "Found m1s tag indicating this is a MOV-packed MPEG-PS.\n");
- /* We found an stsd atom describing an MPEG-PS-in-MOV, return a
+ while(offset < (p->buf_size - 16)){ /* Sufficient space */
+ /* We found an actual hdlr atom */
+ if(AV_RL32(p->buf + offset ) == MKTAG('h','d','l','r') &&
+ AV_RL32(p->buf + offset + 8) == MKTAG('m','h','l','r') &&
+ AV_RL32(p->buf + offset + 12) == MKTAG('M','P','E','G')){
+ av_log(NULL, AV_LOG_WARNING, "Found media data tag MPEG indicating this is a MOV-packed MPEG-PS.\n");
+ /* We found a media handler reference atom describing an
+ * MPEG-PS-in-MOV, return a
* low score to force expanding the probe window until
* mpegps_probe finds what it needs */
return 5;
More information about the ffmpeg-devel
mailing list