From 3474d7e1b571b6b1dbcccde5535d7187a1425e12 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 11 Dec 2010 21:11:33 +0000 Subject: [PATCH] mp3_hdr.h: fix mp_check_mp3_header() 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). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32692 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/mp3_hdr.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libmpdemux/mp3_hdr.h b/libmpdemux/mp3_hdr.h index dfe3122d67..a9b34ac12c 100644 --- a/libmpdemux/mp3_hdr.h +++ b/libmpdemux/mp3_hdr.h @@ -26,9 +26,10 @@ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* freq, int* spf, int* #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; }