diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-07-04 20:43:32 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-07-04 20:43:32 +0000 |
commit | a63bbf43fd3ac0ef743d0cb41c474273013b779f (patch) | |
tree | 76c9aebda072e53e8dc6b13d8d896a209d78e516 /libmpdemux | |
parent | 188460e7ee91a9dd1520cc2c699b93a1d07b435c (diff) |
better checks
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10370 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/mp3_hdr.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/libmpdemux/mp3_hdr.c b/libmpdemux/mp3_hdr.c index 9c068bdd17..6f60d7e31e 100644 --- a/libmpdemux/mp3_hdr.c +++ b/libmpdemux/mp3_hdr.c @@ -14,7 +14,10 @@ static int tabsel_123[2][3][16] = { {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0}, {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0} } }; -static long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 }; + +static long freqs[9] = { 44100, 48000, 32000, // MPEG 1.0 + 22050, 24000, 16000, // MPEG 2.0 + 11025, 12000 , 8000 }; // MPEG 2.5 int mp_mp3_get_lsf(unsigned char* hbuf){ unsigned long newhead = @@ -32,7 +35,7 @@ int mp_mp3_get_lsf(unsigned char* hbuf){ * return frame size or -1 (bad frame) */ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* srate){ - int stereo,ssize,crc,lsf,mpeg25,framesize,padding,bitrate_index,sampling_frequency; + int stereo,ssize,lsf,framesize,padding,bitrate_index,sampling_frequency; unsigned long newhead = hbuf[0] << 24 | hbuf[1] << 16 | @@ -43,8 +46,7 @@ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* srate){ #if 1 // head_check: - if( (newhead & 0xffe00000) != 0xffe00000 || - (newhead & 0x0000fc00) == 0x0000fc00){ + if( (newhead & 0xffe00000) != 0xffe00000 ){ mp_msg(MSGT_DEMUXER,MSGL_DBG2,"head_check failed\n"); return -1; } @@ -55,25 +57,23 @@ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* srate){ return -1; } + sampling_frequency = ((newhead>>10)&0x3); + if(sampling_frequency==3){ + mp_msg(MSGT_DEMUXER,MSGL_DBG2,"invalid sampling_frequency\n"); + return -1; // valid: 0..8 + } + if( newhead & ((long)1<<20) ) { + // MPEG 1.0 (lsf==0) or MPEG 2.0 (lsf==1) lsf = (newhead & ((long)1<<19)) ? 0x0 : 0x1; - mpeg25 = 0; + sampling_frequency += (lsf*3); } else { + // MPEG 2.5 lsf = 1; - mpeg25 = 1; + sampling_frequency += 6; } - if(mpeg25) - sampling_frequency = 6 + ((newhead>>10)&0x3); - else - sampling_frequency = ((newhead>>10)&0x3) + (lsf*3); - - if(sampling_frequency>8){ - mp_msg(MSGT_DEMUXER,MSGL_DBG2,"invalid sampling_frequency\n"); - return -1; // valid: 0..8 - } - - crc = ((newhead>>16)&0x1)^0x1; +// crc = ((newhead>>16)&0x1)^0x1; bitrate_index = ((newhead>>12)&0xf); padding = ((newhead>>9)&0x1); // fr->extension = ((newhead>>8)&0x1); @@ -85,16 +85,17 @@ int mp_get_mp3_header(unsigned char* hbuf,int* chans, int* srate){ stereo = ( (((newhead>>6)&0x3)) == 3) ? 1 : 2; - if(!bitrate_index){ - mp_msg(MSGT_DEMUXER,MSGL_DBG2,"Free format not supported.\n"); - return -1; - } +// !checked later through tabsel_123[]! +// if(!bitrate_index || bitrate_index==15){ +// mp_msg(MSGT_DEMUXER,MSGL_DBG2,"Free format not supported.\n"); +// return -1; +// } if(lsf) ssize = (stereo == 1) ? 9 : 17; else ssize = (stereo == 1) ? 17 : 32; - if(crc) ssize += 2; + if(!((newhead>>16)&0x1)) ssize += 2; // CRC framesize = tabsel_123[lsf][2][bitrate_index] * 144000; |