Imported Upstream version 3.0
[debian/gnuradio] / gnuradio-core / src / lib / g72x / g72x.h
1 /*
2  * This source code is a product of Sun Microsystems, Inc. and is provided
3  * for unrestricted use.  Users may copy or modify this source code without
4  * charge.
5  *
6  * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
7  * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
8  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
9  *
10  * Sun source code is provided with no support and without any obligation on
11  * the part of Sun Microsystems, Inc. to assist in its use, correction,
12  * modification or enhancement.
13  *
14  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
15  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
16  * OR ANY PART THEREOF.
17  *
18  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
19  * or profits or other special, indirect and consequential damages, even if
20  * Sun has been advised of the possibility of such damages.
21  *
22  * Sun Microsystems, Inc.
23  * 2550 Garcia Avenue
24  * Mountain View, California  94043
25  */
26
27 /*
28  * g72x.h
29  *
30  * Header file for CCITT conversion routines.
31  *
32  */
33 #ifndef _G72X_H
34 #define _G72X_H
35
36 #define AUDIO_ENCODING_ULAW     (1)     /* ISDN u-law */
37 #define AUDIO_ENCODING_ALAW     (2)     /* ISDN A-law */
38 #define AUDIO_ENCODING_LINEAR   (3)     /* PCM 2's-complement (0-center) */
39
40 /*
41  * The following is the definition of the state structure
42  * used by the G.721/G.723 encoder and decoder to preserve their internal
43  * state between successive calls.  The meanings of the majority
44  * of the state structure fields are explained in detail in the
45  * CCITT Recommendation G.721.  The field names are essentially indentical
46  * to variable names in the bit level description of the coding algorithm
47  * included in this Recommendation.
48  */
49 struct g72x_state {
50         long yl;        /* Locked or steady state step size multiplier. */
51         short yu;       /* Unlocked or non-steady state step size multiplier. */
52         short dms;      /* Short term energy estimate. */
53         short dml;      /* Long term energy estimate. */
54         short ap;       /* Linear weighting coefficient of 'yl' and 'yu'. */
55
56         short a[2];     /* Coefficients of pole portion of prediction filter. */
57         short b[6];     /* Coefficients of zero portion of prediction filter. */
58         short pk[2];    /*
59                          * Signs of previous two samples of a partially
60                          * reconstructed signal.
61                          */
62         short dq[6];    /*
63                          * Previous 6 samples of the quantized difference
64                          * signal represented in an internal floating point
65                          * format.
66                          */
67         short sr[2];    /*
68                          * Previous 2 samples of the quantized difference
69                          * signal represented in an internal floating point
70                          * format.
71                          */
72         char td;        /* delayed tone detect, new in 1988 version */
73 };
74
75 /* External function definitions. */
76
77 extern void g72x_init_state(struct g72x_state *);
78 extern int g721_encoder(
79                 int sample,
80                 int in_coding,
81                 struct g72x_state *state_ptr);
82 extern int g721_decoder(
83                 int code,
84                 int out_coding,
85                 struct g72x_state *state_ptr);
86 extern int g723_24_encoder(
87                 int sample,
88                 int in_coding,
89                 struct g72x_state *state_ptr);
90 extern int g723_24_decoder(
91                 int code,
92                 int out_coding,
93                 struct g72x_state *state_ptr);
94 extern int g723_40_encoder(
95                 int sample,
96                 int in_coding,
97                 struct g72x_state *state_ptr);
98 extern int g723_40_decoder(
99                 int code,
100                 int out_coding,
101                 struct g72x_state *state_ptr);
102
103
104 extern int
105 quantize(
106          int            d,      
107          int            y,      
108         short           *table, 
109         int             size);
110 extern int reconstruct(int,int,int);void
111
112 extern update(
113         int             code_size,      
114         int             y,              
115         int             wi,             
116         int             fi,             
117         int             dq,             
118         int             sr,             
119         int             dqsez,          
120         struct g72x_state *state_ptr);
121 extern int
122 tandem_adjust_alaw(
123         int             sr,     
124         int             se,     
125         int             y,      
126         int             i,      
127         int             sign,
128         short           *qtab);
129
130 extern int
131 tandem_adjust_ulaw(
132         int             sr,     
133         int             se,     
134         int             y,      
135         int             i,      
136         int             sign,
137         short           *qtab);
138
139 extern unsigned char
140 linear2alaw(
141         int             pcm_val);
142
143 extern int
144 alaw2linear(
145         unsigned char   a_val);
146
147 extern unsigned char
148 linear2ulaw(int         pcm_val);
149
150 extern int ulaw2linear( unsigned char   u_val);
151
152 extern int predictor_zero(struct g72x_state *state_ptr);
153
154 extern int predictor_pole(      struct g72x_state *state_ptr);
155 extern int step_size(   struct g72x_state *state_ptr);
156 #endif /* !_G72X_H */