changeset 32605:7b4f8ecdc33b

Fix mp_check_mp3_header: it checked for a byte-swapped MP3-header on little-endian, and on big-endian it would only accept a MP3-header that would be valid when read in both directions. The latter was the reason for bug 905, causing the PS demuxer to claim files far too agressively (the MP3 check avoiding misdetection as DV is not exactly a sane approach, but it mostly works).
author reimar
date Sat, 11 Dec 2010 21:11:33 +0000
parents 3ba59e647e58
children c3a24e046795
files libmpdemux/mp3_hdr.h
diffstat 1 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/mp3_hdr.h	Sat Dec 11 19:32:23 2010 +0000
+++ b/libmpdemux/mp3_hdr.h	Sat Dec 11 21:11:33 2010 +0000
@@ -26,9 +26,10 @@
 #define mp_decode_mp3_header(hbuf)  mp_get_mp3_header(hbuf,NULL,NULL,NULL,NULL,NULL)
 
 static inline int mp_check_mp3_header(unsigned int head){
-    if( (head & 0x0000e0ff) != 0x0000e0ff ||
-        (head & 0x00fc0000) == 0x00fc0000) return 0;
-    if(mp_decode_mp3_header((unsigned char*)(&head))<=0) return 0;
+    unsigned char tmp[4] = {head >> 24, head >> 16, head >> 8, head};
+    if( (head & 0xffe00000) != 0xffe00000 ||
+        (head & 0x00000c00) == 0x00000c00) return 0;
+    if(mp_decode_mp3_header(tmp)<=0) return 0;
     return 1;
 }