comparison mpeg.c @ 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 36ce24677f96
children 11a8f0c50814
comparison
equal deleted inserted replaced
1139:ff241582890f 1140:2cfb5e02b299
1267 int i; 1267 int i;
1268 1268
1269 for(i=0; i<p->buf_size; i++){ 1269 for(i=0; i<p->buf_size; i++){
1270 code = (code<<8) + p->buf[i]; 1270 code = (code<<8) + p->buf[i];
1271 if ((code & 0xffffff00) == 0x100) { 1271 if ((code & 0xffffff00) == 0x100) {
1272 switch(code){ 1272 if(code == SYSTEM_HEADER_START_CODE) sys++;
1273 case SYSTEM_HEADER_START_CODE: sys++; break; 1273 else if(code == PRIVATE_STREAM_1) priv1++;
1274 case PRIVATE_STREAM_1: priv1++; break; 1274 else if(code == PACK_START_CODE) pspack++;
1275 case PACK_START_CODE: pspack++; break; 1275 else if((code & 0xf0) == VIDEO_ID) vid++;
1276 case (VIDEO_ID + 0x100): vid++; break; 1276 else if((code & 0xe0) == AUDIO_ID) audio++;
1277 case (AUDIO_ID + 0x100): audio++; break;
1278 }
1279 } 1277 }
1280 } 1278 }
1281 if(sys && sys*9 <= pspack*10) 1279 if(sys && sys*9 <= pspack*10)
1282 return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg 1280 return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
1283 if((priv1 || vid) && (priv1+vid)*9 <= pspack*10) 1281 if((priv1 || vid || audio) && (priv1+vid+audio)*9 <= pspack*10)
1284 return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg 1282 return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
1285 if((!!vid ^ !!audio) && !sys && !pspack) /* PES stream */ 1283 if((!!vid ^ !!audio) && !sys && !pspack) /* PES stream */
1286 return AVPROBE_SCORE_MAX/2; 1284 return AVPROBE_SCORE_MAX/2+2;
1285 if(vid || audio) /* invalid VDR files */
1286 return AVPROBE_SCORE_MAX/2+2;
1287 return 0; 1287 return 0;
1288 } 1288 }
1289 1289
1290 1290
1291 typedef struct MpegDemuxContext { 1291 typedef struct MpegDemuxContext {