FreeCalypso > hg > gsm-codec-lib
comparison libgsmfr2/ed_internal.h @ 264:8b21a6b7a3bf
libgsmfr2: beginning to integrate TU-Berlin code guts
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Apr 2024 00:06:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
263:ffdcdb27d673 | 264:8b21a6b7a3bf |
---|---|
1 /* | |
2 * This header file has been adapted from inc/private.h | |
3 * in TU-Berlin libgsm source, original notice follows: | |
4 * | |
5 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische | |
6 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for | |
7 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. | |
8 */ | |
9 | |
10 #define SASR(x, by) ((x) >> (by)) | |
11 | |
12 /* | |
13 * Prototypes from add.c | |
14 */ | |
15 extern word gsm_mult (word a, word b); | |
16 extern longword gsm_L_mult (word a, word b); | |
17 extern word gsm_mult_r (word a, word b); | |
18 | |
19 extern word gsm_div (word num, word denum); | |
20 | |
21 extern word gsm_add ( word a, word b ); | |
22 extern longword gsm_L_add ( longword a, longword b ); | |
23 | |
24 extern word gsm_sub (word a, word b); | |
25 extern longword gsm_L_sub (longword a, longword b); | |
26 | |
27 extern word gsm_abs (word a); | |
28 | |
29 extern word gsm_norm ( longword a ); | |
30 | |
31 extern longword gsm_L_asl (longword a, int n); | |
32 extern word gsm_asl (word a, int n); | |
33 | |
34 extern longword gsm_L_asr (longword a, int n); | |
35 extern word gsm_asr (word a, int n); | |
36 | |
37 /* | |
38 * Inlined functions from add.h | |
39 */ | |
40 | |
41 /* | |
42 * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \ | |
43 * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15)) | |
44 */ | |
45 #define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ | |
46 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) | |
47 | |
48 # define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ | |
49 (SASR( ((longword)(a) * (longword)(b)), 15 )) | |
50 | |
51 # define GSM_L_MULT(a, b) /* word a, word b */ \ | |
52 (((longword)(a) * (longword)(b)) << 1) | |
53 | |
54 # define GSM_L_ADD(a, b) \ | |
55 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ | |
56 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ | |
57 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ | |
58 : ((b) <= 0 ? (a) + (b) \ | |
59 : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \ | |
60 ? MAX_LONGWORD : utmp)) | |
61 | |
62 /* | |
63 * # define GSM_ADD(a, b) \ | |
64 * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \ | |
65 * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) | |
66 */ | |
67 /* Nonportable, but faster: */ | |
68 | |
69 #define GSM_ADD(a, b) \ | |
70 ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ | |
71 MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) | |
72 | |
73 # define GSM_SUB(a, b) \ | |
74 ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ | |
75 ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) | |
76 | |
77 # define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) | |
78 | |
79 /* Use these if necessary: | |
80 | |
81 # define GSM_MULT_R(a, b) gsm_mult_r(a, b) | |
82 # define GSM_MULT(a, b) gsm_mult(a, b) | |
83 # define GSM_L_MULT(a, b) gsm_L_mult(a, b) | |
84 | |
85 # define GSM_L_ADD(a, b) gsm_L_add(a, b) | |
86 # define GSM_ADD(a, b) gsm_add(a, b) | |
87 # define GSM_SUB(a, b) gsm_sub(a, b) | |
88 | |
89 # define GSM_ABS(a) gsm_abs(a) | |
90 | |
91 */ | |
92 | |
93 /* | |
94 * More prototypes from implementations.. | |
95 */ | |
96 | |
97 void Gsm_Long_Term_Predictor ( /* 4x for 160 samples */ | |
98 struct gsmfr_0610_state * S, | |
99 word * d, /* [0..39] residual signal IN */ | |
100 word * dp, /* [-120..-1] d' IN */ | |
101 word * e, /* [0..40] OUT */ | |
102 word * dpp, /* [0..40] OUT */ | |
103 word * Nc, /* correlation lag OUT */ | |
104 word * bc /* gain factor OUT */); | |
105 | |
106 void Gsm_LPC_Analysis ( | |
107 struct gsmfr_0610_state * S, | |
108 word * s, /* 0..159 signals IN/OUT */ | |
109 word * LARc); /* 0..7 LARc's OUT */ | |
110 | |
111 void Gsm_Preprocess ( | |
112 struct gsmfr_0610_state * S, | |
113 const word * s, word * so); | |
114 | |
115 void Gsm_Encoding ( | |
116 struct gsmfr_0610_state * S, | |
117 word * e, | |
118 word * ep, | |
119 word * xmaxc, | |
120 word * Mc, | |
121 word * xMc); | |
122 | |
123 void Gsm_Short_Term_Analysis_Filter ( | |
124 struct gsmfr_0610_state * S, | |
125 const word * LARc, /* coded log area ratio [0..7] IN */ | |
126 word * d /* st res. signal [0..159] IN/OUT */); | |
127 | |
128 void Gsm_Decoding ( | |
129 struct gsmfr_0610_state * S, | |
130 word xmaxcr, | |
131 word Mcr, | |
132 const word * xMcr, /* [0..12] IN */ | |
133 word * erp); /* [0..39] OUT */ | |
134 | |
135 void Gsm_Long_Term_Synthesis_Filtering ( | |
136 struct gsmfr_0610_state* S, | |
137 word Ncr, | |
138 word bcr, | |
139 word * erp, /* [0..39] IN */ | |
140 word * drp); /* [-120..-1] IN, [0..40] OUT */ | |
141 | |
142 void Gsm_RPE_Decoding ( | |
143 struct gsmfr_0610_state *S, | |
144 word xmaxcr, | |
145 word Mcr, | |
146 const word * xMcr, /* [0..12], 3 bits IN */ | |
147 word * erp); /* [0..39] OUT */ | |
148 | |
149 void Gsm_RPE_Encoding ( | |
150 struct gsmfr_0610_state * S, | |
151 word * e, /* -5..-1][0..39][40..44 IN/OUT */ | |
152 word * xmaxc, /* OUT */ | |
153 word * Mc, /* OUT */ | |
154 word * xMc); /* [0..12] OUT */ | |
155 | |
156 void Gsm_Short_Term_Synthesis_Filter ( | |
157 struct gsmfr_0610_state * S, | |
158 const word * LARcr, /* log area ratios [0..7] IN */ | |
159 word * drp, /* received d [0...39] IN */ | |
160 word * s); /* signal s [0..159] OUT */ | |
161 | |
162 void Gsm_Update_of_reconstructed_short_time_residual_signal ( | |
163 word * dpp, /* [0...39] IN */ | |
164 word * ep, /* [0...39] IN */ | |
165 word * dp); /* [-120...-1] IN/OUT */ | |
166 | |
167 /* | |
168 * Tables from table.c | |
169 */ | |
170 | |
171 extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8]; | |
172 extern word gsm_INVA[8]; | |
173 extern word gsm_DLB[4], gsm_QLB[4]; | |
174 extern word gsm_H[11]; | |
175 extern word gsm_NRFAC[8]; | |
176 extern word gsm_FAC[8]; |