2
* Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
3
* Universitaet Berlin. See the accompanying file "COPYRIGHT" for
4
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
7
/*$Header: /home/cvs/giga/ladspa-swh/gsm/private.h,v 1.1 2001/06/10 21:36:51 swh Exp $*/
12
/* Added by Erik de Castro Lopo */
13
#define NeedFunctionPrototypes 1
18
/* Added by Erik de Castro Lopo */
22
typedef short word; /* 16 bit signed int */
23
typedef int longword; /* 32 bit signed int */
25
typedef unsigned short uword; /* unsigned word */
26
typedef unsigned int ulongword; /* unsigned longword */
32
word z1; /* preprocessing.c, Offset_com. */
33
longword L_z2; /* Offset_com. */
34
int mp; /* Preemphasis */
36
word u[8]; /* short_term_aly_filter.c */
37
word LARpp[2][8]; /* */
40
word ltp_cut; /* long_term.c, LTP crosscorr. */
41
word nrp; /* 40 */ /* long_term.c, synthesis */
42
word v[9]; /* short_term.c, synthesis */
43
word msr; /* decoder.c, Postprocessing */
45
char verbose; /* only used if !NDEBUG */
46
char fast; /* only used if FAST */
48
char wav_fmt; /* only used if WAV49 defined */
49
unsigned char frame_index; /* odd/even chaining */
50
unsigned char frame_chain; /* half-byte to carry forward */
54
#define MIN_WORD (-32767 - 1)
55
#define MAX_WORD 32767
57
#define MIN_LONGWORD (-2147483647 - 1)
58
#define MAX_LONGWORD 2147483647
60
#ifdef SASR /* flag: >> is a signed arithmetic shift right */
62
#define SASR(x, by) ((x) >> (by))
64
#define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by))))
70
* Prototypes from add.c
72
extern word gsm_mult (word a, word b);
73
extern longword gsm_L_mult (word a, word b);
74
extern word gsm_mult_r (word a, word b);
76
extern word gsm_div (word num, word denum);
78
extern word gsm_add (word a, word b );
79
extern longword gsm_L_add (longword a, longword b );
81
extern word gsm_sub (word a, word b);
82
extern longword gsm_L_sub (longword a, longword b);
84
extern word gsm_abs (word a);
86
extern word gsm_norm (longword a );
88
extern longword gsm_L_asl (longword a, int n);
89
extern word gsm_asl (word a, int n);
91
extern longword gsm_L_asr (longword a, int n);
92
extern word gsm_asr (word a, int n);
95
* Inlined functions from add.h
99
* #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \
100
* (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15))
102
#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
103
(SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
105
# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
106
(SASR( ((longword)(a) * (longword)(b)), 15 ))
108
# define GSM_L_MULT(a, b) /* word a, word b */ \
109
(((longword)(a) * (longword)(b)) << 1)
111
# define GSM_L_ADD(a, b) \
112
( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
113
: (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
114
>= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
115
: ((b) <= 0 ? (a) + (b) \
116
: (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
117
? MAX_LONGWORD : utmp))
120
* # define GSM_ADD(a, b) \
121
* ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \
122
* ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
124
/* Nonportable, but faster: */
126
#define GSM_ADD(a, b) \
127
((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
128
MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
130
# define GSM_SUB(a, b) \
131
((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
132
? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
134
# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
136
/* Use these if necessary:
138
# define GSM_MULT_R(a, b) gsm_mult_r(a, b)
139
# define GSM_MULT(a, b) gsm_mult(a, b)
140
# define GSM_L_MULT(a, b) gsm_L_mult(a, b)
142
# define GSM_L_ADD(a, b) gsm_L_add(a, b)
143
# define GSM_ADD(a, b) gsm_add(a, b)
144
# define GSM_SUB(a, b) gsm_sub(a, b)
146
# define GSM_ABS(a) gsm_abs(a)
151
* More prototypes from implementations..
153
extern void Gsm_Coder P((
154
struct gsm_state * S,
155
word * s, /* [0..159] samples IN */
156
word * LARc, /* [0..7] LAR coefficients OUT */
157
word * Nc, /* [0..3] LTP lag OUT */
158
word * bc, /* [0..3] coded LTP gain OUT */
159
word * Mc, /* [0..3] RPE grid selection OUT */
160
word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
161
word * xMc /* [13*4] normalized RPE samples OUT */));
163
extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */
164
struct gsm_state * S,
165
word * d, /* [0..39] residual signal IN */
166
word * dp, /* [-120..-1] d' IN */
167
word * e, /* [0..40] OUT */
168
word * dpp, /* [0..40] OUT */
169
word * Nc, /* correlation lag OUT */
170
word * bc /* gain factor OUT */));
172
extern void Gsm_LPC_Analysis P((
173
struct gsm_state * S,
174
word * s, /* 0..159 signals IN/OUT */
175
word * LARc)); /* 0..7 LARc's OUT */
177
extern void Gsm_Preprocess P((
178
struct gsm_state * S,
179
word * s, word * so));
181
extern void Gsm_Encoding P((
182
struct gsm_state * S,
189
extern void Gsm_Short_Term_Analysis_Filter P((
190
struct gsm_state * S,
191
word * LARc, /* coded log area ratio [0..7] IN */
192
word * d /* st res. signal [0..159] IN/OUT */));
194
extern void Gsm_Decoder P((
195
struct gsm_state * S,
196
word * LARcr, /* [0..7] IN */
197
word * Ncr, /* [0..3] IN */
198
word * bcr, /* [0..3] IN */
199
word * Mcr, /* [0..3] IN */
200
word * xmaxcr, /* [0..3] IN */
201
word * xMcr, /* [0..13*4] IN */
202
word * s)); /* [0..159] OUT */
204
extern void Gsm_Decoding P((
205
struct gsm_state * S,
208
word * xMcr, /* [0..12] IN */
209
word * erp)); /* [0..39] OUT */
211
extern void Gsm_Long_Term_Synthesis_Filtering P((
215
word * erp, /* [0..39] IN */
216
word * drp)); /* [-120..-1] IN, [0..40] OUT */
218
void Gsm_RPE_Decoding P((
222
word * xMcr, /* [0..12], 3 bits IN */
223
word * erp)); /* [0..39] OUT */
225
void Gsm_RPE_Encoding P((
226
struct gsm_state * S,
227
word * e, /* -5..-1][0..39][40..44 IN/OUT */
228
word * xmaxc, /* OUT */
230
word * xMc)); /* [0..12] OUT */
232
extern void Gsm_Short_Term_Synthesis_Filter P((
233
struct gsm_state * S,
234
word * LARcr, /* log area ratios [0..7] IN */
235
word * drp, /* received d [0...39] IN */
236
word * s)); /* signal s [0..159] OUT */
238
extern void Gsm_Update_of_reconstructed_short_time_residual_signal P((
239
word * dpp, /* [0...39] IN */
240
word * ep, /* [0...39] IN */
241
word * dp)); /* [-120...-1] IN/OUT */
244
* Tables from table.c
248
extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8];
249
extern word gsm_INVA[8];
250
extern word gsm_DLB[4], gsm_QLB[4];
251
extern word gsm_H[11];
252
extern word gsm_NRFAC[8];
253
extern word gsm_FAC[8];
255
#endif /* GSM_TABLE_C */
262
# define gsm_debug_words(a, b, c, d) /* nil */
263
# define gsm_debug_longwords(a, b, c, d) /* nil */
264
# define gsm_debug_word(a, b) /* nil */
265
# define gsm_debug_longword(a, b) /* nil */
267
#else /* !NDEBUG => DEBUG */
269
extern void gsm_debug_words P((char * name, int, int, word *));
270
extern void gsm_debug_longwords P((char * name, int, int, longword *));
271
extern void gsm_debug_longword P((char * name, longword));
272
extern void gsm_debug_word P((char * name, word));
278
#endif /* PRIVATE_H */