Mercurial > libavformat.hg
changeset 1140:2cfb5e02b299 libavformat
detect audio-only program streams and broken files made by VDR
author | mru |
---|---|
date | Thu, 29 Jun 2006 19:03:53 +0000 |
parents | ff241582890f |
children | ef9bf68071d3 |
files | mpeg.c |
diffstat | 1 files changed, 9 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/mpeg.c Thu Jun 29 19:02:15 2006 +0000 +++ b/mpeg.c Thu Jun 29 19:03:53 2006 +0000 @@ -1269,21 +1269,21 @@ for(i=0; i<p->buf_size; i++){ code = (code<<8) + p->buf[i]; if ((code & 0xffffff00) == 0x100) { - switch(code){ - case SYSTEM_HEADER_START_CODE: sys++; break; - case PRIVATE_STREAM_1: priv1++; break; - case PACK_START_CODE: pspack++; break; - case (VIDEO_ID + 0x100): vid++; break; - case (AUDIO_ID + 0x100): audio++; break; - } + if(code == SYSTEM_HEADER_START_CODE) sys++; + else if(code == PRIVATE_STREAM_1) priv1++; + else if(code == PACK_START_CODE) pspack++; + else if((code & 0xf0) == VIDEO_ID) vid++; + else if((code & 0xe0) == AUDIO_ID) audio++; } } if(sys && sys*9 <= pspack*10) return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg - if((priv1 || vid) && (priv1+vid)*9 <= pspack*10) + if((priv1 || vid || audio) && (priv1+vid+audio)*9 <= pspack*10) return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg if((!!vid ^ !!audio) && !sys && !pspack) /* PES stream */ - return AVPROBE_SCORE_MAX/2; + return AVPROBE_SCORE_MAX/2+2; + if(vid || audio) /* invalid VDR files */ + return AVPROBE_SCORE_MAX/2+2; return 0; }