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
This commit is contained in:
reimar 2010-12-11 21:11:33 +00:00 committed by Uoti Urpala
parent 2b2929fc93
commit 3474d7e1b5
1 changed files with 4 additions and 3 deletions

View File

@ -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) #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){ static inline int mp_check_mp3_header(unsigned int head){
if( (head & 0x0000e0ff) != 0x0000e0ff || unsigned char tmp[4] = {head >> 24, head >> 16, head >> 8, head};
(head & 0x00fc0000) == 0x00fc0000) return 0; if( (head & 0xffe00000) != 0xffe00000 ||
if(mp_decode_mp3_header((unsigned char*)(&head))<=0) return 0; (head & 0x00000c00) == 0x00000c00) return 0;
if(mp_decode_mp3_header(tmp)<=0) return 0;
return 1; return 1;
} }