changeset 3562:44699ecd5f6f libavformat

Fix misdetection of MPEG-PS (AVSEQ03.DAT and AVSEQ06.DAT) as psxstr.
author michael
date Fri, 11 Jul 2008 15:10:58 +0000
parents bc473761b9e7
children 82f150c809c6
files psxstr.c
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/psxstr.c	Fri Jul 11 07:41:11 2008 +0000
+++ b/psxstr.c	Fri Jul 11 15:10:58 2008 +0000
@@ -67,9 +67,9 @@
 static int str_probe(AVProbeData *p)
 {
     int start;
+    uint8_t *sector;
 
-    /* need at least 0x38 bytes to validate */
-    if (p->buf_size < 0x38)
+    if (p->buf_size < RAW_CD_SECTOR_SIZE)
         return 0;
 
     if ((AV_RL32(&p->buf[0]) == RIFF_TAG) &&
@@ -80,10 +80,19 @@
     } else
         start = 0;
 
+    sector= p->buf + start;
+
     /* look for CD sync header (00, 0xFF x 10, 00) */
     if (memcmp(p->buf+start,sync_header,sizeof(sync_header)))
         return 0;
 
+    if(sector[0x11] >= 32)
+        return 0;
+    if(   (sector[0x12] & CDXA_TYPE_MASK) != CDXA_TYPE_VIDEO
+       && (sector[0x12] & CDXA_TYPE_MASK) != CDXA_TYPE_AUDIO
+       && (sector[0x12] & CDXA_TYPE_MASK) != CDXA_TYPE_DATA)
+        return 0;
+
     /* MPEG files (like those ripped from VCDs) can also look like this;
      * only return half certainty */
     return 50;