FreeCalypso > hg > gsm-net-reveng
changeset 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 |
files | trau-decode/parse-amr.c |
diffstat | 1 files changed, 99 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/trau-decode/parse-amr.c Wed Mar 05 00:40:43 2025 +0000 +++ b/trau-decode/parse-amr.c Wed Mar 05 02:03:48 2025 +0000 @@ -33,6 +33,40 @@ "Sid_Bad", "Sid_Update", "Onset", "Sid_First" }; +static const uint8_t params_lsf_475_515[] = {8, 8, 7, 0}; +static const uint8_t params_lsf_59_67_74_102[] = {8, 9, 9, 0}; +static const uint8_t params_lsf_795[] = {9, 9, 9, 0}; +static const uint8_t params_lsf_122[] = {7, 8, 9, 8, 6, 0}; + +static const uint8_t params_475_sf1[] = {8, 7, 2, 8, 0}; +static const uint8_t params_475_sf3[] = {4, 7, 2, 8, 0}; +static const uint8_t params_475_sf24[] = {4, 7, 2, 0}; + +static const uint8_t params_515_sf1[] = {8, 7, 2, 6, 0}; +static const uint8_t params_515_sf234[] = {4, 7, 2, 6, 0}; + +static const uint8_t params_59_sf13[] = {8, 9, 2, 6, 0}; +static const uint8_t params_59_sf24[] = {4, 9, 2, 6, 0}; + +static const uint8_t params_67_sf13[] = {8, 11, 3, 7, 0}; +static const uint8_t params_67_sf24[] = {4, 11, 3, 7, 0}; + +static const uint8_t params_74_sf13[] = {8, 13, 4, 7, 0}; +static const uint8_t params_74_sf24[] = {5, 13, 4, 7, 0}; + +static const uint8_t params_795_sf13[] = {8, 13, 4, 4, 5, 0}; +static const uint8_t params_795_sf24[] = {6, 13, 4, 4, 5, 0}; + +static const uint8_t params_102_sf13[] = {8, 1, 1, 1, 1, 10, 10, 7, 7, 0}; +static const uint8_t params_102_sf24[] = {5, 1, 1, 1, 1, 10, 10, 7, 7, 0}; + +static const uint8_t params_122_sf13[] = + {9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0}; +static const uint8_t params_122_sf24[] = + {6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, 0}; + +static const uint8_t params_sid[] = {3, 8, 9, 9, 6, 0}; + static unsigned bits_to_num(bits, nbits) ubit_t *bits; @@ -52,6 +86,31 @@ } static void +print_generic_params(bits, ltab) + ubit_t *bits; + uint8_t *ltab; +{ + uint8_t *tp; + unsigned n, p; + + for (tp = ltab; n = *tp; tp++) { + p = bits_to_num(bits, n); + bits += n; + printf(" %u", p); + } +} + +static void +print_speech_params(bits, ltab) + ubit_t *bits; + uint8_t *ltab; +{ + fputs(" ", stdout); + print_generic_params(bits, ltab); + putchar('\n'); +} + +static void decode_mode_0(c_bits, d_bits) ubit_t *c_bits, *d_bits; { @@ -78,6 +137,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 44, params_lsf_475_515); + print_speech_params(d_bits + 67, params_475_sf1); + 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); } static void @@ -110,6 +174,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 46, params_lsf_475_515); + print_speech_params(d_bits + 69, params_515_sf1); + 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); } static void @@ -142,6 +211,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 41, params_lsf_59_67_74_102); + print_speech_params(d_bits + 67, params_59_sf13); + 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); } static void @@ -176,6 +250,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 37, params_lsf_59_67_74_102); + print_speech_params(d_bits + 63, params_67_sf13); + 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); } static void @@ -213,6 +292,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 34, params_lsf_59_67_74_102); + print_speech_params(d_bits + 60, params_74_sf13); + 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); } static void @@ -249,6 +333,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 31, params_lsf_795); + print_speech_params(d_bits + 58, params_795_sf13); + 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); } static void @@ -286,6 +375,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits + 20, params_lsf_59_67_74_102); + print_speech_params(d_bits + 46, params_102_sf13); + 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); } static void @@ -319,6 +413,11 @@ crc3 ? "bad" : "good", crc4 ? "bad" : "good"); if (crc1) saved_mode_valid = 0; + print_speech_params(d_bits, params_lsf_122); + print_speech_params(d_bits + 38, params_122_sf13); + print_speech_params(d_bits + 94, params_122_sf24); + print_speech_params(d_bits + 147, params_122_sf13); + print_speech_params(d_bits + 203, params_122_sf24); } static void (*per_mode_decode[8])() = {