Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

mp3_format.h

Go to the documentation of this file.
00001 
00006 #ifndef _MP3_FORMAT_H_
00007 #define _MP3_FORMAT_H_
00008 
00014 struct mp3_frame_header
00015 {
00017     enum { size = 21 };
00018 
00020     enum { IDex, ID, layer, protection_bit, bitrate_index, frequency, 
00021            padding_bit, private_bit, mode, mode_extension, copyright, original, emphasis };
00022     
00024     enum { stereo, joint_stereo, dual_channel, single_channel };
00025            
00026     static const int bits[]; 
00027     static const int bitrate_table[2][4][16]; 
00028     static const int version_table[2][2]; 
00029     static const int layer_table[4]; 
00030     static const int frequency_table[2][2][4]; 
00031 };
00032 
00033 #ifdef FRAMEHEADER
00034 const int mp3_frame_header::bits[] = { 0, 1, 2, 4, 5, 9, 11, 12, 13, 15, 17, 18, 19, 21 };
00035 const int mp3_frame_header::bitrate_table[2][4][16] =
00036   { { { -1, -1, -1, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, -1 },
00037       { -1,  8, 16, 24,  32,  64,  80,  56,  64, 128, 160, 112, 128, 256, 320, -1 },
00038       { -1, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, -1 },
00039       { -1, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1 } },
00040     { { -1, -1, -1, -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, -1 },
00041       { -1, 32, 40, 48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, -1 },
00042       { -1, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, -1 },
00043       { -1, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1 } } };
00044 
00045 const int mp3_frame_header::version_table[2][2] = { { 3, -1 }, { 2, 1 } };
00046 const int mp3_frame_header::layer_table[4] = { -1, 3, 2, 1 };
00047 const int mp3_frame_header::frequency_table[2][2][4] = { { { 11025, 12000,  8000, -1 }, {    -1,    -1,    -1, -1 } }, 
00048                                                          { { 22050, 24000, 16000, -1 }, { 44100, 48000, 32000, -1 } } };
00049 #endif
00050                                                          
00056 struct mp3_data_header_mpeg1_1ch
00057 { 
00059   enum { size = 18 }; 
00060   
00062   enum { main_data_begin, private_bits, scfsi }; 
00063   
00064   static const int bits[]; 
00065 };
00066 
00072 struct mp3_data_header_mpeg1_2ch
00073 { 
00075   enum { size = 20 };
00076   
00078   enum { main_data_begin, private_bits, scfsi };  
00079   
00080   static const int bits[]; 
00081 };
00082 
00088 struct mp3_data_header_mpeg2_1ch
00089 { 
00091   enum { size = 9 }; 
00092   
00094   enum { main_data_begin, private_bits }; 
00095   
00096   static const int bits[]; 
00097 };
00098 
00104 struct mp3_data_header_mpeg2_2ch
00105 { 
00107   enum { size = 10 };
00108   
00110   enum { main_data_begin, private_bits };  
00111   
00112   static const int bits[]; 
00113 };
00114 
00115 #ifdef DATAHEADER
00116 const int mp3_data_header_mpeg1_1ch::bits[] = { 0, 9, 14, 18 };
00117 const int mp3_data_header_mpeg1_2ch::bits[] = { 0, 9, 12, 20 };
00118 const int mp3_data_header_mpeg2_1ch::bits[] = { 0, 8, 9 };
00119 const int mp3_data_header_mpeg2_2ch::bits[] = { 0, 8, 10 };
00120 #endif                                                         
00121 
00122 
00128 struct mp3_channel_header_mpeg1
00129 {
00131   enum { size = 59 };
00132   
00134   enum { part2_3_length, big_values, global_gain, scalefac_compress, window_switching_flag, 
00135          variable_part, preflag, scalefac_scale, count1table_select };
00136   
00137   static const int bits[]; 
00138 };
00139 
00145 struct mp3_channel_header_mpeg2
00146 {
00148   enum { size = 63 };
00149   
00151   enum { part2_3_length, big_values, global_gain, scalefac_compress, window_switching_flag, 
00152          variable_part, scalefac_scale, count1table_select };
00153   
00154   static const int bits[]; 
00155 };
00156 
00157 #ifdef CHANNELHEADER
00158 const int mp3_channel_header_mpeg1::bits[] = { 0, 12, 21, 29, 33, 34, 56, 57, 58, 59 };
00159 const int mp3_channel_header_mpeg2::bits[] = { 0, 12, 21, 29, 38, 39, 61, 62, 63 };
00160 #endif
00161 
00162 
00168 struct mp3_tag_v1
00169 {
00171   enum { size = 128,
00172          headersize = 3
00173        }; 
00174   
00175   static const char *header; 
00176 };
00177 
00178 #ifdef TAGV1
00179 const char *mp3_tag_v1::header = "TAG";
00180 #endif
00181 
00182 
00188 struct mp3
00189 {
00190   enum { sync = 0x7FF, 
00191          syncbits = 11, 
00192          CRCbits = 16, 
00193          frametime = 26, 
00194          maxloud = 4 
00195        };
00196 };
00197 
00198 #endif //_MP3_FORMAT_H_

Generated on Wed Sep 6 00:17:57 2006 for Kraken by  doxygen 1.4.4