Sane FreeBSD patch
[asterisk/asterisk.git] / codecs / mp3 / include / L3.h
1 /*____________________________________________________________________________
2         
3         FreeAmp - The Free MP3 Player
4
5         MP3 Decoder originally Copyright (C) 1996-1997 Xing Technology
6         Corp.  http://www.xingtech.com
7
8         Portions Copyright (C) 1998-1999 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 /****  L3.h  ***************************************************
28
29   Layer III structures
30
31   *** Layer III is 32 bit only          ***
32   *** Layer III code assumes 32 bit int ***
33
34 ******************************************************************/
35
36 #define GLOBAL_GAIN_SCALE (4*15)
37 /* #define GLOBAL_GAIN_SCALE 0 */
38
39
40 #ifdef __FreeBSD__
41 #ifdef __i386__
42 #undef LITTLE_ENDIAN
43 #define LITTLE_ENDIAN 1
44 #endif
45 #endif
46
47 #ifdef _M_IX86
48 #define LITTLE_ENDIAN 1
49 #endif
50
51 #ifdef _M_ALPHA
52 #define LITTLE_ENDIAN 1
53 #endif
54
55 #ifdef sparc
56 #define LITTLE_ENDIAN 0
57 #endif
58
59 #ifndef LITTLE_ENDIAN
60 #error Layer III LITTLE_ENDIAN must be defined 0 or 1
61 #endif
62
63 /*-----------------------------------------------------------*/
64 /*---- huffman lookup tables ---*/
65 /* endian dependent !!! */
66 #if LITTLE_ENDIAN
67 typedef union
68 {
69    int ptr;
70    struct
71    {
72       unsigned char signbits;
73       unsigned char x;
74       unsigned char y;
75       unsigned char purgebits;  // 0 = esc
76
77    }
78    b;
79 }
80 HUFF_ELEMENT;
81
82 #else /* big endian machines */
83 typedef union
84 {
85    int ptr;                     /* int must be 32 bits or more */
86    struct
87    {
88       unsigned char purgebits;  // 0 = esc
89
90       unsigned char y;
91       unsigned char x;
92       unsigned char signbits;
93    }
94    b;
95 }
96 HUFF_ELEMENT;
97
98 #endif
99 /*--------------------------------------------------------------*/
100 typedef struct
101 {
102    unsigned int bitbuf;
103    int bits;
104    unsigned char *bs_ptr;
105    unsigned char *bs_ptr0;
106    unsigned char *bs_ptr_end;   // optional for overrun test
107
108 }
109 BITDAT;
110
111 /*-- side info ---*/
112 typedef struct
113 {
114    int part2_3_length;
115    int big_values;
116    int global_gain;
117    int scalefac_compress;
118    int window_switching_flag;
119    int block_type;
120    int mixed_block_flag;
121    int table_select[3];
122    int subblock_gain[3];
123    int region0_count;
124    int region1_count;
125    int preflag;
126    int scalefac_scale;
127    int count1table_select;
128 }
129 GR;
130 typedef struct
131 {
132    int mode;
133    int mode_ext;
134 /*---------------*/
135    int main_data_begin;         /* beginning, not end, my spec wrong */
136    int private_bits;
137 /*---------------*/
138    int scfsi[2];                /* 4 bit flags [ch] */
139    GR gr[2][2];                 /* [gran][ch] */
140 }
141 SIDE_INFO;
142
143 /*-----------------------------------------------------------*/
144 /*-- scale factors ---*/
145 // check dimensions - need 21 long, 3*12 short
146 // plus extra for implicit sf=0 above highest cb
147 typedef struct
148 {
149    int l[23];                   /* [cb] */
150    int s[3][13];                /* [window][cb] */
151 }
152 SCALEFACT;
153
154 /*-----------------------------------------------------------*/
155 typedef struct
156 {
157    int cbtype;                  /* long=0 short=1 */
158    int cbmax;                   /* max crit band */
159 //   int lb_type;                       /* long block type 0 1 3 */
160    int cbs0;                    /* short band start index 0 3 12 (12=no shorts */
161    int ncbl;                    /* number long cb's 0 8 21 */
162    int cbmax_s[3];              /* cbmax by individual short blocks */
163 }
164 CB_INFO;
165
166 /*-----------------------------------------------------------*/
167 /* scale factor infor for MPEG2 intensity stereo  */
168 typedef struct
169 {
170    int nr[3];
171    int slen[3];
172    int intensity_scale;
173 }
174 IS_SF_INFO;
175
176 /*-----------------------------------------------------------*/
177 typedef union
178 {
179    int s;
180    float x;
181 }
182 SAMPLE;
183
184 /*-----------------------------------------------------------*/