1 #include <stdio.h> 2 #include <string.h> 3 4 #if !defined(WIN32) && !defined(macintosh) && !defined(_WIN32_WCE) 5 #include <unistd.h> 6 #endif 7 8 #include <math.h> 9 10 #if defined(_WIN32) 11 # undef WIN32 12 # define WIN32 13 #endif 14 15 #if defined(WIN32) || defined(macintosh) || defined(_WIN32_WCE) 16 17 # define M_PI 3.14159265358979323846 18 # define M_SQRT2 1.41421356237309504880 19 # define REAL_IS_FLOAT 20 # define NEW_DCT9 21 22 # define random rand 23 # define srandom srand 24 25 #endif 26 27 #ifdef REAL_IS_FLOAT 28 # define real float 29 #elif defined(REAL_IS_LONG_DOUBLE) 30 # define real long double 31 #else 32 # define real double 33 #endif 34 35 #ifdef __GNUC__ 36 #define INLINE inline 37 #elif ((defined _MSC_VER) || (defined __inline__)) 38 #define INLINE __inline__ 39 #else 40 #define INLINE 41 #endif 42 43 /* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */ 44 #define AUDIOBUFSIZE 16384 45 46 #ifndef FALSE 47 #define FALSE 0 48 #endif 49 #ifndef FALSE 50 #define TRUE 1 51 #endif 52 53 #define SBLIMIT 32 54 #define SSLIMIT 18 55 56 #define SCALE_BLOCK 12 57 58 59 #define MPG_MD_STEREO 0 60 #define MPG_MD_JOINT_STEREO 1 61 #define MPG_MD_DUAL_CHANNEL 2 62 #define MPG_MD_MONO 3 63 64 #define MAXFRAMESIZE 1792 65 66 67 /* Pre Shift fo 16 to 8 bit converter table */ 68 #define AUSHIFT (3) 69 70 struct frame { 71 int stereo; 72 int jsbound; 73 int single; 74 int lsf; 75 int mpeg25; 76 int header_change; 77 int lay; 78 int error_protection; 79 int bitrate_index; 80 int sampling_frequency; 81 int padding; 82 int extension; 83 int mode; 84 int mode_ext; 85 int copyright; 86 int original; 87 int emphasis; 88 int framesize; /* computed framesize */ 89 90 /* layer2 stuff */ 91 int II_sblimit; 92 void *alloc; 93 }; 94 95 struct parameter { 96 int quiet; /* shut up! */ 97 int tryresync; /* resync stream after error */ 98 int verbose; /* verbose level */ 99 int checkrange; 100 }; 101 102 struct mpstr; /* forward declaration. */ 103 104 extern unsigned int get1bit(void); 105 extern unsigned int getbits(int); 106 extern unsigned int getbits_fast(int); 107 extern int set_pointer(long,struct mpstr *); 108 109 extern unsigned char *wordpointer; 110 extern int bitindex; 111 112 extern void make_decode_tables(long scaleval); 113 extern int do_layer3(struct frame *fr,unsigned char *,int *,struct mpstr *); 114 extern int do_layer2(struct frame *fr,unsigned char *,int *,struct mpstr *); 115 extern int do_layer1(struct frame *fr,unsigned char *,int *,struct mpstr *); 116 extern int decode_header(struct frame *fr,unsigned long newhead); 117 118 119 120 struct gr_info_s { 121 int scfsi; 122 unsigned part2_3_length; 123 unsigned big_values; 124 unsigned scalefac_compress; 125 unsigned block_type; 126 unsigned mixed_block_flag; 127 unsigned table_select[3]; 128 unsigned subblock_gain[3]; 129 unsigned maxband[3]; 130 unsigned maxbandl; 131 unsigned maxb; 132 unsigned region1start; 133 unsigned region2start; 134 unsigned preflag; 135 unsigned scalefac_scale; 136 unsigned count1table_select; 137 real *full_gain[3]; 138 real *pow2gain; 139 }; 140 141 struct III_sideinfo 142 { 143 unsigned main_data_begin; 144 unsigned private_bits; 145 struct { 146 struct gr_info_s gr[2]; 147 } ch[2]; 148 }; 149 150 151 extern int synth_1to1 (real *,int,unsigned char *,int *,struct mpstr *); 152 extern int synth_1to1_8bit (real *,int,unsigned char *,int *); 153 extern int synth_1to1_mono (real *,unsigned char *,int *,struct mpstr *); 154 extern int synth_1to1_mono2stereo (real *,unsigned char *,int *); 155 extern int synth_1to1_8bit_mono (real *,unsigned char *,int *); 156 extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *); 157 158 extern int synth_2to1 (real *,int,unsigned char *,int *); 159 extern int synth_2to1_8bit (real *,int,unsigned char *,int *); 160 extern int synth_2to1_mono (real *,unsigned char *,int *); 161 extern int synth_2to1_mono2stereo (real *,unsigned char *,int *); 162 extern int synth_2to1_8bit_mono (real *,unsigned char *,int *); 163 extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *); 164 165 extern int synth_4to1 (real *,int,unsigned char *,int *); 166 extern int synth_4to1_8bit (real *,int,unsigned char *,int *); 167 extern int synth_4to1_mono (real *,unsigned char *,int *); 168 extern int synth_4to1_mono2stereo (real *,unsigned char *,int *); 169 extern int synth_4to1_8bit_mono (real *,unsigned char *,int *); 170 extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *); 171 172 extern int synth_ntom (real *,int,unsigned char *,int *); 173 extern int synth_ntom_8bit (real *,int,unsigned char *,int *); 174 extern int synth_ntom_mono (real *,unsigned char *,int *); 175 extern int synth_ntom_mono2stereo (real *,unsigned char *,int *); 176 extern int synth_ntom_8bit_mono (real *,unsigned char *,int *); 177 extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *); 178 179 extern void rewindNbits(int bits); 180 extern int hsstell(void); 181 extern int get_songlen(struct frame *fr,int no); 182 183 extern void init_layer3(int); 184 extern void init_layer2(void); 185 extern void make_decode_tables(long scale); 186 extern void make_conv16to8_table(int); 187 extern void dct64(real *,real *,real *); 188 189 extern void synth_ntom_set_step(long,long); 190 191 extern unsigned char *conv16to8; 192 extern long mpglib_freqs[9]; 193 extern real muls[27][64]; 194 extern real decwin[512+32]; 195 extern real *pnts[5]; 196 197 extern struct parameter param; 198 199 200