diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2007-12-03 09:37:06 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2007-12-03 09:37:06 +0000 |
commit | 7e1720dec6c28860de268b94b91e13d09cef7b20 (patch) | |
tree | b83aecd462fcafe191f0ce1186fef3c785ee3c57 /libavformat | |
parent | 2db971135ab498a1258e2a00d76e004ede53ffa2 (diff) | |
download | ffmpeg-7e1720dec6c28860de268b94b91e13d09cef7b20.tar.gz |
make mpeg-ps probe less happy with random data
fixes missdetection of O-MP3-5.mp3
Originally committed as revision 11149 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mpeg.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 5c55c485bb..b3c2e3ed49 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -67,7 +67,7 @@ static int check_pes(uint8_t *p, uint8_t *end){ static int mpegps_probe(AVProbeData *p) { uint32_t code= -1; - int sys=0, pspack=0, priv1=0, vid=0, audio=0; + int sys=0, pspack=0, priv1=0, vid=0, audio=0, invalid=0; int i; int score=0; @@ -85,16 +85,19 @@ static int mpegps_probe(AVProbeData *p) else if(code == PACK_START_CODE) pspack++; else if((code & 0xf0) == VIDEO_ID && pes) vid++; else if((code & 0xe0) == AUDIO_ID && pes) audio++; + + else if((code & 0xf0) == VIDEO_ID && !pes) invalid++; + else if((code & 0xe0) == AUDIO_ID && !pes) invalid++; } } - if(vid || audio) /* invalid VDR files nd short PES streams */ + if(vid+audio > invalid) /* invalid VDR files nd short PES streams */ score= AVPROBE_SCORE_MAX/4; //av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d len:%d\n", sys, priv1, pspack,vid, audio, p->buf_size); - if(sys && sys*9 <= pspack*10) + if(sys>invalid && sys*9 <= pspack*10) return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg - if((priv1 || vid || audio) && (priv1+vid+audio)*9 <= pspack*10) + if(priv1 + vid + audio > invalid && (priv1+vid+audio)*9 <= pspack*10) return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg if((!!vid ^ !!audio) && (audio+vid > 1) && !sys && !pspack && p->buf_size>2048) /* PES stream */ return AVPROBE_SCORE_MAX/2+2; |