1 /* this file is a part of amp software, (C) tomislav uzelac 1996,1997
2 */
3 
4 /* audio.h  some global variables
5  *
6  * Created by: tomislav uzelac Mar/Apr, Jul 96
7  */
8 
9 #include <stdio.h>
10 
11 struct AUDIO_HEADER {
12 	int ID;
13 	int layer;
14 	int protection_bit;
15 	int bitrate_index;
16 	int sampling_frequency;
17 	int padding_bit;
18 	int private_bit;
19 	int mode;
20 	int mode_extension;
21 	int copyright;
22 	int original;
23 	int emphasis;
24 };
25 
26 struct SIDE_INFO {
27 	int main_data_begin;
28 	int scfsi[2][4];
29 	int part2_3_length[2][2];
30 	int big_values[2][2];
31 	int global_gain[2][2];
32 	int scalefac_compress[2][2];
33 	int window_switching_flag[2][2];
34 	int block_type[2][2];
35 	int mixed_block_flag[2][2];
36 	int table_select[2][2][3];
37 	int subblock_gain[2][2][3];
38 	int region0_count[2][2];
39 	int region1_count[2][2];
40 	int preflag[2][2];
41 	int scalefac_scale[2][2];
42 	int count1table_select[2][2];
43 };
44 
45 
46 /* global stuff
47 */
48 
49 extern FILE *in_file;
50 
51 extern void statusDisplay(struct AUDIO_HEADER *header, int frameNo);
52 extern void initialise_globals(void);
53 extern void report_header_error(int err);
54 
55 extern int scalefac_l[2][2][22];
56 extern int scalefac_s[2][2][13][3];
57 extern int t_b8_l[2][3][22];
58 extern int t_b8_s[2][3][13];
59 extern short t_bitrate[2][3][15];
60 
61 extern int is[2][578];
62 extern float xr[2][32][18];
63 
64 extern int *t_l,*t_s;
65 extern int nch;
66 extern int t_sampling_frequency[2][3];
67 
68 extern int A_QUIET,A_SHOW_CNT;
69 extern int A_WRITE_TO_AUDIO;
70 extern short pcm_sample[64];
71 extern int A_AUDIO_PLAY;
72 extern int A_SET_VOLUME,A_SHOW_TIME;
73 extern int A_DOWNMIX;
74 extern int A_SHUFFLE;
75 
76 extern int stop_flag;
77 extern int quit_flag;
78 
79 /* ...
80 */
81 
82 #ifdef AUDIO
83 
84 FILE *in_file;
85 
86 int scalefac_l[2][2][22];
87 int scalefac_s[2][2][13][3];
88 
89 int is[2][578];
90 float xr[2][32][18];
91 
92 int *t_l,*t_s;
93 int nch;
94 int t_sampling_frequency[2][3] = {
95 { 22050 , 24000 , 16000},
96 { 44100 , 48000 , 32000}
97 };
98 
99 /* GUI control stuff */
100 int send_fd;
101 int receive_fd;
102 
103 int stop_flag;
104 int quit_flag;
105 
106 int A_QUIET,A_SHOW_CNT;
107 int A_AUDIO_PLAY;
108 int A_SET_VOLUME, A_SHOW_TIME;
109 int A_SHUFFLE;
110 int A_DOWNMIX;
111 
112 short pcm_sample[64];
113 
114 short t_bitrate[2][3][15] = {{
115 {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256},
116 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160},
117 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160}
118 },{
119 {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448},
120 {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384},
121 {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320}
122 }};
123 
124 /* the last sfb is given implicitly on pg.28. of the standard. scalefactors
125  * for that one are 0, pretab also
126  */
127 /* leftmost index denotes ID, so first three tables are for MPEG2 (header->ID==0)
128  * and the other three are for MPEG1 (header->ID==1)
129  */
130 /* 22.05, 24, 16 */
131 int t_b8_l[2][3][22]={{ /* table B.8b ISO/IEC 11172-3 */
132 {5,11,17,23,29,35,43,53,65,79,95,115,139,167,199,237,283,335,395,463,521,575},
133 {5,11,17,23,29,35,43,53,65,79,95,113,135,161,193,231,277,331,393,463,539,575},
134 {5,11,17,23,29,35,43,53,65,79,95,115,139,167,199,237,283,335,395,463,521,575}
135 },{
136 {3,7,11,15,19,23,29,35,43,51,61,73,89,109,133,161,195,237,287,341,417,575},
137 {3,7,11,15,19,23,29,35,41,49,59,71,87,105,127,155,189,229,275,329,383,575},
138 {3,7,11,15,19,23,29,35,43,53,65,81,101,125,155,193,239,295,363,447,549,575}
139 }};
140 int t_b8_s[2][3][13]={{ /* table B.8b ISO/IEC 11172-3 */
141 {3,7,11,17,23,31,41,55,73,99,131,173,191},
142 {3,7,11,17,25,35,47,61,79,103,135,179,191},
143 {3,7,11,17,25,35,47,61,79,103,133,173,191}
144 },{
145 {3,7,11,15,21,29,39,51,65,83,105,135,191},
146 {3,7,11,15,21,27,37,49,63,79,99,125,191},
147 {3,7,11,15,21,29,41,57,77,103,137,179,191}
148 }};
149 
150 int  args(int argc,char **argv);
151 void initialise_decoder(void);
152 int decodeMPEG(struct AUDIO_HEADER *header);
153 void initialise_globals(void);
154 void report_header_error(int err);
155 int  setup_audio(struct AUDIO_HEADER *header);
156 void close_audio(void);
157 int ready_audio(void);
158 
159 void play(char *inFileStr);
160 
161 #endif /* AUDIO */
162 
163