changeset 2071:228e5fd9a357 libavformat

improve mpeg4-es detection by rejecting streams with reserved startcodes (fixes 11-i_need_your_love-daw.mp3 detected as mpeg4)
author michael
date Mon, 07 May 2007 11:57:46 +0000
parents a3fe42b9f15a
children d20edf2ef6d4
files raw.c
diffstat 1 files changed, 7 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/raw.c	Sun May 06 18:23:28 2007 +0000
+++ b/raw.c	Mon May 07 11:57:46 2007 +0000
@@ -347,15 +347,13 @@
     return 0;
 }
 
-#define VIDEO_OBJECT_START_CODE        0x00000100
-#define VIDEO_OBJECT_LAYER_START_CODE  0x00000120
 #define VISUAL_OBJECT_START_CODE       0x000001b5
 #define VOP_START_CODE                 0x000001b6
 
 static int mpeg4video_probe(AVProbeData *probe_packet)
 {
     uint32_t temp_buffer= -1;
-    int VO=0, VOL=0, VOP = 0, VISO = 0;
+    int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
     int i;
 
     for(i=0; i<probe_packet->buf_size; i++){
@@ -364,15 +362,16 @@
             switch(temp_buffer){
             case VOP_START_CODE:             VOP++; break;
             case VISUAL_OBJECT_START_CODE:  VISO++; break;
-            }
-            switch(temp_buffer & 0xfffffff0){
-            case VIDEO_OBJECT_START_CODE:            VO++; break;
-            case VIDEO_OBJECT_LAYER_START_CODE:     VOL++; break;
+            case 0x100 ... 0x11F:             VO++; break;
+            case 0x120 ... 0x12F:            VOL++; break;
+            case 0x130 ... 0x1AF:
+            case 0x1B7 ... 0x1B9:
+            case 0x1C4 ... 0x1FF:            res++; break;
             }
         }
     }
 
-    if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0)
+    if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
         return AVPROBE_SCORE_MAX/2;
     return 0;
 }