From e552f8c2dd082a69ab56461fc7fa897d25baf22c Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Fri, 21 May 2010 09:01:44 +0200 Subject: [PATCH] PhotoRec: mp3 recovery - code cleanup --- src/file_mp3.c | 76 +++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/src/file_mp3.c b/src/file_mp3.c index a847ce7a..107fa78c 100644 --- a/src/file_mp3.c +++ b/src/file_mp3.c @@ -187,29 +187,26 @@ static int header_check_mp3(const unsigned char *buffer, const unsigned int buff const unsigned int mpeg_layer =(buffer[potential_frame_offset+1]>>1)&0x03; const unsigned int bit_rate_key =(buffer[potential_frame_offset+2]>>4)&0x0F; const unsigned int sampling_rate_key=(buffer[potential_frame_offset+2]>>2)&0x03; - const unsigned int padding =(buffer[potential_frame_offset+2]>>1)&0x01; - const unsigned int bit_rate= bit_rate_table[mpeg_version][mpeg_layer][bit_rate_key]*1000; - const unsigned int sample_rate=sample_rate_table[mpeg_version][sampling_rate_key]; + const unsigned int padding =(buffer[potential_frame_offset+2]>>1)&0x01; + const unsigned int bit_rate =bit_rate_table[mpeg_version][mpeg_layer][bit_rate_key]; + const unsigned int sample_rate =sample_rate_table[mpeg_version][sampling_rate_key]; unsigned int frameLengthInBytes=0; - if(sample_rate>0 && bit_rate>0) + if(sample_rate==0 || bit_rate==0 || mpeg_layer==MPEG_L1) + return 0; + if(mpeg_layer==MPEG_L3) { - if(mpeg_layer==MPEG_L3) - { - if(mpeg_version==MPEG_V1) - frameLengthInBytes = 144 * bit_rate / sample_rate + padding; - else - frameLengthInBytes = 72 * bit_rate / sample_rate + padding; - } - else if(mpeg_layer==MPEG_L2) - frameLengthInBytes = 144 * bit_rate / sample_rate + padding; + if(mpeg_version==MPEG_V1) + frameLengthInBytes = 144000 * bit_rate / sample_rate + padding; else - frameLengthInBytes = (12 * bit_rate / sample_rate + padding)*4; + frameLengthInBytes = 72000 * bit_rate / sample_rate + padding; } + else if(mpeg_layer==MPEG_L2) + frameLengthInBytes = 144000 * bit_rate / sample_rate + padding; + else + frameLengthInBytes = (12000 * bit_rate / sample_rate + padding)*4; #ifdef DEBUG_MP3 - log_info("bit_rate=%u\n",bit_rate); - log_info("sample_rate=%u\n",sample_rate); - log_info("padding=%u\n", padding); - log_info("frameLengthInBytes=%u\n",frameLengthInBytes); + log_info("framesize: %u, layer: %u, bitrate: %u, padding: %u\n", + frameLengthInBytes, 4-mpeg_layer, bit_rate, padding); #endif if(frameLengthInBytes==0) return 0; @@ -268,13 +265,13 @@ static int data_check_mp3(const unsigned char *buffer, const unsigned int buffer */ if(buffer[i+0]==0xFF && ((buffer[i+1]&0xE0)==0xE0)) { - unsigned int mpeg_version =(buffer[i+1]>>3)&0x03; - unsigned int mpeg_layer =(buffer[i+1]>>1)&0x03; - unsigned int bit_rate_key =(buffer[i+2]>>4)&0x0F; - unsigned int sampling_rate_key=(buffer[i+2]>>2)&0x03; - unsigned int padding =(buffer[i+2]>>1)&0x01; - unsigned int bit_rate= bit_rate_table[mpeg_version][mpeg_layer][bit_rate_key]*1000; - unsigned int sample_rate=sample_rate_table[mpeg_version][sampling_rate_key]; + const unsigned int mpeg_version =(buffer[i+1]>>3)&0x03; + const unsigned int mpeg_layer =(buffer[i+1]>>1)&0x03; + const unsigned int bit_rate_key =(buffer[i+2]>>4)&0x0F; + const unsigned int sampling_rate_key=(buffer[i+2]>>2)&0x03; + const unsigned int padding =(buffer[i+2]>>1)&0x01; + const unsigned int bit_rate =bit_rate_table[mpeg_version][mpeg_layer][bit_rate_key]; + const unsigned int sample_rate =sample_rate_table[mpeg_version][sampling_rate_key]; unsigned int frameLengthInBytes=0; /* log_info("frame_offset=%u\n",i); @@ -282,24 +279,21 @@ static int data_check_mp3(const unsigned char *buffer, const unsigned int buffer log_info("sample_rate=%u\n",sample_rate); log_info("frameLengthInBytes=%u\n",frameLengthInBytes); */ - if(sample_rate>0 && bit_rate>0) - { - if(mpeg_layer==MPEG_L3) - { - if(mpeg_version==MPEG_V1) - frameLengthInBytes = 144 * bit_rate / sample_rate + padding; - else - frameLengthInBytes = 72 * bit_rate / sample_rate + padding; - } - else if(mpeg_layer==MPEG_L2) - frameLengthInBytes = 144 * bit_rate / sample_rate + padding; - else - frameLengthInBytes = (12 * bit_rate / sample_rate + padding)*4; - } - if(frameLengthInBytes<3) - { + if(sample_rate==0 || bit_rate==0 || mpeg_layer==MPEG_L1) return 2; + if(mpeg_layer==MPEG_L3) + { + if(mpeg_version==MPEG_V1) + frameLengthInBytes = 144000 * bit_rate / sample_rate + padding; + else + frameLengthInBytes = 72000 * bit_rate / sample_rate + padding; } + else if(mpeg_layer==MPEG_L2) + frameLengthInBytes = 144000 * bit_rate / sample_rate + padding; + else + frameLengthInBytes = (12000 * bit_rate / sample_rate + padding)*4; + if(frameLengthInBytes<3) + return 2; file_recovery->calculated_file_size+=frameLengthInBytes; } else if(buffer[i]=='L' && buffer[i+1]=='Y' && buffer[i+2]=='R' && buffer[i+3]=='I' && buffer[i+4]=='C' && buffer[i+5]=='S' && buffer[i+6]=='B' && buffer[i+7]=='E' && buffer[i+8]=='G' && buffer[i+9]=='I' && buffer[i+10]=='N')