Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/gsm/src/gsm_encode.c
4394 views
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_encode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */
8
9
#include "private.h"
10
#include "gsm.h"
11
#include "proto.h"
12
13
void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
14
{
15
word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
16
17
Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
18
19
20
/* variable size
21
22
GSM_MAGIC 4
23
24
LARc[0] 6
25
LARc[1] 6
26
LARc[2] 5
27
LARc[3] 5
28
LARc[4] 4
29
LARc[5] 4
30
LARc[6] 3
31
LARc[7] 3
32
33
Nc[0] 7
34
bc[0] 2
35
Mc[0] 2
36
xmaxc[0] 6
37
xmc[0] 3
38
xmc[1] 3
39
xmc[2] 3
40
xmc[3] 3
41
xmc[4] 3
42
xmc[5] 3
43
xmc[6] 3
44
xmc[7] 3
45
xmc[8] 3
46
xmc[9] 3
47
xmc[10] 3
48
xmc[11] 3
49
xmc[12] 3
50
51
Nc[1] 7
52
bc[1] 2
53
Mc[1] 2
54
xmaxc[1] 6
55
xmc[13] 3
56
xmc[14] 3
57
xmc[15] 3
58
xmc[16] 3
59
xmc[17] 3
60
xmc[18] 3
61
xmc[19] 3
62
xmc[20] 3
63
xmc[21] 3
64
xmc[22] 3
65
xmc[23] 3
66
xmc[24] 3
67
xmc[25] 3
68
69
Nc[2] 7
70
bc[2] 2
71
Mc[2] 2
72
xmaxc[2] 6
73
xmc[26] 3
74
xmc[27] 3
75
xmc[28] 3
76
xmc[29] 3
77
xmc[30] 3
78
xmc[31] 3
79
xmc[32] 3
80
xmc[33] 3
81
xmc[34] 3
82
xmc[35] 3
83
xmc[36] 3
84
xmc[37] 3
85
xmc[38] 3
86
87
Nc[3] 7
88
bc[3] 2
89
Mc[3] 2
90
xmaxc[3] 6
91
xmc[39] 3
92
xmc[40] 3
93
xmc[41] 3
94
xmc[42] 3
95
xmc[43] 3
96
xmc[44] 3
97
xmc[45] 3
98
xmc[46] 3
99
xmc[47] 3
100
xmc[48] 3
101
xmc[49] 3
102
xmc[50] 3
103
xmc[51] 3
104
*/
105
106
#ifdef WAV49
107
108
if (s->wav_fmt) {
109
s->frame_index = !s->frame_index;
110
if (s->frame_index) {
111
112
uword sr;
113
114
sr = 0;
115
sr = sr >> 6 | LARc[0] << 10;
116
sr = sr >> 6 | LARc[1] << 10;
117
*c++ = sr >> 4;
118
sr = sr >> 5 | LARc[2] << 11;
119
*c++ = sr >> 7;
120
sr = sr >> 5 | LARc[3] << 11;
121
sr = sr >> 4 | LARc[4] << 12;
122
*c++ = sr >> 6;
123
sr = sr >> 4 | LARc[5] << 12;
124
sr = sr >> 3 | LARc[6] << 13;
125
*c++ = sr >> 7;
126
sr = sr >> 3 | LARc[7] << 13;
127
sr = sr >> 7 | Nc[0] << 9;
128
*c++ = sr >> 5;
129
sr = sr >> 2 | bc[0] << 14;
130
sr = sr >> 2 | Mc[0] << 14;
131
sr = sr >> 6 | xmaxc[0] << 10;
132
*c++ = sr >> 3;
133
sr = sr >> 3 | xmc[0] << 13;
134
*c++ = sr >> 8;
135
sr = sr >> 3 | xmc[1] << 13;
136
sr = sr >> 3 | xmc[2] << 13;
137
sr = sr >> 3 | xmc[3] << 13;
138
*c++ = sr >> 7;
139
sr = sr >> 3 | xmc[4] << 13;
140
sr = sr >> 3 | xmc[5] << 13;
141
sr = sr >> 3 | xmc[6] << 13;
142
*c++ = sr >> 6;
143
sr = sr >> 3 | xmc[7] << 13;
144
sr = sr >> 3 | xmc[8] << 13;
145
*c++ = sr >> 8;
146
sr = sr >> 3 | xmc[9] << 13;
147
sr = sr >> 3 | xmc[10] << 13;
148
sr = sr >> 3 | xmc[11] << 13;
149
*c++ = sr >> 7;
150
sr = sr >> 3 | xmc[12] << 13;
151
sr = sr >> 7 | Nc[1] << 9;
152
*c++ = sr >> 5;
153
sr = sr >> 2 | bc[1] << 14;
154
sr = sr >> 2 | Mc[1] << 14;
155
sr = sr >> 6 | xmaxc[1] << 10;
156
*c++ = sr >> 3;
157
sr = sr >> 3 | xmc[13] << 13;
158
*c++ = sr >> 8;
159
sr = sr >> 3 | xmc[14] << 13;
160
sr = sr >> 3 | xmc[15] << 13;
161
sr = sr >> 3 | xmc[16] << 13;
162
*c++ = sr >> 7;
163
sr = sr >> 3 | xmc[17] << 13;
164
sr = sr >> 3 | xmc[18] << 13;
165
sr = sr >> 3 | xmc[19] << 13;
166
*c++ = sr >> 6;
167
sr = sr >> 3 | xmc[20] << 13;
168
sr = sr >> 3 | xmc[21] << 13;
169
*c++ = sr >> 8;
170
sr = sr >> 3 | xmc[22] << 13;
171
sr = sr >> 3 | xmc[23] << 13;
172
sr = sr >> 3 | xmc[24] << 13;
173
*c++ = sr >> 7;
174
sr = sr >> 3 | xmc[25] << 13;
175
sr = sr >> 7 | Nc[2] << 9;
176
*c++ = sr >> 5;
177
sr = sr >> 2 | bc[2] << 14;
178
sr = sr >> 2 | Mc[2] << 14;
179
sr = sr >> 6 | xmaxc[2] << 10;
180
*c++ = sr >> 3;
181
sr = sr >> 3 | xmc[26] << 13;
182
*c++ = sr >> 8;
183
sr = sr >> 3 | xmc[27] << 13;
184
sr = sr >> 3 | xmc[28] << 13;
185
sr = sr >> 3 | xmc[29] << 13;
186
*c++ = sr >> 7;
187
sr = sr >> 3 | xmc[30] << 13;
188
sr = sr >> 3 | xmc[31] << 13;
189
sr = sr >> 3 | xmc[32] << 13;
190
*c++ = sr >> 6;
191
sr = sr >> 3 | xmc[33] << 13;
192
sr = sr >> 3 | xmc[34] << 13;
193
*c++ = sr >> 8;
194
sr = sr >> 3 | xmc[35] << 13;
195
sr = sr >> 3 | xmc[36] << 13;
196
sr = sr >> 3 | xmc[37] << 13;
197
*c++ = sr >> 7;
198
sr = sr >> 3 | xmc[38] << 13;
199
sr = sr >> 7 | Nc[3] << 9;
200
*c++ = sr >> 5;
201
sr = sr >> 2 | bc[3] << 14;
202
sr = sr >> 2 | Mc[3] << 14;
203
sr = sr >> 6 | xmaxc[3] << 10;
204
*c++ = sr >> 3;
205
sr = sr >> 3 | xmc[39] << 13;
206
*c++ = sr >> 8;
207
sr = sr >> 3 | xmc[40] << 13;
208
sr = sr >> 3 | xmc[41] << 13;
209
sr = sr >> 3 | xmc[42] << 13;
210
*c++ = sr >> 7;
211
sr = sr >> 3 | xmc[43] << 13;
212
sr = sr >> 3 | xmc[44] << 13;
213
sr = sr >> 3 | xmc[45] << 13;
214
*c++ = sr >> 6;
215
sr = sr >> 3 | xmc[46] << 13;
216
sr = sr >> 3 | xmc[47] << 13;
217
*c++ = sr >> 8;
218
sr = sr >> 3 | xmc[48] << 13;
219
sr = sr >> 3 | xmc[49] << 13;
220
sr = sr >> 3 | xmc[50] << 13;
221
*c++ = sr >> 7;
222
sr = sr >> 3 | xmc[51] << 13;
223
sr = sr >> 4;
224
*c = sr >> 8;
225
s->frame_chain = *c;
226
}
227
else {
228
uword sr;
229
230
sr = 0;
231
sr = sr >> 4 | s->frame_chain << 12;
232
sr = sr >> 6 | LARc[0] << 10;
233
*c++ = sr >> 6;
234
sr = sr >> 6 | LARc[1] << 10;
235
*c++ = sr >> 8;
236
sr = sr >> 5 | LARc[2] << 11;
237
sr = sr >> 5 | LARc[3] << 11;
238
*c++ = sr >> 6;
239
sr = sr >> 4 | LARc[4] << 12;
240
sr = sr >> 4 | LARc[5] << 12;
241
*c++ = sr >> 6;
242
sr = sr >> 3 | LARc[6] << 13;
243
sr = sr >> 3 | LARc[7] << 13;
244
*c++ = sr >> 8;
245
sr = sr >> 7 | Nc[0] << 9;
246
sr = sr >> 2 | bc[0] << 14;
247
*c++ = sr >> 7;
248
sr = sr >> 2 | Mc[0] << 14;
249
sr = sr >> 6 | xmaxc[0] << 10;
250
*c++ = sr >> 7;
251
sr = sr >> 3 | xmc[0] << 13;
252
sr = sr >> 3 | xmc[1] << 13;
253
sr = sr >> 3 | xmc[2] << 13;
254
*c++ = sr >> 6;
255
sr = sr >> 3 | xmc[3] << 13;
256
sr = sr >> 3 | xmc[4] << 13;
257
*c++ = sr >> 8;
258
sr = sr >> 3 | xmc[5] << 13;
259
sr = sr >> 3 | xmc[6] << 13;
260
sr = sr >> 3 | xmc[7] << 13;
261
*c++ = sr >> 7;
262
sr = sr >> 3 | xmc[8] << 13;
263
sr = sr >> 3 | xmc[9] << 13;
264
sr = sr >> 3 | xmc[10] << 13;
265
*c++ = sr >> 6;
266
sr = sr >> 3 | xmc[11] << 13;
267
sr = sr >> 3 | xmc[12] << 13;
268
*c++ = sr >> 8;
269
sr = sr >> 7 | Nc[1] << 9;
270
sr = sr >> 2 | bc[1] << 14;
271
*c++ = sr >> 7;
272
sr = sr >> 2 | Mc[1] << 14;
273
sr = sr >> 6 | xmaxc[1] << 10;
274
*c++ = sr >> 7;
275
sr = sr >> 3 | xmc[13] << 13;
276
sr = sr >> 3 | xmc[14] << 13;
277
sr = sr >> 3 | xmc[15] << 13;
278
*c++ = sr >> 6;
279
sr = sr >> 3 | xmc[16] << 13;
280
sr = sr >> 3 | xmc[17] << 13;
281
*c++ = sr >> 8;
282
sr = sr >> 3 | xmc[18] << 13;
283
sr = sr >> 3 | xmc[19] << 13;
284
sr = sr >> 3 | xmc[20] << 13;
285
*c++ = sr >> 7;
286
sr = sr >> 3 | xmc[21] << 13;
287
sr = sr >> 3 | xmc[22] << 13;
288
sr = sr >> 3 | xmc[23] << 13;
289
*c++ = sr >> 6;
290
sr = sr >> 3 | xmc[24] << 13;
291
sr = sr >> 3 | xmc[25] << 13;
292
*c++ = sr >> 8;
293
sr = sr >> 7 | Nc[2] << 9;
294
sr = sr >> 2 | bc[2] << 14;
295
*c++ = sr >> 7;
296
sr = sr >> 2 | Mc[2] << 14;
297
sr = sr >> 6 | xmaxc[2] << 10;
298
*c++ = sr >> 7;
299
sr = sr >> 3 | xmc[26] << 13;
300
sr = sr >> 3 | xmc[27] << 13;
301
sr = sr >> 3 | xmc[28] << 13;
302
*c++ = sr >> 6;
303
sr = sr >> 3 | xmc[29] << 13;
304
sr = sr >> 3 | xmc[30] << 13;
305
*c++ = sr >> 8;
306
sr = sr >> 3 | xmc[31] << 13;
307
sr = sr >> 3 | xmc[32] << 13;
308
sr = sr >> 3 | xmc[33] << 13;
309
*c++ = sr >> 7;
310
sr = sr >> 3 | xmc[34] << 13;
311
sr = sr >> 3 | xmc[35] << 13;
312
sr = sr >> 3 | xmc[36] << 13;
313
*c++ = sr >> 6;
314
sr = sr >> 3 | xmc[37] << 13;
315
sr = sr >> 3 | xmc[38] << 13;
316
*c++ = sr >> 8;
317
sr = sr >> 7 | Nc[3] << 9;
318
sr = sr >> 2 | bc[3] << 14;
319
*c++ = sr >> 7;
320
sr = sr >> 2 | Mc[3] << 14;
321
sr = sr >> 6 | xmaxc[3] << 10;
322
*c++ = sr >> 7;
323
sr = sr >> 3 | xmc[39] << 13;
324
sr = sr >> 3 | xmc[40] << 13;
325
sr = sr >> 3 | xmc[41] << 13;
326
*c++ = sr >> 6;
327
sr = sr >> 3 | xmc[42] << 13;
328
sr = sr >> 3 | xmc[43] << 13;
329
*c++ = sr >> 8;
330
sr = sr >> 3 | xmc[44] << 13;
331
sr = sr >> 3 | xmc[45] << 13;
332
sr = sr >> 3 | xmc[46] << 13;
333
*c++ = sr >> 7;
334
sr = sr >> 3 | xmc[47] << 13;
335
sr = sr >> 3 | xmc[48] << 13;
336
sr = sr >> 3 | xmc[49] << 13;
337
*c++ = sr >> 6;
338
sr = sr >> 3 | xmc[50] << 13;
339
sr = sr >> 3 | xmc[51] << 13;
340
*c++ = sr >> 8;
341
}
342
}
343
344
else
345
346
#endif /* WAV49 */
347
{
348
349
*c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */
350
| ((LARc[0] >> 2) & 0xF);
351
*c++ = ((LARc[0] & 0x3) << 6)
352
| (LARc[1] & 0x3F);
353
*c++ = ((LARc[2] & 0x1F) << 3)
354
| ((LARc[3] >> 2) & 0x7);
355
*c++ = ((LARc[3] & 0x3) << 6)
356
| ((LARc[4] & 0xF) << 2)
357
| ((LARc[5] >> 2) & 0x3);
358
*c++ = ((LARc[5] & 0x3) << 6)
359
| ((LARc[6] & 0x7) << 3)
360
| (LARc[7] & 0x7);
361
*c++ = ((Nc[0] & 0x7F) << 1)
362
| ((bc[0] >> 1) & 0x1);
363
*c++ = ((bc[0] & 0x1) << 7)
364
| ((Mc[0] & 0x3) << 5)
365
| ((xmaxc[0] >> 1) & 0x1F);
366
*c++ = ((xmaxc[0] & 0x1) << 7)
367
| ((xmc[0] & 0x7) << 4)
368
| ((xmc[1] & 0x7) << 1)
369
| ((xmc[2] >> 2) & 0x1);
370
*c++ = ((xmc[2] & 0x3) << 6)
371
| ((xmc[3] & 0x7) << 3)
372
| (xmc[4] & 0x7);
373
*c++ = ((xmc[5] & 0x7) << 5) /* 10 */
374
| ((xmc[6] & 0x7) << 2)
375
| ((xmc[7] >> 1) & 0x3);
376
*c++ = ((xmc[7] & 0x1) << 7)
377
| ((xmc[8] & 0x7) << 4)
378
| ((xmc[9] & 0x7) << 1)
379
| ((xmc[10] >> 2) & 0x1);
380
*c++ = ((xmc[10] & 0x3) << 6)
381
| ((xmc[11] & 0x7) << 3)
382
| (xmc[12] & 0x7);
383
*c++ = ((Nc[1] & 0x7F) << 1)
384
| ((bc[1] >> 1) & 0x1);
385
*c++ = ((bc[1] & 0x1) << 7)
386
| ((Mc[1] & 0x3) << 5)
387
| ((xmaxc[1] >> 1) & 0x1F);
388
*c++ = ((xmaxc[1] & 0x1) << 7)
389
| ((xmc[13] & 0x7) << 4)
390
| ((xmc[14] & 0x7) << 1)
391
| ((xmc[15] >> 2) & 0x1);
392
*c++ = ((xmc[15] & 0x3) << 6)
393
| ((xmc[16] & 0x7) << 3)
394
| (xmc[17] & 0x7);
395
*c++ = ((xmc[18] & 0x7) << 5)
396
| ((xmc[19] & 0x7) << 2)
397
| ((xmc[20] >> 1) & 0x3);
398
*c++ = ((xmc[20] & 0x1) << 7)
399
| ((xmc[21] & 0x7) << 4)
400
| ((xmc[22] & 0x7) << 1)
401
| ((xmc[23] >> 2) & 0x1);
402
*c++ = ((xmc[23] & 0x3) << 6)
403
| ((xmc[24] & 0x7) << 3)
404
| (xmc[25] & 0x7);
405
*c++ = ((Nc[2] & 0x7F) << 1) /* 20 */
406
| ((bc[2] >> 1) & 0x1);
407
*c++ = ((bc[2] & 0x1) << 7)
408
| ((Mc[2] & 0x3) << 5)
409
| ((xmaxc[2] >> 1) & 0x1F);
410
*c++ = ((xmaxc[2] & 0x1) << 7)
411
| ((xmc[26] & 0x7) << 4)
412
| ((xmc[27] & 0x7) << 1)
413
| ((xmc[28] >> 2) & 0x1);
414
*c++ = ((xmc[28] & 0x3) << 6)
415
| ((xmc[29] & 0x7) << 3)
416
| (xmc[30] & 0x7);
417
*c++ = ((xmc[31] & 0x7) << 5)
418
| ((xmc[32] & 0x7) << 2)
419
| ((xmc[33] >> 1) & 0x3);
420
*c++ = ((xmc[33] & 0x1) << 7)
421
| ((xmc[34] & 0x7) << 4)
422
| ((xmc[35] & 0x7) << 1)
423
| ((xmc[36] >> 2) & 0x1);
424
*c++ = ((xmc[36] & 0x3) << 6)
425
| ((xmc[37] & 0x7) << 3)
426
| (xmc[38] & 0x7);
427
*c++ = ((Nc[3] & 0x7F) << 1)
428
| ((bc[3] >> 1) & 0x1);
429
*c++ = ((bc[3] & 0x1) << 7)
430
| ((Mc[3] & 0x3) << 5)
431
| ((xmaxc[3] >> 1) & 0x1F);
432
*c++ = ((xmaxc[3] & 0x1) << 7)
433
| ((xmc[39] & 0x7) << 4)
434
| ((xmc[40] & 0x7) << 1)
435
| ((xmc[41] >> 2) & 0x1);
436
*c++ = ((xmc[41] & 0x3) << 6) /* 30 */
437
| ((xmc[42] & 0x7) << 3)
438
| (xmc[43] & 0x7);
439
*c++ = ((xmc[44] & 0x7) << 5)
440
| ((xmc[45] & 0x7) << 2)
441
| ((xmc[46] >> 1) & 0x3);
442
*c++ = ((xmc[46] & 0x1) << 7)
443
| ((xmc[47] & 0x7) << 4)
444
| ((xmc[48] & 0x7) << 1)
445
| ((xmc[49] >> 2) & 0x1);
446
*c++ = ((xmc[49] & 0x3) << 6)
447
| ((xmc[50] & 0x7) << 3)
448
| (xmc[51] & 0x7);
449
450
}
451
}
452
453