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,