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;