FreeCalypso > hg > gsm-net-reveng
diff 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 |
line wrap: on
line diff
--- a/trau-decode/parse-amr.c Wed Mar 05 02:26:11 2025 +0000 +++ b/trau-decode/parse-amr.c Wed Mar 05 02:56:24 2025 +0000 @@ -111,6 +111,23 @@ } static void +check_spare_bits(bits, nbits, desc) + ubit_t *bits; + unsigned nbits; + char *desc; +{ + while (nbits) { + if (*bits == 0) + break; + bits++; + nbits--; + } + if (!nbits) + return; + printf(" Extra data in bits %s\n", desc); +} + +static void decode_mode_0(c_bits, d_bits) ubit_t *c_bits, *d_bits; { @@ -142,6 +159,8 @@ print_speech_params(d_bits + 95, params_475_sf24); print_speech_params(d_bits + 111, params_475_sf3); print_speech_params(d_bits + 135, params_475_sf24); + check_spare_bits(d_bits, 44, "D1..D44"); + check_spare_bits(d_bits + 151, 256 - 151, "D152..D256"); } static void @@ -179,6 +198,8 @@ print_speech_params(d_bits + 95, params_515_sf234); print_speech_params(d_bits + 117, params_515_sf234); print_speech_params(d_bits + 139, params_515_sf234); + check_spare_bits(d_bits, 46, "D1..D46"); + check_spare_bits(d_bits + 161, 256 - 161, "D162..D256"); } static void @@ -216,6 +237,8 @@ print_speech_params(d_bits + 95, params_59_sf24); print_speech_params(d_bits + 119, params_59_sf13); print_speech_params(d_bits + 147, params_59_sf24); + check_spare_bits(d_bits, 41, "D1..D41"); + check_spare_bits(d_bits + 171, 256 - 171, "D172..D256"); } static void @@ -255,6 +278,8 @@ print_speech_params(d_bits + 95, params_67_sf24); print_speech_params(d_bits + 123, params_67_sf13); print_speech_params(d_bits + 155, params_67_sf24); + check_spare_bits(d_bits, 37, "D1..D37"); + check_spare_bits(d_bits + 183, 256 - 183, "D184..D256"); } static void @@ -297,6 +322,8 @@ print_speech_params(d_bits + 95, params_74_sf24); print_speech_params(d_bits + 127, params_74_sf13); print_speech_params(d_bits + 162, params_74_sf24); + check_spare_bits(d_bits, 34, "D1..D34"); + check_spare_bits(d_bits + 194, 256 - 194, "D195..D256"); } static void @@ -338,6 +365,8 @@ print_speech_params(d_bits + 95, params_795_sf24); print_speech_params(d_bits + 130, params_795_sf13); print_speech_params(d_bits + 167, params_795_sf24); + check_spare_bits(d_bits, 31, "D1..D31"); + check_spare_bits(d_bits + 202, 256 - 202, "D203..D256"); } static void @@ -380,6 +409,8 @@ print_speech_params(d_bits + 95, params_102_sf24); print_speech_params(d_bits + 141, params_102_sf13); print_speech_params(d_bits + 190, params_102_sf24); + check_spare_bits(d_bits, 20, "D1..D20"); + check_spare_bits(d_bits + 233, 20, "D234..D253"); } static void @@ -480,6 +511,9 @@ fputs(" SID", stdout); print_generic_params(d_bits + 57, params_sid); putchar('\n'); + check_spare_bits(d_bits, 31, "D1..D31"); + check_spare_bits(d_bits + 43, 14, "D44..D57"); + check_spare_bits(d_bits + 95, 256 - 95, "D96..D256"); } void