Lots of little fixes for doing MSVC compiling codecs in windows (#6022)
[asterisk/asterisk.git] / codecs / lpc10 / lpc10.h
1 /*
2
3 $Log$
4 Revision 1.18  2004/08/31 13:32:11  markster
5 Merge NetBSD and Courtesty tone with modifications (bug #2329)
6
7 Revision 1.17  2003/10/26 18:50:49  markster
8 Make it build and run on MacOS X
9
10 Revision 1.3  2003/10/26 18:50:49  markster
11 Make it build and run on MacOS X
12
13 Revision 1.2  2003/04/23 19:13:35  markster
14 More OpenBSD patches
15
16 Revision 1.1.1.2  2003/03/16 22:37:30  matteo
17 dom mar 16 23:37:23 CET 2003
18
19 Revision 1.2  2003/03/16 16:09:48  markster
20 Mere James's cleanups for fewer build warnings
21
22 Revision 1.1  2000/01/05 00:20:06  markster
23 Add broken lpc10 code...  It's not too far from working I don't think...
24
25  * Revision 1.1  1996/08/19  22:47:31  jaf
26  * Initial revision
27  *
28
29 */
30
31 #ifndef __LPC10_H__
32 #define __LPC10_H__
33
34 #define LPC10_SAMPLES_PER_FRAME 180
35 #define LPC10_BITS_IN_COMPRESSED_FRAME 54
36
37
38 /*
39
40   The "#if defined"'s in this file are by no means intended to be
41   complete.  They are what Nautilus uses, which has been successfully
42   compiled under DOS with the Microsoft C compiler, and under a few
43   versions of Unix with the GNU C compiler.
44
45  */
46
47 #if defined(unix) || defined(__unix__) || defined(__NetBSD__)
48 typedef short           INT16;
49 typedef int                     INT32;
50 #endif
51
52
53 #if defined(__MSDOS__) || defined(MSDOS)
54 typedef int                     INT16;
55 typedef long            INT32;
56 #endif
57
58 #if defined(__APPLE__)
59 typedef short           INT16;
60 typedef int                     INT32;
61 #endif
62
63 #if defined(WIN32) && defined(_MSC_VER)
64 typedef __int16         INT16;
65 typedef __int32         INT32;
66 #pragma warning(disable: 4005)
67 #endif
68
69
70 /* The initial values for every member of this structure is 0, except
71    where noted in comments. */
72
73 /* These two lines are copied from f2c.h.  There should be a more
74    elegant way of doing this than having the same declarations in two
75    files. */
76
77 typedef float real;
78 typedef INT32 integer;
79 typedef INT32 logical;
80 typedef INT16 shortint;
81
82 struct lpc10_encoder_state {
83     /* State used only by function hp100 */
84     real z11;
85     real z21;
86     real z12;
87     real z22;
88     
89     /* State used by function analys */
90     real inbuf[540], pebuf[540];
91     real lpbuf[696], ivbuf[312];
92     real bias;
93     integer osbuf[10];  /* no initial value necessary */
94     integer osptr;     /* initial value 1 */
95     integer obound[3];
96     integer vwin[6]     /* was [2][3] */;   /* initial value vwin[4] = 307; vwin[5] = 462; */
97     integer awin[6]     /* was [2][3] */;   /* initial value awin[4] = 307; awin[5] = 462; */
98     integer voibuf[8]   /* was [2][4] */;
99     real rmsbuf[3];
100     real rcbuf[30]      /* was [10][3] */;
101     real zpre;
102
103
104     /* State used by function onset */
105     real n;
106     real d__;   /* initial value 1.f */
107     real fpc;   /* no initial value necessary */
108     real l2buf[16];
109     real l2sum1;
110     integer l2ptr1;   /* initial value 1 */
111     integer l2ptr2;   /* initial value 9 */
112     integer lasti;    /* no initial value necessary */
113     logical hyst;   /* initial value FALSE_ */
114
115     /* State used by function voicin */
116     real dither;   /* initial value 20.f */
117     real snr;
118     real maxmin;
119     real voice[6]       /* was [2][3] */;   /* initial value is probably unnecessary */
120     integer lbve, lbue, fbve, fbue;
121     integer ofbue, sfbue;
122     integer olbue, slbue;
123     /* Initial values:
124         lbve = 3000;
125         fbve = 3000;
126         fbue = 187;
127         ofbue = 187;
128         sfbue = 187;
129         lbue = 93;
130         olbue = 93;
131         slbue = 93;
132         snr = (real) (fbve / fbue << 6);
133         */
134
135     /* State used by function dyptrk */
136     real s[60];
137     integer p[120]      /* was [60][2] */;
138     integer ipoint;
139     real alphax;
140
141     /* State used by function chanwr */
142     integer isync;
143
144 };
145
146
147 struct lpc10_decoder_state {
148
149     /* State used by function decode */
150     integer iptold;   /* initial value 60 */
151     logical first;   /* initial value TRUE_ */
152     integer ivp2h;
153     integer iovoic;
154     integer iavgp;   /* initial value 60 */
155     integer erate;
156     integer drc[30]     /* was [3][10] */;
157     integer dpit[3];
158     integer drms[3];
159
160     /* State used by function synths */
161     real buf[360];
162     integer buflen;   /* initial value 180 */
163
164     /* State used by function pitsyn */
165     integer ivoico;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */
166     integer ipito;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */
167     real rmso;   /* initial value 1.f */
168     real rco[10];   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */
169     integer jsamp;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */
170     logical first_pitsyn;   /* initial value TRUE_ */
171
172     /* State used by function bsynz */
173     integer ipo;
174     real exc[166];
175     real exc2[166];
176     real lpi1;
177     real lpi2;
178     real lpi3;
179     real hpi1;
180     real hpi2;
181     real hpi3;
182     real rmso_bsynz;
183
184     /* State used by function random */
185     integer j;   /* initial value 2 */
186     integer k;   /* initial value 5 */
187     shortint y[5];  /* initial value { -21161,-8478,30892,-10216,16950 } */
188
189     /* State used by function deemp */
190     real dei1;
191     real dei2;
192     real deo1;
193     real deo2;
194     real deo3;
195
196 };
197
198
199
200 /*
201
202   Calling sequence:
203
204   Call create_lpc10_encoder_state(), which returns a pointer to an
205   already initialized lpc10_encoder_state structure.
206
207   lpc10_encode reads indices 0 through (LPC10_SAMPLES_PER_FRAME-1) of
208   array speech[], and writes indices 0 through
209   (LPC10_BITS_IN_COMPRESSED_FRAME-1) of array bits[], and both reads
210   and writes the lpc10_encoder_state structure contents.  The
211   lpc10_encoder_state structure should *not* be initialized for every
212   frame of encoded speech.  Once at the beginning of execution, done
213   automatically for you by create_lpc10_encoder_state(), is enough.
214
215   init_lpc10_encoder_state() reinitializes the lpc10_encoder_state
216   structure.  This might be useful if you are finished processing one
217   sound sample, and want to reuse the same lpc10_encoder_state
218   structure to process another sound sample.  There might be other
219   uses as well.
220
221   Note that the comments in the lpc10/lpcenc.c file imply that indices
222   1 through 180 of array speech[] are read.  These comments were
223   written for the Fortran version of the code, before it was
224   automatically converted to C by the conversion program f2c.  f2c
225   seems to use the convention that the pointers to arrays passed as
226   function arguments point to the first index used in the Fortran
227   code, whatever index that might be (usually 1), and then it modifies
228   the pointer inside of the function, like so:
229
230   if (speech) {
231       --speech;
232   }
233
234   So that the code can access the first value at index 1 and the last
235   at index 180.  This makes the translated C code "closer" to the
236   original Fortran code.
237
238   The calling sequence for the decoder is similar to the encoder.  The
239   only significant difference is that the array bits[] is read
240   (indices 0 through (LPC10_BITS_IN_COMPRESSED_FRAME-1)), and the
241   array speech[] is written (indices 0 through
242   (LPC10_SAMPLES_PER_FRAME-1)).
243   
244   */
245
246 struct lpc10_encoder_state * create_lpc10_encoder_state (void);
247 void init_lpc10_encoder_state (struct lpc10_encoder_state *st);
248 int lpc10_encode (real *speech, INT32 *bits, struct lpc10_encoder_state *st);
249
250 struct lpc10_decoder_state * create_lpc10_decoder_state (void);
251 void init_lpc10_decoder_state (struct lpc10_decoder_state *st);
252 int lpc10_decode (INT32 *bits, real *speech, struct lpc10_decoder_state *st);
253
254 #endif /* __LPC10_H__ */