~ubuntu-branches/debian/sid/sflphone/sid

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.0.1/third_party/gsm/src/gsm_decode.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2013-06-02 18:04:11 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20130602180411-3rcpy8c1zdlo8y0s
Tags: 1.2.2-1
* New upstream release
* changeset_rb68857a4b485b7d43f92714cd5792595ff895f82.diff - fix QTest
* pjproject ./configure --disable-sound --disable-video

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
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.
 
5
 */
 
6
 
 
7
/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_decode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */
 
8
 
 
9
#include "private.h"
 
10
 
 
11
#include "gsm.h"
 
12
#include "proto.h"
 
13
 
 
14
int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target)
 
15
{
 
16
        word    LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
 
17
 
 
18
#ifdef WAV49
 
19
        if (s->wav_fmt) {
 
20
 
 
21
                uword sr = 0;
 
22
 
 
23
                s->frame_index = !s->frame_index;
 
24
                if (s->frame_index) {
 
25
 
 
26
                        sr = *c++;
 
27
                        LARc[0] = sr & 0x3f;  sr >>= 6;
 
28
                        sr |= (uword)*c++ << 2;
 
29
                        LARc[1] = sr & 0x3f;  sr >>= 6;
 
30
                        sr |= (uword)*c++ << 4;
 
31
                        LARc[2] = sr & 0x1f;  sr >>= 5;
 
32
                        LARc[3] = sr & 0x1f;  sr >>= 5;
 
33
                        sr |= (uword)*c++ << 2;
 
34
                        LARc[4] = sr & 0xf;  sr >>= 4;
 
35
                        LARc[5] = sr & 0xf;  sr >>= 4;
 
36
                        sr |= (uword)*c++ << 2;                 /* 5 */
 
37
                        LARc[6] = sr & 0x7;  sr >>= 3;
 
38
                        LARc[7] = sr & 0x7;  sr >>= 3;
 
39
                        sr |= (uword)*c++ << 4;
 
40
                        Nc[0] = sr & 0x7f;  sr >>= 7;
 
41
                        bc[0] = sr & 0x3;  sr >>= 2;
 
42
                        Mc[0] = sr & 0x3;  sr >>= 2;
 
43
                        sr |= (uword)*c++ << 1;
 
44
                        xmaxc[0] = sr & 0x3f;  sr >>= 6;
 
45
                        xmc[0] = sr & 0x7;  sr >>= 3;
 
46
                        sr = *c++;
 
47
                        xmc[1] = sr & 0x7;  sr >>= 3;
 
48
                        xmc[2] = sr & 0x7;  sr >>= 3;
 
49
                        sr |= (uword)*c++ << 2;
 
50
                        xmc[3] = sr & 0x7;  sr >>= 3;
 
51
                        xmc[4] = sr & 0x7;  sr >>= 3;
 
52
                        xmc[5] = sr & 0x7;  sr >>= 3;
 
53
                        sr |= (uword)*c++ << 1;                 /* 10 */
 
54
                        xmc[6] = sr & 0x7;  sr >>= 3;
 
55
                        xmc[7] = sr & 0x7;  sr >>= 3;
 
56
                        xmc[8] = sr & 0x7;  sr >>= 3;
 
57
                        sr = *c++;
 
58
                        xmc[9] = sr & 0x7;  sr >>= 3;
 
59
                        xmc[10] = sr & 0x7;  sr >>= 3;
 
60
                        sr |= (uword)*c++ << 2;
 
61
                        xmc[11] = sr & 0x7;  sr >>= 3;
 
62
                        xmc[12] = sr & 0x7;  sr >>= 3;
 
63
                        sr |= (uword)*c++ << 4;
 
64
                        Nc[1] = sr & 0x7f;  sr >>= 7;
 
65
                        bc[1] = sr & 0x3;  sr >>= 2;
 
66
                        Mc[1] = sr & 0x3;  sr >>= 2;
 
67
                        sr |= (uword)*c++ << 1;
 
68
                        xmaxc[1] = sr & 0x3f;  sr >>= 6;
 
69
                        xmc[13] = sr & 0x7;  sr >>= 3;
 
70
                        sr = *c++;                              /* 15 */
 
71
                        xmc[14] = sr & 0x7;  sr >>= 3;
 
72
                        xmc[15] = sr & 0x7;  sr >>= 3;
 
73
                        sr |= (uword)*c++ << 2;
 
74
                        xmc[16] = sr & 0x7;  sr >>= 3;
 
75
                        xmc[17] = sr & 0x7;  sr >>= 3;
 
76
                        xmc[18] = sr & 0x7;  sr >>= 3;
 
77
                        sr |= (uword)*c++ << 1;
 
78
                        xmc[19] = sr & 0x7;  sr >>= 3;
 
79
                        xmc[20] = sr & 0x7;  sr >>= 3;
 
80
                        xmc[21] = sr & 0x7;  sr >>= 3;
 
81
                        sr = *c++;
 
82
                        xmc[22] = sr & 0x7;  sr >>= 3;
 
83
                        xmc[23] = sr & 0x7;  sr >>= 3;
 
84
                        sr |= (uword)*c++ << 2;
 
85
                        xmc[24] = sr & 0x7;  sr >>= 3;
 
86
                        xmc[25] = sr & 0x7;  sr >>= 3;
 
87
                        sr |= (uword)*c++ << 4;                 /* 20 */
 
88
                        Nc[2] = sr & 0x7f;  sr >>= 7;
 
89
                        bc[2] = sr & 0x3;  sr >>= 2;
 
90
                        Mc[2] = sr & 0x3;  sr >>= 2;
 
91
                        sr |= (uword)*c++ << 1;
 
92
                        xmaxc[2] = sr & 0x3f;  sr >>= 6;
 
93
                        xmc[26] = sr & 0x7;  sr >>= 3;
 
94
                        sr = *c++;
 
95
                        xmc[27] = sr & 0x7;  sr >>= 3;
 
96
                        xmc[28] = sr & 0x7;  sr >>= 3;
 
97
                        sr |= (uword)*c++ << 2;
 
98
                        xmc[29] = sr & 0x7;  sr >>= 3;
 
99
                        xmc[30] = sr & 0x7;  sr >>= 3;
 
100
                        xmc[31] = sr & 0x7;  sr >>= 3;
 
101
                        sr |= (uword)*c++ << 1;
 
102
                        xmc[32] = sr & 0x7;  sr >>= 3;
 
103
                        xmc[33] = sr & 0x7;  sr >>= 3;
 
104
                        xmc[34] = sr & 0x7;  sr >>= 3;
 
105
                        sr = *c++;                              /* 25 */
 
106
                        xmc[35] = sr & 0x7;  sr >>= 3;
 
107
                        xmc[36] = sr & 0x7;  sr >>= 3;
 
108
                        sr |= (uword)*c++ << 2;
 
109
                        xmc[37] = sr & 0x7;  sr >>= 3;
 
110
                        xmc[38] = sr & 0x7;  sr >>= 3;
 
111
                        sr |= (uword)*c++ << 4;
 
112
                        Nc[3] = sr & 0x7f;  sr >>= 7;
 
113
                        bc[3] = sr & 0x3;  sr >>= 2;
 
114
                        Mc[3] = sr & 0x3;  sr >>= 2;
 
115
                        sr |= (uword)*c++ << 1;
 
116
                        xmaxc[3] = sr & 0x3f;  sr >>= 6;
 
117
                        xmc[39] = sr & 0x7;  sr >>= 3;
 
118
                        sr = *c++;
 
119
                        xmc[40] = sr & 0x7;  sr >>= 3;
 
120
                        xmc[41] = sr & 0x7;  sr >>= 3;
 
121
                        sr |= (uword)*c++ << 2;                 /* 30 */
 
122
                        xmc[42] = sr & 0x7;  sr >>= 3;
 
123
                        xmc[43] = sr & 0x7;  sr >>= 3;
 
124
                        xmc[44] = sr & 0x7;  sr >>= 3;
 
125
                        sr |= (uword)*c++ << 1;
 
126
                        xmc[45] = sr & 0x7;  sr >>= 3;
 
127
                        xmc[46] = sr & 0x7;  sr >>= 3;
 
128
                        xmc[47] = sr & 0x7;  sr >>= 3;
 
129
                        sr = *c++;
 
130
                        xmc[48] = sr & 0x7;  sr >>= 3;
 
131
                        xmc[49] = sr & 0x7;  sr >>= 3;
 
132
                        sr |= (uword)*c++ << 2;
 
133
                        xmc[50] = sr & 0x7;  sr >>= 3;
 
134
                        xmc[51] = sr & 0x7;  sr >>= 3;
 
135
 
 
136
                        s->frame_chain = sr & 0xf;
 
137
                }
 
138
                else {
 
139
                        sr = s->frame_chain;
 
140
                        sr |= (uword)*c++ << 4;                 /* 1 */
 
141
                        LARc[0] = sr & 0x3f;  sr >>= 6;
 
142
                        LARc[1] = sr & 0x3f;  sr >>= 6;
 
143
                        sr = *c++;
 
144
                        LARc[2] = sr & 0x1f;  sr >>= 5;
 
145
                        sr |= (uword)*c++ << 3;
 
146
                        LARc[3] = sr & 0x1f;  sr >>= 5;
 
147
                        LARc[4] = sr & 0xf;  sr >>= 4;
 
148
                        sr |= (uword)*c++ << 2;
 
149
                        LARc[5] = sr & 0xf;  sr >>= 4;
 
150
                        LARc[6] = sr & 0x7;  sr >>= 3;
 
151
                        LARc[7] = sr & 0x7;  sr >>= 3;
 
152
                        sr = *c++;                              /* 5 */
 
153
                        Nc[0] = sr & 0x7f;  sr >>= 7;
 
154
                        sr |= (uword)*c++ << 1;
 
155
                        bc[0] = sr & 0x3;  sr >>= 2;
 
156
                        Mc[0] = sr & 0x3;  sr >>= 2;
 
157
                        sr |= (uword)*c++ << 5;
 
158
                        xmaxc[0] = sr & 0x3f;  sr >>= 6;
 
159
                        xmc[0] = sr & 0x7;  sr >>= 3;
 
160
                        xmc[1] = sr & 0x7;  sr >>= 3;
 
161
                        sr |= (uword)*c++ << 1;
 
162
                        xmc[2] = sr & 0x7;  sr >>= 3;
 
163
                        xmc[3] = sr & 0x7;  sr >>= 3;
 
164
                        xmc[4] = sr & 0x7;  sr >>= 3;
 
165
                        sr = *c++;
 
166
                        xmc[5] = sr & 0x7;  sr >>= 3;
 
167
                        xmc[6] = sr & 0x7;  sr >>= 3;
 
168
                        sr |= (uword)*c++ << 2;                 /* 10 */
 
169
                        xmc[7] = sr & 0x7;  sr >>= 3;
 
170
                        xmc[8] = sr & 0x7;  sr >>= 3;
 
171
                        xmc[9] = sr & 0x7;  sr >>= 3;
 
172
                        sr |= (uword)*c++ << 1;
 
173
                        xmc[10] = sr & 0x7;  sr >>= 3;
 
174
                        xmc[11] = sr & 0x7;  sr >>= 3;
 
175
                        xmc[12] = sr & 0x7;  sr >>= 3;
 
176
                        sr = *c++;
 
177
                        Nc[1] = sr & 0x7f;  sr >>= 7;
 
178
                        sr |= (uword)*c++ << 1;
 
179
                        bc[1] = sr & 0x3;  sr >>= 2;
 
180
                        Mc[1] = sr & 0x3;  sr >>= 2;
 
181
                        sr |= (uword)*c++ << 5;
 
182
                        xmaxc[1] = sr & 0x3f;  sr >>= 6;
 
183
                        xmc[13] = sr & 0x7;  sr >>= 3;
 
184
                        xmc[14] = sr & 0x7;  sr >>= 3;
 
185
                        sr |= (uword)*c++ << 1;                 /* 15 */
 
186
                        xmc[15] = sr & 0x7;  sr >>= 3;
 
187
                        xmc[16] = sr & 0x7;  sr >>= 3;
 
188
                        xmc[17] = sr & 0x7;  sr >>= 3;
 
189
                        sr = *c++;
 
190
                        xmc[18] = sr & 0x7;  sr >>= 3;
 
191
                        xmc[19] = sr & 0x7;  sr >>= 3;
 
192
                        sr |= (uword)*c++ << 2;
 
193
                        xmc[20] = sr & 0x7;  sr >>= 3;
 
194
                        xmc[21] = sr & 0x7;  sr >>= 3;
 
195
                        xmc[22] = sr & 0x7;  sr >>= 3;
 
196
                        sr |= (uword)*c++ << 1;
 
197
                        xmc[23] = sr & 0x7;  sr >>= 3;
 
198
                        xmc[24] = sr & 0x7;  sr >>= 3;
 
199
                        xmc[25] = sr & 0x7;  sr >>= 3;
 
200
                        sr = *c++;
 
201
                        Nc[2] = sr & 0x7f;  sr >>= 7;
 
202
                        sr |= (uword)*c++ << 1;                 /* 20 */
 
203
                        bc[2] = sr & 0x3;  sr >>= 2;
 
204
                        Mc[2] = sr & 0x3;  sr >>= 2;
 
205
                        sr |= (uword)*c++ << 5;
 
206
                        xmaxc[2] = sr & 0x3f;  sr >>= 6;
 
207
                        xmc[26] = sr & 0x7;  sr >>= 3;
 
208
                        xmc[27] = sr & 0x7;  sr >>= 3;
 
209
                        sr |= (uword)*c++ << 1;
 
210
                        xmc[28] = sr & 0x7;  sr >>= 3;
 
211
                        xmc[29] = sr & 0x7;  sr >>= 3;
 
212
                        xmc[30] = sr & 0x7;  sr >>= 3;
 
213
                        sr = *c++;
 
214
                        xmc[31] = sr & 0x7;  sr >>= 3;
 
215
                        xmc[32] = sr & 0x7;  sr >>= 3;
 
216
                        sr |= (uword)*c++ << 2;
 
217
                        xmc[33] = sr & 0x7;  sr >>= 3;
 
218
                        xmc[34] = sr & 0x7;  sr >>= 3;
 
219
                        xmc[35] = sr & 0x7;  sr >>= 3;
 
220
                        sr |= (uword)*c++ << 1;                 /* 25 */
 
221
                        xmc[36] = sr & 0x7;  sr >>= 3;
 
222
                        xmc[37] = sr & 0x7;  sr >>= 3;
 
223
                        xmc[38] = sr & 0x7;  sr >>= 3;
 
224
                        sr = *c++;
 
225
                        Nc[3] = sr & 0x7f;  sr >>= 7;
 
226
                        sr |= (uword)*c++ << 1;
 
227
                        bc[3] = sr & 0x3;  sr >>= 2;
 
228
                        Mc[3] = sr & 0x3;  sr >>= 2;
 
229
                        sr |= (uword)*c++ << 5;
 
230
                        xmaxc[3] = sr & 0x3f;  sr >>= 6;
 
231
                        xmc[39] = sr & 0x7;  sr >>= 3;
 
232
                        xmc[40] = sr & 0x7;  sr >>= 3;
 
233
                        sr |= (uword)*c++ << 1;
 
234
                        xmc[41] = sr & 0x7;  sr >>= 3;
 
235
                        xmc[42] = sr & 0x7;  sr >>= 3;
 
236
                        xmc[43] = sr & 0x7;  sr >>= 3;
 
237
                        sr = *c++;                              /* 30 */
 
238
                        xmc[44] = sr & 0x7;  sr >>= 3;
 
239
                        xmc[45] = sr & 0x7;  sr >>= 3;
 
240
                        sr |= (uword)*c++ << 2;
 
241
                        xmc[46] = sr & 0x7;  sr >>= 3;
 
242
                        xmc[47] = sr & 0x7;  sr >>= 3;
 
243
                        xmc[48] = sr & 0x7;  sr >>= 3;
 
244
                        sr |= (uword)*c++ << 1;
 
245
                        xmc[49] = sr & 0x7;  sr >>= 3;
 
246
                        xmc[50] = sr & 0x7;  sr >>= 3;
 
247
                        xmc[51] = sr & 0x7;  sr >>= 3;
 
248
                }
 
249
        }
 
250
        else
 
251
#endif
 
252
        {
 
253
                /* GSM_MAGIC  = (*c >> 4) & 0xF; */
 
254
 
 
255
                if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
 
256
 
 
257
                LARc[0]  = (*c++ & 0xF) << 2;           /* 1 */
 
258
                LARc[0] |= (*c >> 6) & 0x3;
 
259
                LARc[1]  = *c++ & 0x3F;
 
260
                LARc[2]  = (*c >> 3) & 0x1F;
 
261
                LARc[3]  = (*c++ & 0x7) << 2;
 
262
                LARc[3] |= (*c >> 6) & 0x3;
 
263
                LARc[4]  = (*c >> 2) & 0xF;
 
264
                LARc[5]  = (*c++ & 0x3) << 2;
 
265
                LARc[5] |= (*c >> 6) & 0x3;
 
266
                LARc[6]  = (*c >> 3) & 0x7;
 
267
                LARc[7]  = *c++ & 0x7;
 
268
                Nc[0]  = (*c >> 1) & 0x7F;
 
269
                bc[0]  = (*c++ & 0x1) << 1;
 
270
                bc[0] |= (*c >> 7) & 0x1;
 
271
                Mc[0]  = (*c >> 5) & 0x3;
 
272
                xmaxc[0]  = (*c++ & 0x1F) << 1;
 
273
                xmaxc[0] |= (*c >> 7) & 0x1;
 
274
                xmc[0]  = (*c >> 4) & 0x7;
 
275
                xmc[1]  = (*c >> 1) & 0x7;
 
276
                xmc[2]  = (*c++ & 0x1) << 2;
 
277
                xmc[2] |= (*c >> 6) & 0x3;
 
278
                xmc[3]  = (*c >> 3) & 0x7;
 
279
                xmc[4]  = *c++ & 0x7;
 
280
                xmc[5]  = (*c >> 5) & 0x7;
 
281
                xmc[6]  = (*c >> 2) & 0x7;
 
282
                xmc[7]  = (*c++ & 0x3) << 1;            /* 10 */
 
283
                xmc[7] |= (*c >> 7) & 0x1;
 
284
                xmc[8]  = (*c >> 4) & 0x7;
 
285
                xmc[9]  = (*c >> 1) & 0x7;
 
286
                xmc[10]  = (*c++ & 0x1) << 2;
 
287
                xmc[10] |= (*c >> 6) & 0x3;
 
288
                xmc[11]  = (*c >> 3) & 0x7;
 
289
                xmc[12]  = *c++ & 0x7;
 
290
                Nc[1]  = (*c >> 1) & 0x7F;
 
291
                bc[1]  = (*c++ & 0x1) << 1;
 
292
                bc[1] |= (*c >> 7) & 0x1;
 
293
                Mc[1]  = (*c >> 5) & 0x3;
 
294
                xmaxc[1]  = (*c++ & 0x1F) << 1;
 
295
                xmaxc[1] |= (*c >> 7) & 0x1;
 
296
                xmc[13]  = (*c >> 4) & 0x7;
 
297
                xmc[14]  = (*c >> 1) & 0x7;
 
298
                xmc[15]  = (*c++ & 0x1) << 2;
 
299
                xmc[15] |= (*c >> 6) & 0x3;
 
300
                xmc[16]  = (*c >> 3) & 0x7;
 
301
                xmc[17]  = *c++ & 0x7;
 
302
                xmc[18]  = (*c >> 5) & 0x7;
 
303
                xmc[19]  = (*c >> 2) & 0x7;
 
304
                xmc[20]  = (*c++ & 0x3) << 1;
 
305
                xmc[20] |= (*c >> 7) & 0x1;
 
306
                xmc[21]  = (*c >> 4) & 0x7;
 
307
                xmc[22]  = (*c >> 1) & 0x7;
 
308
                xmc[23]  = (*c++ & 0x1) << 2;
 
309
                xmc[23] |= (*c >> 6) & 0x3;
 
310
                xmc[24]  = (*c >> 3) & 0x7;
 
311
                xmc[25]  = *c++ & 0x7;
 
312
                Nc[2]  = (*c >> 1) & 0x7F;
 
313
                bc[2]  = (*c++ & 0x1) << 1;             /* 20 */
 
314
                bc[2] |= (*c >> 7) & 0x1;
 
315
                Mc[2]  = (*c >> 5) & 0x3;
 
316
                xmaxc[2]  = (*c++ & 0x1F) << 1;
 
317
                xmaxc[2] |= (*c >> 7) & 0x1;
 
318
                xmc[26]  = (*c >> 4) & 0x7;
 
319
                xmc[27]  = (*c >> 1) & 0x7;
 
320
                xmc[28]  = (*c++ & 0x1) << 2;
 
321
                xmc[28] |= (*c >> 6) & 0x3;
 
322
                xmc[29]  = (*c >> 3) & 0x7;
 
323
                xmc[30]  = *c++ & 0x7;
 
324
                xmc[31]  = (*c >> 5) & 0x7;
 
325
                xmc[32]  = (*c >> 2) & 0x7;
 
326
                xmc[33]  = (*c++ & 0x3) << 1;
 
327
                xmc[33] |= (*c >> 7) & 0x1;
 
328
                xmc[34]  = (*c >> 4) & 0x7;
 
329
                xmc[35]  = (*c >> 1) & 0x7;
 
330
                xmc[36]  = (*c++ & 0x1) << 2;
 
331
                xmc[36] |= (*c >> 6) & 0x3;
 
332
                xmc[37]  = (*c >> 3) & 0x7;
 
333
                xmc[38]  = *c++ & 0x7;
 
334
                Nc[3]  = (*c >> 1) & 0x7F;
 
335
                bc[3]  = (*c++ & 0x1) << 1;
 
336
                bc[3] |= (*c >> 7) & 0x1;
 
337
                Mc[3]  = (*c >> 5) & 0x3;
 
338
                xmaxc[3]  = (*c++ & 0x1F) << 1;
 
339
                xmaxc[3] |= (*c >> 7) & 0x1;
 
340
                xmc[39]  = (*c >> 4) & 0x7;
 
341
                xmc[40]  = (*c >> 1) & 0x7;
 
342
                xmc[41]  = (*c++ & 0x1) << 2;
 
343
                xmc[41] |= (*c >> 6) & 0x3;
 
344
                xmc[42]  = (*c >> 3) & 0x7;
 
345
                xmc[43]  = *c++ & 0x7;                  /* 30  */
 
346
                xmc[44]  = (*c >> 5) & 0x7;
 
347
                xmc[45]  = (*c >> 2) & 0x7;
 
348
                xmc[46]  = (*c++ & 0x3) << 1;
 
349
                xmc[46] |= (*c >> 7) & 0x1;
 
350
                xmc[47]  = (*c >> 4) & 0x7;
 
351
                xmc[48]  = (*c >> 1) & 0x7;
 
352
                xmc[49]  = (*c++ & 0x1) << 2;
 
353
                xmc[49] |= (*c >> 6) & 0x3;
 
354
                xmc[50]  = (*c >> 3) & 0x7;
 
355
                xmc[51]  = *c & 0x7;                    /* 33 */
 
356
        }
 
357
 
 
358
        Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
 
359
 
 
360
        return 0;
 
361
}