Code cleanups (bug #66)
[asterisk/asterisk.git] / codecs / mp3 / include / mhead.h
1 /*____________________________________________________________________________
2         
3         FreeAmp - The Free MP3 Player
4
5         MP3 Decoder originally Copyright (C) 1995-1997 Xing Technology
6         Corp.  http://www.xingtech.com
7
8         Portions Copyright (C) 1998 EMusic.com
9
10         This program is free software; you can redistribute it and/or modify
11         it under the terms of the GNU General Public License as published by
12         the Free Software Foundation; either version 2 of the License, or
13         (at your option) any later version.
14
15         This program is distributed in the hope that it will be useful,
16         but WITHOUT ANY WARRANTY; without even the implied warranty of
17         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18         GNU General Public License for more details.
19
20         You should have received a copy of the GNU General Public License
21         along with this program; if not, write to the Free Software
22         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23         
24         $Id$
25 ____________________________________________________________________________*/
26
27 /* portable copy of eco\mhead.h */
28 /* mpeg audio header   */
29
30 typedef struct
31 {
32    int sync;                    /* 1 if valid sync */
33    int id;
34    int option;
35    int prot;
36    int br_index;
37    int sr_index;
38    int pad;
39    int private_bit;
40    int mode;
41    int mode_ext;
42    int cr;
43    int original;
44    int emphasis;
45 }
46 MPEG_HEAD;
47
48 /* portable mpeg audio decoder, decoder functions */
49 typedef struct
50 {
51    int in_bytes;
52    int out_bytes;
53 }
54 IN_OUT;
55
56
57 typedef struct
58 {
59    int channels;
60    int outvalues;
61    long samprate;
62    int bits;
63    int framebytes;
64    int type;
65 }
66 DEC_INFO;
67
68 typedef IN_OUT(*AUDIO_DECODE_ROUTINE) (void *mv, unsigned char *bs, signed short *pcm);
69 typedef IN_OUT(*DECODE_FUNCTION) (void *mv, unsigned char *bs, unsigned char *pcm);
70
71 struct _mpeg;
72
73 typedef struct _mpeg  MPEG;
74
75 typedef void (*SBT_FUNCTION_F) (MPEG *m, float *sample, short *pcm, int n);
76
77 /* main data bit buffer */
78 #define NBUF (8*1024)
79 #define BUF_TRIGGER (NBUF-1500)
80
81 typedef void (*XFORM_FUNCTION) (void *mv, void *pcm, int igr);
82
83 struct _mpeg
84 {
85         struct {
86                 float look_c_value[18]; /* built by init */
87                 unsigned char *bs_ptr;
88                 unsigned long bitbuf;
89                 int bits;
90                 long bitval;
91                 int outbytes;
92                 int framebytes;
93                 int outvalues;
94                 int pad;
95                 int stereo_sb;
96                 DEC_INFO decinfo;               /* global for Layer III */
97                 int max_sb;
98                 int nsb_limit;
99                 int first_pass;
100                 int first_pass_L1;
101                 int bit_skip;
102                 int nbat[4];
103                 int bat[4][16];
104                 int ballo[64];          /* set by unpack_ba */
105                 unsigned int samp_dispatch[66]; /* set by unpack_ba */
106                 float c_value[64];      /* set by unpack_ba */
107                 unsigned int sf_dispatch[66];   /* set by unpack_ba */
108                 float sf_table[64];
109                 float cs_factor[3][64];
110                 float *sample;          /* global for use by Later 3 */
111                 signed char group3_table[32][3];
112                 signed char group5_table[128][3];
113                 signed short group9_table[1024][3];
114                 SBT_FUNCTION_F sbt;
115                 AUDIO_DECODE_ROUTINE audio_decode_routine ;
116                 float *cs_factorL1;
117                 float look_c_valueL1[16];
118                 int nbatL1;
119
120         } cup;
121
122         struct {
123                 /* cupl3.c */
124                 int nBand[2][22];               /* [long/short][cb] */
125                 int sfBandIndex[2][22];         /* [long/short][cb] */
126                 int mpeg25_flag;
127                 int iframe;
128                 int band_limit;
129                 int band_limit21;
130                 int band_limit12;
131                 int band_limit_nsb;
132                 int nsb_limit;
133                 int gaim_adjust;
134                 int id;
135                 int ncbl_mixed;
136                 int gain_adjust;
137                 int sr_index;
138                 int outvalues;
139                 int outbytes;
140                 int half_outbytes;
141                 int framebytes;
142                 int padframebytes;
143                 int crcbytes;
144                 int pad;
145                 int stereo_flag;
146                 int nchan;
147                 int ms_mode;
148                 int is_mode;
149                 unsigned int zero_level_pcm;
150                 CB_INFO cb_info[2][2];
151                 IS_SF_INFO is_sf_info;  /* MPEG-2 intensity stereo */ 
152                 unsigned char buf[NBUF];
153                 int buf_ptr0;
154                 int buf_ptr1;
155                 int main_pos_bit;
156                 SIDE_INFO side_info;
157                 SCALEFACT sf[2][2];     /* [gr][ch] */
158                 int nsamp[2][2];                /* must start = 0, for nsamp[igr_prev] */
159                 float yout[576];                /* hybrid out, sbt in */
160                 SAMPLE sample[2][2][576];
161                 SBT_FUNCTION_F sbt_L3;
162                 XFORM_FUNCTION Xform;
163                 DECODE_FUNCTION decode_function;
164                 /* msis.c */
165                 /*-- windows by block type --*/
166                 float win[4][36];
167                 float csa[8][2];                /* antialias */
168                 float lr[2][8][2];      /* [ms_mode 0/1][sf][left/right]  */
169                 float lr2[2][2][64][2];
170                 /* l3dq.c */
171                 float look_global[256 + 2 + 4];
172                 float look_scale[2][4][32];
173 #define ISMAX 32
174                 float look_pow[2 * ISMAX];
175                 float look_subblock[8];
176                 float re_buf[192][3];
177         } cupl;
178         struct {
179                 signed int vb_ptr;
180                 signed int vb2_ptr;
181                 float vbuf[512];
182                 float vbuf2[512];
183                 int first_pass;
184         } csbt;
185         struct {
186                 float coef32[31];       /* 32 pt dct coefs */
187         } cdct;
188 };
189
190 typedef int (*CVT_FUNCTION_8) (void *mv, unsigned char *pcm);
191
192 typedef struct
193 {
194         struct {
195                 unsigned char look_u[8192];
196         short pcm[2304];
197         int ncnt;
198         int ncnt1;
199         int nlast;
200         int ndeci;
201         int kdeci;
202                 int first_pass;
203         short xsave;
204                 CVT_FUNCTION_8 convert_routine;
205         } dec;
206         MPEG cupper;
207 }
208 MPEG8;
209
210 #include "itype.h"
211
212 typedef void (*SBT_FUNCTION) (SAMPLEINT * sample, short *pcm, int n);
213
214 typedef struct MPEGI
215 {
216         struct {
217                 DEC_INFO decinfo;
218                 int pad;
219                 int look_c_value[18];   /* built by init */
220                 int look_c_shift[18];   /* built by init */
221                 int outbytes;
222                 int framebytes;
223                 int outvalues;
224                 int max_sb;
225                 int stereo_sb;
226                 int nsb_limit;
227                 int bit_skip;
228                 int nbat[4];
229                 int bat[4][16];
230                 int ballo[64];          /* set by unpack_ba */
231                 unsigned int samp_dispatch[66]; /* set by unpack_ba */
232                 int c_value[64];                /* set by unpack_ba */
233                 int c_shift[64];                /* set by unpack_ba */
234                 unsigned int sf_dispatch[66];   /* set by unpack_ba */
235                 int sf_table[64];
236                 INT32 cs_factor[3][64];
237                 SAMPLEINT sample[2304];
238                 signed char group3_table[32][3];
239                 signed char group5_table[128][3];
240                 signed short group9_table[1024][3];
241                 int nsbt;
242                 SBT_FUNCTION sbt;
243                 void (*unpack_routine) (struct MPEGI *);
244                 unsigned char *bs_ptr;
245                 UINT32 bitbuf;
246                 int bits;
247                 INT32 bitval;
248                 int first_pass;
249                 int first_pass_L1;
250                 int nbatL1;
251                 INT32 *cs_factorL1;
252                 int look_c_valueL1[16]; /* built by init */
253                 int look_c_shiftL1[16]; /* built by init */
254         } iup;
255 }
256 MPEGI;
257
258 #ifdef __cplusplus
259 extern "C"
260 {
261 #endif
262
263
264    void mpeg_init(MPEG *m);
265    int head_info(unsigned char *buf, unsigned int n, MPEG_HEAD * h);
266    int head_info2(unsigned char *buf,
267            unsigned int n, MPEG_HEAD * h, int *br);
268         int head_info3(unsigned char *buf, unsigned int n, MPEG_HEAD *h, int*br, unsigned int *searchForward);
269 /* head_info returns framebytes > 0 for success */
270 /* audio_decode_init returns 1 for success, 0 for fail */
271 /* audio_decode returns in_bytes = 0 on sync loss */
272
273    int audio_decode_init(MPEG *m, MPEG_HEAD * h, int framebytes_arg,
274                    int reduction_code, int transform_code, int convert_code,
275                          int freq_limit);
276    void audio_decode_info(MPEG *m, DEC_INFO * info);
277    IN_OUT audio_decode(MPEG *m, unsigned char *bs, short *pcm);
278
279    void mpeg8_init(MPEG8 *m);
280    int audio_decode8_init(MPEG8 *m, MPEG_HEAD * h, int framebytes_arg,
281                    int reduction_code, int transform_code, int convert_code,
282                           int freq_limit);
283    void audio_decode8_info(MPEG8 *m, DEC_INFO * info);
284    IN_OUT audio_decode8(MPEG8 *m, unsigned char *bs, short *pcmbuf);
285
286 /*-- integer decode --*/
287    void i_mpeg_init(MPEGI *m);
288    int i_audio_decode_init(MPEGI *m, MPEG_HEAD * h, int framebytes_arg,
289                    int reduction_code, int transform_code, int convert_code,
290                            int freq_limit);
291    void i_audio_decode_info(MPEGI *m, DEC_INFO * info);
292    IN_OUT i_audio_decode(MPEGI *m, unsigned char *bs, short *pcm);
293
294
295
296 #ifdef __cplusplus
297 }
298 #endif