]>
Commit | Line | Data |
---|---|---|
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 unsigned char linear2alaw (int pcm_val); /* 2's complement (16-bit range) */ | |
78 | extern int alaw2linear (unsigned char a_val); | |
79 | extern unsigned char linear2ulaw (int pcm_val); /* 2's complement (16-bit range) */ | |
80 | extern int ulaw2linear (unsigned char u_val); | |
81 | extern int predictor_zero (struct g72x_state *state_ptr); | |
82 | extern int predictor_pole (struct g72x_state *state_ptr); | |
83 | extern int step_size (struct g72x_state *state_ptr); | |
84 | extern int quantize (int d, int y, short *table, int size); | |
85 | extern int reconstruct (int sign, int dqln, int y); | |
86 | ||
87 | extern void update | |
88 | ( int code_size, int y, int wi, int fi, int dq | |
89 | , int sr, int dqsez, struct g72x_state *state_ptr); | |
90 | ||
91 | int tandem_adjust_alaw | |
92 | (int sr, int se, int y, int i, int sign, short *qtab); | |
93 | ||
94 | int tandem_adjust_ulaw | |
95 | (int sr, int se, int y, int i, int sign, short *qtab); | |
96 | ||
97 | extern void g72x_init_state (struct g72x_state *); | |
98 | extern int g721_encoder( | |
99 | int sample, | |
100 | int in_coding, | |
101 | struct g72x_state *state_ptr); | |
102 | extern int g721_decoder( | |
103 | int code, | |
104 | int out_coding, | |
105 | struct g72x_state *state_ptr); | |
106 | extern int g723_24_encoder( | |
107 | int sample, | |
108 | int in_coding, | |
109 | struct g72x_state *state_ptr); | |
110 | extern int g723_24_decoder( | |
111 | int code, | |
112 | int out_coding, | |
113 | struct g72x_state *state_ptr); | |
114 | extern int g723_40_encoder( | |
115 | int sample, | |
116 | int in_coding, | |
117 | struct g72x_state *state_ptr); | |
118 | extern int g723_40_decoder( | |
119 | int code, | |
120 | int out_coding, | |
121 | struct g72x_state *state_ptr); | |
122 | ||
123 | #endif /* !_G72X_H */ |