1 #ifndef TYPES_H 2 #define TYPES_H 3 4 #include <stdio.h> 5 #include <time.h> 6 #include <string.h> 7 #include <ctype.h> 8 #include <stdlib.h> 9 #include <math.h> 10 11 #define MPEG2_5 0 12 #define MPEG2 2 13 #define MPEG1 3 14 15 #define MODE_STEREO 0 16 #define MODE_MS_STEREO 1 17 #define MODE_DUAL_CHANNEL 2 18 #define MODE_MONO 3 19 20 #define LAYER_3 1 21 #define LAYER_2 2 22 #define LAYER_1 3 23 #define samp_per_frame 1152 24 #define samp_per_frame2 576 25 #define PI 3.14159265358979 26 #define HAN_SIZE 512 27 #define SBLIMIT 32 28 29 #define BUFFER_SIZE 2048//2048//1384 /* output buffer size in bytes 576 bytes */ 30 31 #define FIFO_SIZE 128 32 typedef struct 33 { 34 int si_len; /* number of bytes in side info */ 35 int fr_len; /* number of data bytes in frame */ 36 unsigned char side[40]; /* side info max len = (288 bits / 8) + 1 which gets cleared 最初40*/ 37 } fifo_t; 38 39 #define main_size 16384 //main_size = si->resv_drain 40 41 typedef struct 42 { 43 unsigned int i; /* file buffer index */ 44 unsigned char *b; /* buffer pointer */ 45 } bs_t; 46 47 typedef struct 48 { 49 FILE *file; 50 int type; 51 int layr; 52 int mode; 53 int bitr; 54 int psyc; 55 int emph; 56 int padding; 57 long samples_per_frame; 58 long bits_per_frame; 59 long bits_per_slot; 60 long total_frames; 61 int bitrate_index; 62 int samplerate; 63 int samplerate_index; 64 int crc; 65 int ext; 66 int mode_ext; 67 int copyright; 68 int original; 69 int channels; 70 int granules; 71 int resv_limit; 72 int cutoff; 73 } mpeg_t; 74 75 typedef struct 76 { 77 char *in_buf; 78 char *out_buf; 79 mpeg_t mpeg; 80 } config_t; 81 82 typedef struct 83 { 84 long remainder; 85 long bytes_per_frame; 86 long lag; 87 int mean_bits; 88 int sideinfo_len; 89 } mp3_info; 90 91 #define HUFFBITS unsigned long int 92 #define HTN 34 93 #define MXOFF 250 94 95 struct huffcodetab 96 { 97 unsigned int xlen; /*max. x-index+ */ 98 unsigned int ylen; /*max. y-index+ */ 99 unsigned int linbits; /*number of linbits */ 100 unsigned int linmax; /*max number to be stored in linbits */ 101 HUFFBITS *table; /*pointer to array[xlen][ylen] */ 102 unsigned char *hlen; /*pointer to array[xlen][ylen] */ 103 }; 104 105 extern struct huffcodetab ht[HTN];/* global memory block */ 106 /* array of all huffcodtable headers */ 107 /* 0..31 Huffman code table 0..31 */ 108 /* 32,33 count1-tables */ 109 110 /* Side information */ 111 typedef struct 112 { 113 unsigned part2_3_length; 114 unsigned big_values; 115 unsigned count1; 116 unsigned global_gain; 117 unsigned table_select[3]; 118 unsigned region0_count; 119 unsigned region1_count; 120 unsigned count1table_select; 121 unsigned address1; 122 unsigned address2; 123 unsigned address3; 124 int quantizerStepSize; 125 int *scalefac_band_long; 126 int cutoff; 127 } gr_info; 128 129 typedef struct 130 { 131 int main_data_begin; 132 struct 133 { 134 struct 135 { 136 gr_info tt; 137 } ch[2]; 138 } gr[2]; 139 int resv_drain; 140 } L3_side_info_t; 141 142 typedef struct 143 { 144 mp3_info info; 145 config_t config; 146 unsigned char header[4]; 147 148 fifo_t fifo[FIFO_SIZE]; 149 unsigned char main_[main_size]; /* main data buffer (length always less than this)实测68*/ 150 bs_t bs; 151 int l3_enc[2][2][samp_per_frame2]; 152 long mdct_freq[2][2][samp_per_frame2]; 153 L3_side_info_t side_info; 154 long l3_sb_sample[2][3][18][SBLIMIT]; 155 int main_data_begin; 156 int wr; 157 int rd; 158 int by; 159 int bi; 160 int count; 161 int bits; 162 int off[2]; 163 int *scalefac_band_long; 164 int frame_size; 165 } mp3_enc; 166 167 /* function prototypes */ 168 169 /* bitstream.c */ 170 void close_bit_stream(mp3_enc *mp3); 171 void open_bit_stream(mp3_enc *mp3); 172 173 unsigned int L3_format_bitstream(mp3_enc *mp3, unsigned char **ppOutBuf); 174 mp3_enc *Mp3EncodeVariableInit(int samplerate, int channel, int Bitrate); 175 void Mp3EncodeDeinit(mp3_enc *mp3); 176 /* l3loop.c */ 177 178 /* layer3.c */ 179 long L3_compress(mp3_enc *mp3, int len, unsigned char **ppOutBuf); 180 181 /* coder.c */ 182 void L3_window_filter_subband(mp3_enc *mp3, unsigned long **buffer, long s[SBLIMIT], 183 int k); 184 #if 1 185 void L3_iteration_loop(mp3_enc *mp3) ; 186 void L3_mdct_sub(mp3_enc *mp3); 187 #else 188 void L3_iteration_loop(long mdct_freq_org[1][1][samp_per_frame2], 189 L3_side_info_t *side_info, 190 int l3_enc[1][1][samp_per_frame2], 191 int mean_bits); 192 void L3_mdct_sub(mp3_enc *mp3, long sb_sample[2][3][18][SBLIMIT], 193 long mdct_freq[2][2][samp_per_frame2]); 194 195 #endif 196 /* utils.c */ 197 long mul(int x, int y); 198 long muls(int x, int y); 199 long mulr(int x, int y); 200 long mulsr(int x, int y); 201 202 #endif 203