FreeCalypso > hg > gsm-net-reveng
comparison trau-decode/parse-amr.c @ 91:bbb28d5447f9
trau-parse AMR: extract and print speech parameters
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 05 Mar 2025 02:03:48 +0000 |
parents | 31e17dd64fc1 |
children | 761650771e51 |
comparison
equal
deleted
inserted
replaced
90:31e17dd64fc1 | 91:bbb28d5447f9 |
---|---|
31 static char *nospch_class_names[8] = { | 31 static char *nospch_class_names[8] = { |
32 "No_Data", "invalid", "invalid", "invalid", | 32 "No_Data", "invalid", "invalid", "invalid", |
33 "Sid_Bad", "Sid_Update", "Onset", "Sid_First" | 33 "Sid_Bad", "Sid_Update", "Onset", "Sid_First" |
34 }; | 34 }; |
35 | 35 |
36 static const uint8_t params_lsf_475_515[] = {8, 8, 7, 0}; | |
37 static const uint8_t params_lsf_59_67_74_102[] = {8, 9, 9, 0}; | |
38 static const uint8_t params_lsf_795[] = {9, 9, 9, 0}; | |
39 static const uint8_t params_lsf_122[] = {7, 8, 9, 8, 6, 0}; | |
40 | |
41 static const uint8_t params_475_sf1[] = {8, 7, 2, 8, 0}; | |
42 static const uint8_t params_475_sf3[] = {4, 7, 2, 8, 0}; | |
43 static const uint8_t params_475_sf24[] = {4, 7, 2, 0}; | |
44 | |
45 static const uint8_t params_515_sf1[] = {8, 7, 2, 6, 0}; | |
46 static const uint8_t params_515_sf234[] = {4, 7, 2, 6, 0}; | |
47 | |
48 static const uint8_t params_59_sf13[] = {8, 9, 2, 6, 0}; | |
49 static const uint8_t params_59_sf24[] = {4, 9, 2, 6, 0}; | |
50 | |
51 static const uint8_t params_67_sf13[] = {8, 11, 3, 7, 0}; | |
52 static const uint8_t params_67_sf24[] = {4, 11, 3, 7, 0}; | |
53 | |
54 static const uint8_t params_74_sf13[] = {8, 13, 4, 7, 0}; | |
55 static const uint8_t params_74_sf24[] = {5, 13, 4, 7, 0}; | |
56 | |
57 static const uint8_t params_795_sf13[] = {8, 13, 4, 4, 5, 0}; | |
58 static const uint8_t params_795_sf24[] = {6, 13, 4, 4, 5, 0}; | |
59 | |
60 static const uint8_t params_102_sf13[] = {8, 1, 1, 1, 1, 10, 10, 7, 7, 0}; | |
61 static const uint8_t params_102_sf24[] = {5, 1, 1, 1, 1, 10, 10, 7, 7, 0}; | |
62 | |
63 static const uint8_t params_122_sf13[] = | |
64 {9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0}; | |
65 static const uint8_t params_122_sf24[] = | |
66 {6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0}; | |
67 | |
68 static const uint8_t params_sid[] = {3, 8, 9, 9, 6, 0}; | |
69 | |
36 static unsigned | 70 static unsigned |
37 bits_to_num(bits, nbits) | 71 bits_to_num(bits, nbits) |
38 ubit_t *bits; | 72 ubit_t *bits; |
39 unsigned nbits; | 73 unsigned nbits; |
40 { | 74 { |
50 } | 84 } |
51 return accum; | 85 return accum; |
52 } | 86 } |
53 | 87 |
54 static void | 88 static void |
89 print_generic_params(bits, ltab) | |
90 ubit_t *bits; | |
91 uint8_t *ltab; | |
92 { | |
93 uint8_t *tp; | |
94 unsigned n, p; | |
95 | |
96 for (tp = ltab; n = *tp; tp++) { | |
97 p = bits_to_num(bits, n); | |
98 bits += n; | |
99 printf(" %u", p); | |
100 } | |
101 } | |
102 | |
103 static void | |
104 print_speech_params(bits, ltab) | |
105 ubit_t *bits; | |
106 uint8_t *ltab; | |
107 { | |
108 fputs(" ", stdout); | |
109 print_generic_params(bits, ltab); | |
110 putchar('\n'); | |
111 } | |
112 | |
113 static void | |
55 decode_mode_0(c_bits, d_bits) | 114 decode_mode_0(c_bits, d_bits) |
56 ubit_t *c_bits, *d_bits; | 115 ubit_t *c_bits, *d_bits; |
57 { | 116 { |
58 ubit_t crc_collect[56]; | 117 ubit_t crc_collect[56]; |
59 int crc1, crc2, crc3, crc4; | 118 int crc1, crc2, crc3, crc4; |
76 printf(" CRC %s %s %s %s\n", | 135 printf(" CRC %s %s %s %s\n", |
77 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 136 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
78 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 137 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
79 if (crc1) | 138 if (crc1) |
80 saved_mode_valid = 0; | 139 saved_mode_valid = 0; |
140 print_speech_params(d_bits + 44, params_lsf_475_515); | |
141 print_speech_params(d_bits + 67, params_475_sf1); | |
142 print_speech_params(d_bits + 95, params_475_sf24); | |
143 print_speech_params(d_bits + 111, params_475_sf3); | |
144 print_speech_params(d_bits + 135, params_475_sf24); | |
81 } | 145 } |
82 | 146 |
83 static void | 147 static void |
84 decode_mode_1(c_bits, d_bits) | 148 decode_mode_1(c_bits, d_bits) |
85 ubit_t *c_bits, *d_bits; | 149 ubit_t *c_bits, *d_bits; |
108 printf(" CRC %s %s %s %s\n", | 172 printf(" CRC %s %s %s %s\n", |
109 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 173 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
110 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 174 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
111 if (crc1) | 175 if (crc1) |
112 saved_mode_valid = 0; | 176 saved_mode_valid = 0; |
177 print_speech_params(d_bits + 46, params_lsf_475_515); | |
178 print_speech_params(d_bits + 69, params_515_sf1); | |
179 print_speech_params(d_bits + 95, params_515_sf234); | |
180 print_speech_params(d_bits + 117, params_515_sf234); | |
181 print_speech_params(d_bits + 139, params_515_sf234); | |
113 } | 182 } |
114 | 183 |
115 static void | 184 static void |
116 decode_mode_2(c_bits, d_bits) | 185 decode_mode_2(c_bits, d_bits) |
117 ubit_t *c_bits, *d_bits; | 186 ubit_t *c_bits, *d_bits; |
140 printf(" CRC %s %s %s %s\n", | 209 printf(" CRC %s %s %s %s\n", |
141 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 210 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
142 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 211 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
143 if (crc1) | 212 if (crc1) |
144 saved_mode_valid = 0; | 213 saved_mode_valid = 0; |
214 print_speech_params(d_bits + 41, params_lsf_59_67_74_102); | |
215 print_speech_params(d_bits + 67, params_59_sf13); | |
216 print_speech_params(d_bits + 95, params_59_sf24); | |
217 print_speech_params(d_bits + 119, params_59_sf13); | |
218 print_speech_params(d_bits + 147, params_59_sf24); | |
145 } | 219 } |
146 | 220 |
147 static void | 221 static void |
148 decode_mode_3(c_bits, d_bits) | 222 decode_mode_3(c_bits, d_bits) |
149 ubit_t *c_bits, *d_bits; | 223 ubit_t *c_bits, *d_bits; |
174 printf(" CRC %s %s %s %s\n", | 248 printf(" CRC %s %s %s %s\n", |
175 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 249 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
176 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 250 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
177 if (crc1) | 251 if (crc1) |
178 saved_mode_valid = 0; | 252 saved_mode_valid = 0; |
253 print_speech_params(d_bits + 37, params_lsf_59_67_74_102); | |
254 print_speech_params(d_bits + 63, params_67_sf13); | |
255 print_speech_params(d_bits + 95, params_67_sf24); | |
256 print_speech_params(d_bits + 123, params_67_sf13); | |
257 print_speech_params(d_bits + 155, params_67_sf24); | |
179 } | 258 } |
180 | 259 |
181 static void | 260 static void |
182 decode_mode_4(c_bits, d_bits) | 261 decode_mode_4(c_bits, d_bits) |
183 ubit_t *c_bits, *d_bits; | 262 ubit_t *c_bits, *d_bits; |
211 printf(" CRC %s %s %s %s\n", | 290 printf(" CRC %s %s %s %s\n", |
212 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 291 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
213 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 292 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
214 if (crc1) | 293 if (crc1) |
215 saved_mode_valid = 0; | 294 saved_mode_valid = 0; |
295 print_speech_params(d_bits + 34, params_lsf_59_67_74_102); | |
296 print_speech_params(d_bits + 60, params_74_sf13); | |
297 print_speech_params(d_bits + 95, params_74_sf24); | |
298 print_speech_params(d_bits + 127, params_74_sf13); | |
299 print_speech_params(d_bits + 162, params_74_sf24); | |
216 } | 300 } |
217 | 301 |
218 static void | 302 static void |
219 decode_mode_5(c_bits, d_bits) | 303 decode_mode_5(c_bits, d_bits) |
220 ubit_t *c_bits, *d_bits; | 304 ubit_t *c_bits, *d_bits; |
247 printf(" CRC %s %s %s %s\n", | 331 printf(" CRC %s %s %s %s\n", |
248 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 332 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
249 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 333 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
250 if (crc1) | 334 if (crc1) |
251 saved_mode_valid = 0; | 335 saved_mode_valid = 0; |
336 print_speech_params(d_bits + 31, params_lsf_795); | |
337 print_speech_params(d_bits + 58, params_795_sf13); | |
338 print_speech_params(d_bits + 95, params_795_sf24); | |
339 print_speech_params(d_bits + 130, params_795_sf13); | |
340 print_speech_params(d_bits + 167, params_795_sf24); | |
252 } | 341 } |
253 | 342 |
254 static void | 343 static void |
255 decode_mode_6(c_bits, d_bits) | 344 decode_mode_6(c_bits, d_bits) |
256 ubit_t *c_bits, *d_bits; | 345 ubit_t *c_bits, *d_bits; |
284 printf(" CRC %s %s %s %s\n", | 373 printf(" CRC %s %s %s %s\n", |
285 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 374 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
286 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 375 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
287 if (crc1) | 376 if (crc1) |
288 saved_mode_valid = 0; | 377 saved_mode_valid = 0; |
378 print_speech_params(d_bits + 20, params_lsf_59_67_74_102); | |
379 print_speech_params(d_bits + 46, params_102_sf13); | |
380 print_speech_params(d_bits + 95, params_102_sf24); | |
381 print_speech_params(d_bits + 141, params_102_sf13); | |
382 print_speech_params(d_bits + 190, params_102_sf24); | |
289 } | 383 } |
290 | 384 |
291 static void | 385 static void |
292 decode_mode_7(c_bits, d_bits) | 386 decode_mode_7(c_bits, d_bits) |
293 ubit_t *c_bits, *d_bits; | 387 ubit_t *c_bits, *d_bits; |
317 printf(" CRC %s %s %s %s\n", | 411 printf(" CRC %s %s %s %s\n", |
318 crc1 ? "bad" : "good", crc2 ? "bad" : "good", | 412 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
319 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); | 413 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
320 if (crc1) | 414 if (crc1) |
321 saved_mode_valid = 0; | 415 saved_mode_valid = 0; |
416 print_speech_params(d_bits, params_lsf_122); | |
417 print_speech_params(d_bits + 38, params_122_sf13); | |
418 print_speech_params(d_bits + 94, params_122_sf24); | |
419 print_speech_params(d_bits + 147, params_122_sf13); | |
420 print_speech_params(d_bits + 203, params_122_sf24); | |
322 } | 421 } |
323 | 422 |
324 static void (*per_mode_decode[8])() = { | 423 static void (*per_mode_decode[8])() = { |
325 decode_mode_0, | 424 decode_mode_0, |
326 decode_mode_1, | 425 decode_mode_1, |