Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
576 | serge | 1 | /* |
2 | mpg123: main code of the program (not of the decoder...) |
||
3 | |||
4 | copyright 1995-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 |
||
5 | see COPYING and AUTHORS files in distribution or http://mpg123.de |
||
6 | initially written by Michael Hipp |
||
7 | |||
8 | mpg123 defines |
||
9 | used source: musicout.h from mpegaudio package |
||
10 | */ |
||
11 | |||
12 | #ifdef __cplusplus |
||
13 | extern "C" { |
||
14 | #endif |
||
15 | |||
16 | #include |
||
17 | #include |
||
18 | #ifndef _AUDIO_H_ |
||
19 | #define _AUDIO_H_ |
||
20 | |||
21 | typedef unsigned char byte; |
||
22 | #define off_t long |
||
23 | |||
24 | //#define I486_OPT 1 |
||
25 | |||
26 | #define SKIP_JUNK 1 |
||
27 | # define M_PI 3.14159265358979323846 |
||
28 | # define M_SQRT2 1.41421356237309504880 |
||
29 | # define REAL_IS_FLOAT |
||
30 | # define NEW_DCT9 |
||
31 | |||
32 | #ifdef REAL_IS_FLOAT |
||
33 | # define real float |
||
34 | # define REAL_SCANF "%f" |
||
35 | # define REAL_PRINTF "%f" |
||
36 | #else |
||
37 | # define real double |
||
38 | # define REAL_SCANF "%lf" |
||
39 | # define REAL_PRINTF "%f" |
||
40 | #endif |
||
41 | |||
42 | #ifndef DOUBLE_TO_REAL |
||
43 | # define DOUBLE_TO_REAL(x) (x) |
||
44 | #endif |
||
45 | #ifndef REAL_TO_SHORT |
||
46 | # define REAL_TO_SHORT(x) (x) |
||
47 | #endif |
||
48 | #ifndef REAL_PLUS_32767 |
||
49 | # define REAL_PLUS_32767 32767.0 |
||
50 | #endif |
||
51 | #ifndef REAL_MINUS_32768 |
||
52 | # define REAL_MINUS_32768 -32768.0 |
||
53 | #endif |
||
54 | #ifndef REAL_MUL |
||
55 | # define REAL_MUL(x, y) ((x) * (y)) |
||
56 | #endif |
||
57 | |||
58 | #define INLINE |
||
59 | /* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */ |
||
60 | #define AUDIOBUFSIZE 16384 |
||
61 | |||
62 | #define FALSE 0 |
||
63 | #define TRUE 1 |
||
64 | |||
65 | #define MAX_NAME_SIZE 81 |
||
66 | #define SBLIMIT 32 |
||
67 | #define SCALE_BLOCK 12 |
||
68 | #define SSLIMIT 18 |
||
69 | |||
70 | #define MPG_MD_STEREO 0 |
||
71 | #define MPG_MD_JOINT_STEREO 1 |
||
72 | #define MPG_MD_DUAL_CHANNEL 2 |
||
73 | #define MPG_MD_MONO 3 |
||
74 | |||
75 | /* I suspect that 32767 would be a better idea here, but Michael put this in... */ |
||
76 | #define MAXOUTBURST 32768 |
||
77 | |||
78 | /* Pre Shift fo 16 to 8 bit converter table */ |
||
79 | #define AUSHIFT (3) |
||
80 | |||
81 | struct bitstream_info |
||
82 | { int bitindex; |
||
83 | unsigned char *wordpointer; |
||
84 | }; |
||
85 | extern struct bitstream_info bsi; |
||
86 | |||
87 | struct reader |
||
88 | { |
||
89 | char *hFile; |
||
90 | unsigned char *buffer; |
||
91 | unsigned char *stream; |
||
92 | int strpos; |
||
93 | int strremain; |
||
94 | int filelen; |
||
95 | int filepos; |
||
96 | |||
97 | int (*head_read)(struct reader *,unsigned long *newhead); |
||
98 | int (*read_frame_body)(struct reader *,unsigned char *,int size); |
||
99 | }; |
||
100 | |||
101 | int parse_new_id3(struct reader *rd, unsigned long newhead); |
||
102 | |||
103 | struct al_table |
||
104 | { short bits; |
||
105 | short d; |
||
106 | }; |
||
107 | |||
108 | struct frame { |
||
109 | struct al_table *alloc; |
||
110 | int (*synth)(real *,int,unsigned char *,int *); |
||
111 | int (*synth_mono)(real *,unsigned char *,int *); |
||
112 | int stereo; /* I _think_ 1 for mono and 2 for stereo */ |
||
113 | int jsbound; |
||
114 | int single; |
||
115 | int II_sblimit; |
||
116 | int down_sample_sblimit; |
||
117 | int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */ |
||
118 | int mpeg25; |
||
119 | int down_sample; |
||
120 | int header_change; |
||
121 | int lay; |
||
122 | int (*do_layer)(struct frame *fr,byte *pcm_out, int *pcm_size); |
||
123 | int error_protection; |
||
124 | int bitrate_index; |
||
125 | int sampling_frequency; |
||
126 | int padding; |
||
127 | int extension; |
||
128 | int mode; |
||
129 | int mode_ext; |
||
130 | int copyright; |
||
131 | int original; |
||
132 | int emphasis; |
||
133 | int framesize; /* computed framesize */ |
||
134 | int vbr; /* 1 if variable bitrate was detected */ |
||
135 | unsigned long num; /* the nth frame in some stream... */ |
||
136 | }; |
||
137 | |||
138 | #if 0 |
||
139 | struct parameter { |
||
140 | int aggressive; /* renice to max. priority */ |
||
141 | int shuffle; /* shuffle/random play */ |
||
142 | int remote; /* remote operation */ |
||
143 | int remote_err; /* remote operation to stderr */ |
||
144 | int outmode; /* where to out the decoded sampels */ |
||
145 | int quiet; /* shut up! */ |
||
146 | int xterm_title; /* Change xterm title to song names? */ |
||
147 | long usebuffer; /* second level buffer size */ |
||
148 | int tryresync; /* resync stream after error */ |
||
149 | int verbose; /* verbose level */ |
||
150 | int force_mono; |
||
151 | int force_stereo; |
||
152 | int force_8bit; |
||
153 | long force_rate; |
||
154 | int down_sample; |
||
155 | int checkrange; |
||
156 | long doublespeed; |
||
157 | long halfspeed; |
||
158 | int force_reopen; |
||
159 | long realtime; |
||
160 | char filename[256]; |
||
161 | long listentry; /* possibility to choose playback of one entry in playlist (0: off, > 0 : select, < 0; just show list*/ |
||
162 | int rva; /* (which) rva to do: <0: nothing, 0: radio/mix/track 1: album/audiophile */ |
||
163 | char* listname; /* name of playlist */ |
||
164 | int long_id3; |
||
165 | }; |
||
166 | #endif |
||
167 | |||
168 | #if 0 |
||
169 | struct reader { |
||
170 | int (*init)(struct reader *); |
||
171 | void (*close)(struct reader *); |
||
172 | int (*head_read)(struct reader *,unsigned long *newhead); |
||
173 | int (*head_shift)(struct reader *,unsigned long *head); |
||
174 | long (*skip_bytes)(struct reader *,off_t len); |
||
175 | int (*read_frame_body)(struct reader *,unsigned char *,int size); |
||
176 | int (*back_bytes)(struct reader *,off_t bytes); |
||
177 | int (*back_frame)(struct reader *,struct frame *,long num); |
||
178 | off_t (*tell)(struct reader *); |
||
179 | void (*rewind)(struct reader *); |
||
180 | off_t filelen; |
||
181 | off_t filepos; |
||
182 | int filept; |
||
183 | int flags; |
||
184 | unsigned char id3buf[128]; |
||
185 | }; |
||
186 | #endif |
||
187 | |||
188 | #define READER_FD_OPENED 0x1 |
||
189 | #define READER_ID3TAG 0x2 |
||
190 | #define READER_SEEKABLE 0x4 |
||
191 | |||
192 | //extern void audio_flush(int, struct audio_info_struct *); |
||
193 | |||
194 | //extern void print_header(struct frame *); |
||
195 | //extern void print_header_compact(struct frame *); |
||
196 | //extern void print_id3_tag(unsigned char *buf); |
||
197 | |||
198 | //extern int split_dir_file(const char *path, char **dname, char **fname); |
||
199 | |||
200 | extern unsigned int get1bit(void); |
||
201 | extern unsigned int getbits(int); |
||
202 | extern unsigned int getbits_fast(int); |
||
203 | //extern void backbits(int); |
||
204 | //extern int getbitoffset(void); |
||
205 | //extern int getbyte(void); |
||
206 | |||
207 | //extern void set_pointer(long); |
||
208 | |||
209 | //extern unsigned char *pcm_sample; |
||
210 | //extern int pcm_point; |
||
211 | //extern int audiobufsize; |
||
212 | |||
213 | //extern int OutputDescriptor; |
||
214 | |||
215 | #ifdef VARMODESUPPORT |
||
216 | extern int varmode; |
||
217 | extern int playlimit; |
||
218 | #endif |
||
219 | |||
220 | struct gr_info_s { |
||
221 | int scfsi; |
||
222 | unsigned part2_3_length; |
||
223 | unsigned big_values; |
||
224 | unsigned scalefac_compress; |
||
225 | unsigned block_type; |
||
226 | unsigned mixed_block_flag; |
||
227 | unsigned table_select[3]; |
||
228 | unsigned subblock_gain[3]; |
||
229 | unsigned maxband[3]; |
||
230 | unsigned maxbandl; |
||
231 | unsigned maxb; |
||
232 | unsigned region1start; |
||
233 | unsigned region2start; |
||
234 | unsigned preflag; |
||
235 | unsigned scalefac_scale; |
||
236 | unsigned count1table_select; |
||
237 | real *full_gain[3]; |
||
238 | real *pow2gain; |
||
239 | }; |
||
240 | |||
241 | struct III_sideinfo |
||
242 | { |
||
243 | unsigned main_data_begin; |
||
244 | unsigned private_bits; |
||
245 | struct { |
||
246 | struct gr_info_s gr[2]; |
||
247 | } ch[2]; |
||
248 | }; |
||
249 | |||
250 | extern int open_stream(char *,int fd); |
||
251 | extern void read_frame_init (struct frame* fr); |
||
252 | int read_frame(struct reader *rd, struct frame *fr); |
||
253 | |||
254 | |||
255 | /* why extern? */ |
||
256 | void prepare_audioinfo(struct frame *fr, struct audio_info_struct *nai); |
||
257 | int play_frame(int init,struct frame *fr); |
||
258 | int do_layer1(struct frame *fr,byte *pcm_sample, int *pcm_point); |
||
259 | int do_layer2(struct frame *fr,byte *pcm_sample, int *pcm_point); |
||
260 | int do_layer3(struct frame *fr,byte *pcm_sample, int *pcm_point); |
||
261 | extern void do_equalizer(real *bandPtr,int channel); |
||
262 | |||
263 | #ifdef PENTIUM_OPT |
||
264 | extern int synth_1to1_pent (real *,int,unsigned char *); |
||
265 | #endif |
||
266 | extern int synth_1to1 (real *,int,unsigned char *,int *); |
||
267 | extern int synth_1to1_8bit (real *,int,unsigned char *,int *); |
||
268 | extern int synth_1to1_mono (real *,unsigned char *,int *); |
||
269 | extern int synth_1to1_mono2stereo (real *,unsigned char *,int *); |
||
270 | extern int synth_1to1_8bit_mono (real *,unsigned char *,int *); |
||
271 | extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *); |
||
272 | |||
273 | extern int synth_2to1 (real *,int,unsigned char *,int *); |
||
274 | extern int synth_2to1_8bit (real *,int,unsigned char *,int *); |
||
275 | extern int synth_2to1_mono (real *,unsigned char *,int *); |
||
276 | extern int synth_2to1_mono2stereo (real *,unsigned char *,int *); |
||
277 | extern int synth_2to1_8bit_mono (real *,unsigned char *,int *); |
||
278 | extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *); |
||
279 | |||
280 | extern int synth_4to1 (real *,int,unsigned char *,int *); |
||
281 | extern int synth_4to1_8bit (real *,int,unsigned char *,int *); |
||
282 | extern int synth_4to1_mono (real *,unsigned char *,int *); |
||
283 | extern int synth_4to1_mono2stereo (real *,unsigned char *,int *); |
||
284 | extern int synth_4to1_8bit_mono (real *,unsigned char *,int *); |
||
285 | extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *); |
||
286 | |||
287 | extern int synth_ntom (real *,int,unsigned char *,int *); |
||
288 | extern int synth_ntom_8bit (real *,int,unsigned char *,int *); |
||
289 | extern int synth_ntom_mono (real *,unsigned char *,int *); |
||
290 | extern int synth_ntom_mono2stereo (real *,unsigned char *,int *); |
||
291 | extern int synth_ntom_8bit_mono (real *,unsigned char *,int *); |
||
292 | extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *); |
||
293 | |||
294 | extern void rewindNbits(int bits); |
||
295 | extern int hsstell(void); |
||
296 | extern void set_pointer(long); |
||
297 | extern void huffman_decoder(int ,int *); |
||
298 | extern void huffman_count1(int,int *); |
||
299 | extern void print_stat(struct frame *fr,unsigned long no,long buffsize,struct audio_info_struct *ai); |
||
300 | extern int get_songlen(struct frame *fr,int no); |
||
301 | |||
302 | extern void init_layer3(int); |
||
303 | extern void init_layer2(void); |
||
304 | extern void make_decode_tables(long scale); |
||
305 | extern int make_conv16to8_table(int); |
||
306 | extern void dct64(real *,real *,real *); |
||
307 | |||
308 | #ifdef USE_MMX |
||
309 | extern void dct64_MMX(short *a,short *b,real *c); |
||
310 | extern int synth_1to1_MMX(real *, int, short *, short *, int *); |
||
311 | #endif |
||
312 | |||
313 | extern int synth_ntom_set_step(long,long); |
||
314 | |||
315 | |||
316 | extern unsigned char *conv16to8; |
||
317 | extern long freqs[9]; |
||
318 | extern real muls[27][64]; |
||
319 | extern real decwin[512+32]; |
||
320 | #ifndef USE_MMX |
||
321 | extern real *pnts[5]; |
||
322 | #endif |
||
323 | |||
324 | extern real equalizer[2][32]; |
||
325 | extern real equalizer_sum[2][32]; |
||
326 | extern int equalizer_cnt; |
||
327 | |||
328 | extern struct audio_name audio_val2name[]; |
||
329 | |||
330 | //extern struct parameter param; |
||
331 | |||
332 | /* 486 optimizations */ |
||
333 | #define FIR_BUFFER_SIZE 128 |
||
334 | extern void dct64_486(int *a,int *b,real *c); |
||
335 | extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks); |
||
336 | |||
337 | /* 3DNow! optimizations */ |
||
338 | #ifdef USE_3DNOW |
||
339 | extern int getcpuflags(void); |
||
340 | extern void dct36(real *,real *,real *,real *,real *); |
||
341 | extern void dct36_3dnow(real *,real *,real *,real *,real *); |
||
342 | extern int synth_1to1_3dnow(real *,int,unsigned char *,int *); |
||
343 | #endif |
||
344 | |||
345 | /* avoid the SIGINT in terminal control */ |
||
346 | void next_track(void); |
||
347 | extern long outscale; |
||
348 | |||
349 | #endif |
||
350 | |||
351 | void set_pointer(long backstep); |
||
352 | int __stdcall create_reader(struct reader *rd,byte *buffer, int buffsize); |
||
353 | int __stdcall init_reader(struct reader *rd, char *file); |
||
354 | int __stdcall decode_header(struct frame *fr,unsigned long newhead); |
||
355 | int __stdcall set_reader(struct reader *rd, unsigned int filepos); |
||
356 | double pow_test(double, double); |
||
357 | void * __cdecl mem_cpy(void * dst,const void * src,size_t count); |
||
358 | void init_dct(); |
||
359 | void reset_mpg(); |
||
360 | #ifdef __cplusplus |
||
361 | } |
||
362 | #endif0:>> |