FreeCalypso > hg > gsm-net-reveng
comparison trau-decode/parse-amr.c @ 93:fa80ce9b076c default tip
trau-parse AMR: check spare bits and report not-all-1s
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 05 Mar 2025 02:56:24 +0000 |
parents | 761650771e51 |
children |
comparison
equal
deleted
inserted
replaced
92:761650771e51 | 93:fa80ce9b076c |
---|---|
109 print_generic_params(bits, ltab); | 109 print_generic_params(bits, ltab); |
110 putchar('\n'); | 110 putchar('\n'); |
111 } | 111 } |
112 | 112 |
113 static void | 113 static void |
114 check_spare_bits(bits, nbits, desc) | |
115 ubit_t *bits; | |
116 unsigned nbits; | |
117 char *desc; | |
118 { | |
119 while (nbits) { | |
120 if (*bits == 0) | |
121 break; | |
122 bits++; | |
123 nbits--; | |
124 } | |
125 if (!nbits) | |
126 return; | |
127 printf(" Extra data in bits %s\n", desc); | |
128 } | |
129 | |
130 static void | |
114 decode_mode_0(c_bits, d_bits) | 131 decode_mode_0(c_bits, d_bits) |
115 ubit_t *c_bits, *d_bits; | 132 ubit_t *c_bits, *d_bits; |
116 { | 133 { |
117 ubit_t crc_collect[56]; | 134 ubit_t crc_collect[56]; |
118 int crc1, crc2, crc3, crc4; | 135 int crc1, crc2, crc3, crc4; |
140 print_speech_params(d_bits + 44, params_lsf_475_515); | 157 print_speech_params(d_bits + 44, params_lsf_475_515); |
141 print_speech_params(d_bits + 67, params_475_sf1); | 158 print_speech_params(d_bits + 67, params_475_sf1); |
142 print_speech_params(d_bits + 95, params_475_sf24); | 159 print_speech_params(d_bits + 95, params_475_sf24); |
143 print_speech_params(d_bits + 111, params_475_sf3); | 160 print_speech_params(d_bits + 111, params_475_sf3); |
144 print_speech_params(d_bits + 135, params_475_sf24); | 161 print_speech_params(d_bits + 135, params_475_sf24); |
162 check_spare_bits(d_bits, 44, "D1..D44"); | |
163 check_spare_bits(d_bits + 151, 256 - 151, "D152..D256"); | |
145 } | 164 } |
146 | 165 |
147 static void | 166 static void |
148 decode_mode_1(c_bits, d_bits) | 167 decode_mode_1(c_bits, d_bits) |
149 ubit_t *c_bits, *d_bits; | 168 ubit_t *c_bits, *d_bits; |
177 print_speech_params(d_bits + 46, params_lsf_475_515); | 196 print_speech_params(d_bits + 46, params_lsf_475_515); |
178 print_speech_params(d_bits + 69, params_515_sf1); | 197 print_speech_params(d_bits + 69, params_515_sf1); |
179 print_speech_params(d_bits + 95, params_515_sf234); | 198 print_speech_params(d_bits + 95, params_515_sf234); |
180 print_speech_params(d_bits + 117, params_515_sf234); | 199 print_speech_params(d_bits + 117, params_515_sf234); |
181 print_speech_params(d_bits + 139, params_515_sf234); | 200 print_speech_params(d_bits + 139, params_515_sf234); |
201 check_spare_bits(d_bits, 46, "D1..D46"); | |
202 check_spare_bits(d_bits + 161, 256 - 161, "D162..D256"); | |
182 } | 203 } |
183 | 204 |
184 static void | 205 static void |
185 decode_mode_2(c_bits, d_bits) | 206 decode_mode_2(c_bits, d_bits) |
186 ubit_t *c_bits, *d_bits; | 207 ubit_t *c_bits, *d_bits; |
214 print_speech_params(d_bits + 41, params_lsf_59_67_74_102); | 235 print_speech_params(d_bits + 41, params_lsf_59_67_74_102); |
215 print_speech_params(d_bits + 67, params_59_sf13); | 236 print_speech_params(d_bits + 67, params_59_sf13); |
216 print_speech_params(d_bits + 95, params_59_sf24); | 237 print_speech_params(d_bits + 95, params_59_sf24); |
217 print_speech_params(d_bits + 119, params_59_sf13); | 238 print_speech_params(d_bits + 119, params_59_sf13); |
218 print_speech_params(d_bits + 147, params_59_sf24); | 239 print_speech_params(d_bits + 147, params_59_sf24); |
240 check_spare_bits(d_bits, 41, "D1..D41"); | |
241 check_spare_bits(d_bits + 171, 256 - 171, "D172..D256"); | |
219 } | 242 } |
220 | 243 |
221 static void | 244 static void |
222 decode_mode_3(c_bits, d_bits) | 245 decode_mode_3(c_bits, d_bits) |
223 ubit_t *c_bits, *d_bits; | 246 ubit_t *c_bits, *d_bits; |
253 print_speech_params(d_bits + 37, params_lsf_59_67_74_102); | 276 print_speech_params(d_bits + 37, params_lsf_59_67_74_102); |
254 print_speech_params(d_bits + 63, params_67_sf13); | 277 print_speech_params(d_bits + 63, params_67_sf13); |
255 print_speech_params(d_bits + 95, params_67_sf24); | 278 print_speech_params(d_bits + 95, params_67_sf24); |
256 print_speech_params(d_bits + 123, params_67_sf13); | 279 print_speech_params(d_bits + 123, params_67_sf13); |
257 print_speech_params(d_bits + 155, params_67_sf24); | 280 print_speech_params(d_bits + 155, params_67_sf24); |
281 check_spare_bits(d_bits, 37, "D1..D37"); | |
282 check_spare_bits(d_bits + 183, 256 - 183, "D184..D256"); | |
258 } | 283 } |
259 | 284 |
260 static void | 285 static void |
261 decode_mode_4(c_bits, d_bits) | 286 decode_mode_4(c_bits, d_bits) |
262 ubit_t *c_bits, *d_bits; | 287 ubit_t *c_bits, *d_bits; |
295 print_speech_params(d_bits + 34, params_lsf_59_67_74_102); | 320 print_speech_params(d_bits + 34, params_lsf_59_67_74_102); |
296 print_speech_params(d_bits + 60, params_74_sf13); | 321 print_speech_params(d_bits + 60, params_74_sf13); |
297 print_speech_params(d_bits + 95, params_74_sf24); | 322 print_speech_params(d_bits + 95, params_74_sf24); |
298 print_speech_params(d_bits + 127, params_74_sf13); | 323 print_speech_params(d_bits + 127, params_74_sf13); |
299 print_speech_params(d_bits + 162, params_74_sf24); | 324 print_speech_params(d_bits + 162, params_74_sf24); |
325 check_spare_bits(d_bits, 34, "D1..D34"); | |
326 check_spare_bits(d_bits + 194, 256 - 194, "D195..D256"); | |
300 } | 327 } |
301 | 328 |
302 static void | 329 static void |
303 decode_mode_5(c_bits, d_bits) | 330 decode_mode_5(c_bits, d_bits) |
304 ubit_t *c_bits, *d_bits; | 331 ubit_t *c_bits, *d_bits; |
336 print_speech_params(d_bits + 31, params_lsf_795); | 363 print_speech_params(d_bits + 31, params_lsf_795); |
337 print_speech_params(d_bits + 58, params_795_sf13); | 364 print_speech_params(d_bits + 58, params_795_sf13); |
338 print_speech_params(d_bits + 95, params_795_sf24); | 365 print_speech_params(d_bits + 95, params_795_sf24); |
339 print_speech_params(d_bits + 130, params_795_sf13); | 366 print_speech_params(d_bits + 130, params_795_sf13); |
340 print_speech_params(d_bits + 167, params_795_sf24); | 367 print_speech_params(d_bits + 167, params_795_sf24); |
368 check_spare_bits(d_bits, 31, "D1..D31"); | |
369 check_spare_bits(d_bits + 202, 256 - 202, "D203..D256"); | |
341 } | 370 } |
342 | 371 |
343 static void | 372 static void |
344 decode_mode_6(c_bits, d_bits) | 373 decode_mode_6(c_bits, d_bits) |
345 ubit_t *c_bits, *d_bits; | 374 ubit_t *c_bits, *d_bits; |
378 print_speech_params(d_bits + 20, params_lsf_59_67_74_102); | 407 print_speech_params(d_bits + 20, params_lsf_59_67_74_102); |
379 print_speech_params(d_bits + 46, params_102_sf13); | 408 print_speech_params(d_bits + 46, params_102_sf13); |
380 print_speech_params(d_bits + 95, params_102_sf24); | 409 print_speech_params(d_bits + 95, params_102_sf24); |
381 print_speech_params(d_bits + 141, params_102_sf13); | 410 print_speech_params(d_bits + 141, params_102_sf13); |
382 print_speech_params(d_bits + 190, params_102_sf24); | 411 print_speech_params(d_bits + 190, params_102_sf24); |
412 check_spare_bits(d_bits, 20, "D1..D20"); | |
413 check_spare_bits(d_bits + 233, 20, "D234..D253"); | |
383 } | 414 } |
384 | 415 |
385 static void | 416 static void |
386 decode_mode_7(c_bits, d_bits) | 417 decode_mode_7(c_bits, d_bits) |
387 ubit_t *c_bits, *d_bits; | 418 ubit_t *c_bits, *d_bits; |
478 saved_mode_valid = 1; | 509 saved_mode_valid = 1; |
479 } | 510 } |
480 fputs(" SID", stdout); | 511 fputs(" SID", stdout); |
481 print_generic_params(d_bits + 57, params_sid); | 512 print_generic_params(d_bits + 57, params_sid); |
482 putchar('\n'); | 513 putchar('\n'); |
514 check_spare_bits(d_bits, 31, "D1..D31"); | |
515 check_spare_bits(d_bits + 43, 14, "D44..D57"); | |
516 check_spare_bits(d_bits + 95, 256 - 95, "D96..D256"); | |
483 } | 517 } |
484 | 518 |
485 void | 519 void |
486 print_amr_frame(frame_bits) | 520 print_amr_frame(frame_bits) |
487 uint8_t *frame_bits; | 521 uint8_t *frame_bits; |