FreeCalypso > hg > gsm-net-reveng
annotate trau-decode/amr8-common.c @ 112:bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 22 Dec 2025 06:46:40 +0000 |
| parents | b3ebfbeee32b |
| children | 0d81ce87dea5 |
| rev | line source |
|---|---|
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
2 * Here we implement parsing/decoding of TRAU-AMR-8k frames per 3GPP TS 48.061, |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
3 * striving to decode and display as much as we can. |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdint.h> |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
8 #include <stdbool.h> |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdlib.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <string.h> |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <strings.h> |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
12 #include "osmo_bits.h" |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
13 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
14 /* |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
15 * AMR TRAU parity (same as EFR) |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
16 * |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
17 * g(x) = x^3 + x^1 + 1 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
18 */ |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
19 static const struct osmo_crc8gen_code gsm0860_amr_crc3 = { |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
20 .bits = 3, |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
21 .poly = 0x3, |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
22 .init = 0x0, |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
23 .remainder = 0x7, |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
24 }; |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
25 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
26 static int saved_mode, saved_mode_valid; |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
27 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
28 static char *fclass_names[4] = { |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
29 "No_Speech", "Speech_Bad", "Speech_Degraded", "Speech_Good" |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
30 }; |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
31 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
32 static char *nospch_class_names[8] = { |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
33 "No_Data", "invalid", "invalid", "invalid", |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
34 "Sid_Bad", "Sid_Update", "Onset", "Sid_First" |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
35 }; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
37 static const uint8_t params_lsf_475_515[] = {8, 8, 7, 0}; |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
38 static const uint8_t params_lsf_59_67_74[] = {8, 9, 9, 0}; |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
39 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
40 static const uint8_t params_475_sf1[] = {8, 7, 2, 8, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
41 static const uint8_t params_475_sf3[] = {4, 7, 2, 8, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
42 static const uint8_t params_475_sf24[] = {4, 7, 2, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
43 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
44 static const uint8_t params_515_sf1[] = {8, 7, 2, 6, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
45 static const uint8_t params_515_sf234[] = {4, 7, 2, 6, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
46 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
47 static const uint8_t params_59_sf13[] = {8, 9, 2, 6, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
48 static const uint8_t params_59_sf24[] = {4, 9, 2, 6, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
49 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
50 static const uint8_t params_67_sf13[] = {8, 11, 3, 7, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
51 static const uint8_t params_67_sf24[] = {4, 11, 3, 7, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
52 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
53 static const uint8_t params_74_sf13[] = {8, 13, 4, 7, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
54 static const uint8_t params_74_sf24[] = {5, 13, 4, 7, 0}; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
55 |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
56 static const uint8_t params_sid[] = {3, 8, 9, 9, 6, 0}; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
57 |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
58 static const ubit_t bit8_0[8] = { 0, }; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
59 |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
60 /*!< check sync pattern for AMR No_Speech + low bit rate */ |
|
106
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
105
diff
changeset
|
61 bool is_amr_low(const ubit_t *bits) |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
62 { |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
63 int i; |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
64 |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
65 /* TS 08.61 Section 6.8.2.1.2 */ |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
66 if (memcmp(bits, bit8_0, sizeof(bit8_0))) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
67 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
68 if (bits[8] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
69 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
70 if (bits[16] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
71 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
72 if (bits[24] != 0 || bits[25] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
73 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
74 for (i = 32; i < 20 * 8; i += 8) { |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
75 if (bits[i] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
76 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
77 } |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
78 return true; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
79 } |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
80 |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
81 /*!< check sync pattern for AMR 6.7kBit/s */ |
|
106
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
105
diff
changeset
|
82 bool is_amr_67(const ubit_t *bits) |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
83 { |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
84 int i; |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
85 |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
86 /* TS 08.61 Section 6.8.2.1.3 */ |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
87 if (memcmp(bits, bit8_0, sizeof(bit8_0))) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
88 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
89 if (bits[8] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
90 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
91 if (bits[16] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
92 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
93 if (bits[24] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
94 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
95 if (bits[32] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
96 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
97 if (bits[40] != 0) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
98 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
99 for (i = 48; i < 20 * 8; i += 16) { |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
100 if (bits[i] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
101 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
102 } |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
103 return true; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
104 } |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
105 |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
106 /*!< check sync pattern for AMR 7.4kBit/s */ |
|
106
028307356ba9
trau-decode: new program trau-amr8-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
105
diff
changeset
|
107 bool is_amr_74(const ubit_t *bits) |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
108 { |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
109 if (bits[0] != 0 || bits[1] != 0 || bits[2] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
110 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
111 if (bits[8] != 0) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
112 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
113 if (bits[16] != 1) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
114 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
115 if (bits[24] != 0) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
116 return false; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
117 |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
118 return true; |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
119 } |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
120 |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 static unsigned |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 bits_to_num(bits, nbits) |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
123 ubit_t *bits; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 unsigned nbits; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 unsigned accum; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 unsigned n; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 accum = 0; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 for (n = 0; n < nbits; n++) { |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 accum <<= 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 if (*bits) |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 accum |= 1; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 bits++; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 return accum; |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 } |
|
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
139 static void |
|
91
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
140 print_generic_params(bits, ltab) |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
141 ubit_t *bits; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
142 uint8_t *ltab; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
143 { |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
144 uint8_t *tp; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
145 unsigned n, p; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
146 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
147 for (tp = ltab; n = *tp; tp++) { |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
148 p = bits_to_num(bits, n); |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
149 bits += n; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
150 printf(" %u", p); |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
151 } |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
152 } |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
153 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
154 static void |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
155 print_speech_params(bits, ltab) |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
156 ubit_t *bits; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
157 uint8_t *ltab; |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
158 { |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
159 fputs(" ", stdout); |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
160 print_generic_params(bits, ltab); |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
161 putchar('\n'); |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
162 } |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
163 |
|
bbb28d5447f9
trau-parse AMR: extract and print speech parameters
Mychaela Falconia <falcon@freecalypso.org>
parents:
90
diff
changeset
|
164 static void |
|
93
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
165 check_spare_bits(bits, nbits, desc) |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
166 ubit_t *bits; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
167 unsigned nbits; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
168 char *desc; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
169 { |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
170 while (nbits) { |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
171 if (*bits == 0) |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
172 break; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
173 bits++; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
174 nbits--; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
175 } |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
176 if (!nbits) |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
177 return; |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
178 printf(" Extra data in bits %s\n", desc); |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
179 } |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
180 |
|
fa80ce9b076c
trau-parse AMR: check spare bits and report not-all-1s
Mychaela Falconia <falcon@freecalypso.org>
parents:
92
diff
changeset
|
181 static void |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
182 decode_mode_0(c_bits, d_bits) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
183 ubit_t *c_bits, *d_bits; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
184 { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
185 ubit_t crc_collect[36]; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
186 int crc1, crc2, crc3, crc4; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
187 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
188 bcopy(c_bits, crc_collect, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
189 bcopy(d_bits + 3, crc_collect + 5, 16); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
190 bcopy(d_bits + 20, crc_collect + 21, 2); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
191 bcopy(d_bits + 23, crc_collect + 23, 9); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
192 bcopy(d_bits + 47, crc_collect + 32, 4); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
193 crc1 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 36, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
194 d_bits + 51); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
195 crc2 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, d_bits + 54, 7, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
196 d_bits + 72); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
197 bcopy(d_bits + 75, crc_collect, 2); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
198 bcopy(d_bits + 92, crc_collect + 2, 4); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
199 crc3 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 6, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
200 d_bits + 96); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
201 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, d_bits + 99, 2, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
202 d_bits + 112); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
203 printf(" CRC %s %s %s %s\n", |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
204 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
205 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
206 if (crc1) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
207 saved_mode_valid = 0; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
208 print_speech_params(d_bits + 3, params_lsf_475_515); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
209 print_speech_params(d_bits + 26, params_475_sf1); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
210 print_speech_params(d_bits + 59, params_475_sf24); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
211 print_speech_params(d_bits + 75, params_475_sf3); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
212 print_speech_params(d_bits + 99, params_475_sf24); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
213 check_spare_bits(d_bits, 3, "D1..D3"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
214 check_spare_bits(d_bits + 115, 126 - 115, "D116..D126"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
215 } |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
216 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
217 static void |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
218 decode_mode_1(c_bits, d_bits) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
219 ubit_t *c_bits, *d_bits; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
220 { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
221 ubit_t crc_collect[37]; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
222 int crc1, crc2, crc3, crc4; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
223 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
224 bcopy(c_bits, crc_collect, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
225 bcopy(d_bits + 5, crc_collect + 5, 16); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
226 bcopy(d_bits + 23, crc_collect + 21, 11); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
227 bcopy(d_bits + 46, crc_collect + 32, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
228 crc1 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 37, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
229 d_bits + 51); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
230 bcopy(d_bits + 54, crc_collect, 7); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
231 bcopy(d_bits + 73, crc_collect + 7, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
232 crc2 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 12, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
233 d_bits + 78); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
234 bcopy(d_bits + 81, crc_collect, 2); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
235 bcopy(d_bits + 95, crc_collect + 2, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
236 crc3 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
237 d_bits + 100); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
238 bcopy(d_bits + 103, crc_collect, 2); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
239 bcopy(d_bits + 117, crc_collect + 2, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
240 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
241 d_bits + 122); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
242 printf(" CRC %s %s %s %s\n", |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
243 crc1 ? "bad" : "good", crc2 ? "bad" : "good", |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
244 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
245 if (crc1) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
246 saved_mode_valid = 0; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
247 print_speech_params(d_bits + 5, params_lsf_475_515); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
248 print_speech_params(d_bits + 28, params_515_sf1); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
249 print_speech_params(d_bits + 59, params_515_sf234); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
250 print_speech_params(d_bits + 81, params_515_sf234); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
251 print_speech_params(d_bits + 103, params_515_sf234); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
252 check_spare_bits(d_bits, 5, "D1..D5"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
253 if (!d_bits[125]) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
254 puts(" Bit D126 is 0 (expected 1)"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
255 } |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
256 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
257 static void |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
258 decode_mode_2(c_bits, d_bits) |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
259 ubit_t *c_bits, *d_bits; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
260 { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
261 ubit_t crc_collect[34]; |
|
104
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
262 int crc_stat; |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
263 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
264 bcopy(c_bits, crc_collect, 5); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
265 bcopy(d_bits, crc_collect + 5, 17); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
266 bcopy(d_bits + 26, crc_collect + 22, 8); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
267 bcopy(d_bits + 47, crc_collect + 30, 4); |
|
104
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
268 crc_stat = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 34, |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
269 d_bits + 51); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
270 printf(" CRC %s\n", crc_stat ? "bad" : "good"); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
271 if (crc_stat) |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
272 saved_mode_valid = 0; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
273 print_speech_params(d_bits, params_lsf_59_67_74); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
274 print_speech_params(d_bits + 26, params_59_sf13); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
275 print_speech_params(d_bits + 59, params_59_sf24); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
276 print_speech_params(d_bits + 80, params_59_sf13); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
277 print_speech_params(d_bits + 105, params_59_sf24); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
278 } |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
279 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
280 static void (*per_mode_decode[3])() = { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
281 decode_mode_0, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
282 decode_mode_1, |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
283 decode_mode_2 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
284 }; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
285 |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
286 static void |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
287 decode_speech_frame(c_bits, d_bits) |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
288 ubit_t *c_bits, *d_bits; |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
289 { |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
290 unsigned c1_3 = bits_to_num(c_bits, 3); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
291 unsigned rif = (c1_3 >= 3); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
292 unsigned c4_5 = bits_to_num(c_bits + 3, 2); |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
293 unsigned mode; |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
294 |
|
104
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
295 printf(" Speech: RIF=%u FC=%s\n", rif, fclass_names[c4_5]); |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
296 if (rif) { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
297 printf(" CMR=%u\n", c1_3 - 3); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
298 if (!saved_mode_valid) { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
299 puts(" Mode unknown, cannot decode"); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
300 return; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
301 } |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
302 mode = saved_mode; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
303 saved_mode_valid = 0; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
304 } else { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
305 mode = c1_3; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
306 saved_mode = mode; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
307 saved_mode_valid = 1; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
308 } |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
309 printf(" Decoding per speech mode %u\n", mode); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
310 per_mode_decode[mode](c_bits, d_bits); |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
311 } |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
312 |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
313 static void |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
314 decode_nospeech_frame(c_bits, d_bits) |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
315 ubit_t *c_bits, *d_bits; |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
316 { |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
317 ubit_t crc_collect[5 + 51]; |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
318 unsigned cmi, cmr; |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
319 int crc_stat; |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
320 |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
321 printf(" No_Speech: RIF=%u TA=%u UFE/DFE=%u\n", c_bits[2], |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
322 bits_to_num(d_bits, 6), d_bits[6]); |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
323 cmi = bits_to_num(d_bits + 10, 3); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
324 cmr = bits_to_num(d_bits + 13, 3); |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
325 printf(" No_Spch_Class=%u%u%u (%s) CMI=%u CMR=%u\n", |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
326 d_bits[7], d_bits[8], d_bits[9], |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
327 nospch_class_names[bits_to_num(d_bits + 7, 3)], cmi, cmr); |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
328 if (cmi <= 2) { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
329 saved_mode = cmi; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
330 saved_mode_valid = 1; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
331 } else { |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
332 saved_mode_valid = 0; |
|
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
333 } |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
334 bcopy(c_bits, crc_collect, 5); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
335 bcopy(d_bits, crc_collect + 5, 51); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
336 crc_stat = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
337 5 + 51, d_bits + 51); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
338 printf(" CRC %s\n", crc_stat ? "bad" : "good"); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
339 fputs(" SID", stdout); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
340 print_generic_params(d_bits + 16, params_sid); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
341 putchar('\n'); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
342 printf(" PAB=%u TAE=%u%u DTXd=%u TFOE=%u\n", d_bits[59], d_bits[60], |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
343 d_bits[61], d_bits[62], d_bits[63]); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
344 check_spare_bits(d_bits + 64, 61, "D65..D125"); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
345 } |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
346 |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
347 static void |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
348 handle_amr8_low(frame_bits) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
349 ubit_t *frame_bits; |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
350 { |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
351 ubit_t *c_bits = frame_bits + 17; |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
352 ubit_t d_bits[126]; |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
353 |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
354 bcopy(frame_bits + 9, d_bits, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
355 bcopy(frame_bits + 22, d_bits + 7, 2); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
356 bcopy(frame_bits + 26, d_bits + 9, 6); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
357 bcopy(frame_bits + 33, d_bits + 15, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
358 bcopy(frame_bits + 41, d_bits + 22, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
359 bcopy(frame_bits + 49, d_bits + 29, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
360 bcopy(frame_bits + 57, d_bits + 36, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
361 bcopy(frame_bits + 65, d_bits + 43, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
362 bcopy(frame_bits + 73, d_bits + 50, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
363 bcopy(frame_bits + 81, d_bits + 57, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
364 bcopy(frame_bits + 89, d_bits + 64, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
365 bcopy(frame_bits + 97, d_bits + 71, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
366 bcopy(frame_bits + 105, d_bits + 78, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
367 bcopy(frame_bits + 113, d_bits + 85, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
368 bcopy(frame_bits + 121, d_bits + 92, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
369 bcopy(frame_bits + 129, d_bits + 99, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
370 bcopy(frame_bits + 137, d_bits + 106, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
371 bcopy(frame_bits + 145, d_bits + 113, 7); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
372 bcopy(frame_bits + 153, d_bits + 120, 6); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
373 |
|
111
b3ebfbeee32b
trau-decode AMR8 common: identify frames as AMR
Mychaela Falconia <falcon@freecalypso.org>
parents:
106
diff
changeset
|
374 printf(" AMR C1-C5: %u%u%u %u%u\n", c_bits[0], c_bits[1], c_bits[2], |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
375 c_bits[3], c_bits[4]); |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
376 printf(" Config_Prot=%u%u%u Msg_No=%u%u\n", d_bits[54], d_bits[55], |
|
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
377 d_bits[56], d_bits[57], d_bits[58]); |
|
112
bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
Mychaela Falconia <falcon@freecalypso.org>
parents:
111
diff
changeset
|
378 if (c_bits[3] || c_bits[4]) { |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
379 decode_speech_frame(c_bits, d_bits); |
|
112
bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
Mychaela Falconia <falcon@freecalypso.org>
parents:
111
diff
changeset
|
380 printf(" T=%u\n", frame_bits[159]); |
|
bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
Mychaela Falconia <falcon@freecalypso.org>
parents:
111
diff
changeset
|
381 } else { |
|
102
b59a61446c34
TRAU-AMR-8k: implement No_Speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
101
diff
changeset
|
382 decode_nospeech_frame(c_bits, d_bits); |
|
112
bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
Mychaela Falconia <falcon@freecalypso.org>
parents:
111
diff
changeset
|
383 printf(" D126=%u T=%u\n", frame_bits[158], frame_bits[159]); |
|
bf038fdde8da
trau-decode AMR8 common: print D126+T for No_Speech
Mychaela Falconia <falcon@freecalypso.org>
parents:
111
diff
changeset
|
384 } |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
385 } |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
386 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
387 static void |
|
104
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
388 decode_6k7_7k4_common(c_bits, d_bits, mode, cmr_offset) |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
389 ubit_t *c_bits, *d_bits; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
390 char *mode; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
391 { |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
392 unsigned c1_3 = bits_to_num(c_bits, 3); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
393 unsigned rif, fc, cmr_code; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
394 |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
395 printf(" %s speech, C1-C3: %u%u%u\n", mode, c_bits[0], c_bits[1], |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
396 c_bits[2]); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
397 switch (c1_3) { |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
398 case 0: |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
399 rif = 0; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
400 fc = 1; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
401 break; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
402 case 1: |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
403 rif = 0; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
404 fc = 3; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
405 break; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
406 case 2: |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
407 rif = 1; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
408 fc = 1; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
409 cmr_code = bits_to_num(d_bits + cmr_offset, 3); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
410 break; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
411 default: |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
412 rif = 1; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
413 fc = 3; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
414 cmr_code = c1_3; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
415 } |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
416 printf(" RIF=%u FC=%s\n", rif, fclass_names[fc]); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
417 if (rif) { |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
418 if (cmr_code >= 3) |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
419 printf(" CMR=%u\n", cmr_code - 3); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
420 else |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
421 puts(" CMR code in data bits is invalid"); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
422 } |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
423 } |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
424 |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
425 static void |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
426 handle_amr8_6k7(frame_bits) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
427 ubit_t *frame_bits; |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
428 { |
|
104
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
429 ubit_t *c_bits = frame_bits + 17; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
430 ubit_t d_bits[137], crc_collect[35]; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
431 int crc_stat; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
432 |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
433 bcopy(frame_bits + 9, d_bits, 7); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
434 bcopy(frame_bits + 20, d_bits + 7, 4); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
435 bcopy(frame_bits + 25, d_bits + 11, 7); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
436 bcopy(frame_bits + 33, d_bits + 18, 7); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
437 bcopy(frame_bits + 41, d_bits + 25, 7); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
438 bcopy(frame_bits + 49, d_bits + 32, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
439 bcopy(frame_bits + 65, d_bits + 47, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
440 bcopy(frame_bits + 81, d_bits + 62, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
441 bcopy(frame_bits + 97, d_bits + 77, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
442 bcopy(frame_bits + 113, d_bits + 92, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
443 bcopy(frame_bits + 129, d_bits + 107, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
444 bcopy(frame_bits + 145, d_bits + 122, 15); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
445 |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
446 decode_6k7_7k4_common(c_bits, d_bits, "MR67", 0); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
447 bcopy(c_bits, crc_collect, 3); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
448 bcopy(d_bits, crc_collect + 3, 17); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
449 crc_collect[20] = d_bits[19]; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
450 crc_collect[21] = d_bits[23]; |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
451 bcopy(d_bits + 26, crc_collect + 22, 8); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
452 bcopy(d_bits + 48, crc_collect + 30, 5); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
453 crc_stat = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 35, |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
454 d_bits + 55); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
455 printf(" CRC %s\n", crc_stat ? "bad" : "good"); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
456 print_speech_params(d_bits, params_lsf_59_67_74); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
457 print_speech_params(d_bits + 26, params_67_sf13); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
458 print_speech_params(d_bits + 58, params_67_sf24); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
459 print_speech_params(d_bits + 83, params_67_sf13); |
|
9cc76853d291
TRAU-AMR-8k: implement MR67 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
103
diff
changeset
|
460 print_speech_params(d_bits + 112, params_67_sf24); |
|
105
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
461 |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
462 saved_mode_valid = 0; |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
463 } |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
464 |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
465 static void |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
466 handle_amr8_7k4(frame_bits) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
467 ubit_t *frame_bits; |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
468 { |
|
105
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
469 ubit_t *c_bits = frame_bits + 17; |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
470 ubit_t d_bits[151], crc_collect[37]; |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
471 int crc_stat; |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
472 |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
473 bcopy(frame_bits + 3, d_bits, 5); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
474 bcopy(frame_bits + 9, d_bits + 5, 7); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
475 bcopy(frame_bits + 20, d_bits + 12, 4); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
476 bcopy(frame_bits + 25, d_bits + 16, 135); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
477 |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
478 decode_6k7_7k4_common(c_bits, d_bits, "MR74", 5); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
479 bcopy(c_bits, crc_collect, 3); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
480 bcopy(d_bits, crc_collect + 3, 20); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
481 bcopy(d_bits + 21, crc_collect + 23, 3); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
482 bcopy(d_bits + 26, crc_collect + 26, 6); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
483 bcopy(d_bits + 51, crc_collect + 32, 2); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
484 bcopy(d_bits + 54, crc_collect + 34, 3); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
485 crc_stat = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 37, |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
486 d_bits + 58); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
487 printf(" CRC %s\n", crc_stat ? "bad" : "good"); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
488 print_speech_params(d_bits, params_lsf_59_67_74); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
489 print_speech_params(d_bits + 26, params_74_sf13); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
490 print_speech_params(d_bits + 61, params_74_sf24); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
491 print_speech_params(d_bits + 90, params_74_sf13); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
492 print_speech_params(d_bits + 122, params_74_sf24); |
|
699afc9ef063
TRAU-AMR-8k: implement MR74 speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
104
diff
changeset
|
493 |
|
103
4edffa52802d
TRAU-AMR-8k: implement low speech decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
102
diff
changeset
|
494 saved_mode_valid = 0; |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
495 } |
|
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
496 |
|
78
00fd38c7c8fe
trau-decode: factor out parse-amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
77
diff
changeset
|
497 void |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
498 print_amr8_frame(frame_bits) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
499 ubit_t *frame_bits; |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 { |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
501 if (is_amr_low(frame_bits)) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
502 handle_amr8_low(frame_bits); |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
503 else if (is_amr_67(frame_bits)) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
504 handle_amr8_6k7(frame_bits); |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
505 else if (is_amr_74(frame_bits)) |
|
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
506 handle_amr8_7k4(frame_bits); |
|
79
8c1f20e845a1
trau-parse: more thorough AMR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
78
diff
changeset
|
507 else |
|
101
625be4b2922f
trau-decode: start framework for TRAU-AMR-8k decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
93
diff
changeset
|
508 puts(" Unrecognized format by sync pattern"); |
|
0
131e0f1972bb
beginning of trau-parse program
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 } |
