blob: fdf3302fe23d0b974015b303f9e3af53dcace0ca [file] [log] [blame]
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +02001/* GSM 06.90 - GSM AMR Codec */
2
3/*
4 * (C) 2010 Sylvain Munaut <tnt@246tNt.com>
5 *
6 * All Rights Reserved
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 */
23
24#include <stdint.h>
25
26/*
27 * These table map between the raw encoder parameter output and
28 * the format used before channel coding. Both in GSM and in various
29 * file/network format (same tables used in several specs).
30 */
31
32/* AMR 12.2 kbits - subjective importance bit ordering */
33 /* This array encodes GSM 05.03 Table 7
34 * It's also TS 26.101 Table B.8
35 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -070036const uint16_t gsm690_12_2_bitorder[244] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +020037 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
38 10, 11, 12, 13, 14, 23, 15, 16, 17, 18,
39 19, 20, 21, 22, 24, 25, 26, 27, 28, 38,
40 141, 39, 142, 40, 143, 41, 144, 42, 145, 43,
41 146, 44, 147, 45, 148, 46, 149, 47, 97, 150,
42 200, 48, 98, 151, 201, 49, 99, 152, 202, 86,
43 136, 189, 239, 87, 137, 190, 240, 88, 138, 191,
44 241, 91, 194, 92, 195, 93, 196, 94, 197, 95,
45 198, 29, 30, 31, 32, 33, 34, 35, 50, 100,
46 153, 203, 89, 139, 192, 242, 51, 101, 154, 204,
47 55, 105, 158, 208, 90, 140, 193, 243, 59, 109,
48 162, 212, 63, 113, 166, 216, 67, 117, 170, 220,
49 36, 37, 54, 53, 52, 58, 57, 56, 62, 61,
50 60, 66, 65, 64, 70, 69, 68, 104, 103, 102,
51 108, 107, 106, 112, 111, 110, 116, 115, 114, 120,
52 119, 118, 157, 156, 155, 161, 160, 159, 165, 164,
53 163, 169, 168, 167, 173, 172, 171, 207, 206, 205,
54 211, 210, 209, 215, 214, 213, 219, 218, 217, 223,
55 222, 221, 73, 72, 71, 76, 75, 74, 79, 78,
56 77, 82, 81, 80, 85, 84, 83, 123, 122, 121,
57 126, 125, 124, 129, 128, 127, 132, 131, 130, 135,
58 134, 133, 176, 175, 174, 179, 178, 177, 182, 181,
59 180, 185, 184, 183, 188, 187, 186, 226, 225, 224,
60 229, 228, 227, 232, 231, 230, 235, 234, 233, 238,
61 237, 236, 96, 199,
62};
63
64/* AMR 10.2 kbits - subjective importance bit ordering */
65 /* This array encodes GSM 05.03 Table 8
66 * It's also TS 26.101 Table B.7
67 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -070068const uint16_t gsm690_10_2_bitorder[204] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +020069 7, 6, 5, 4, 3, 2, 1, 0, 16, 15,
70 14, 13, 12, 11, 10, 9, 8, 26, 27, 28,
71 29, 30, 31, 115, 116, 117, 118, 119, 120, 72,
72 73, 161, 162, 65, 68, 69, 108, 111, 112, 154,
73 157, 158, 197, 200, 201, 32, 33, 121, 122, 74,
74 75, 163, 164, 66, 109, 155, 198, 19, 23, 21,
75 22, 18, 17, 20, 24, 25, 37, 36, 35, 34,
76 80, 79, 78, 77, 126, 125, 124, 123, 169, 168,
77 167, 166, 70, 67, 71, 113, 110, 114, 159, 156,
78 160, 202, 199, 203, 76, 165, 81, 82, 92, 91,
79 93, 83, 95, 85, 84, 94, 101, 102, 96, 104,
80 86, 103, 87, 97, 127, 128, 138, 137, 139, 129,
81 141, 131, 130, 140, 147, 148, 142, 150, 132, 149,
82 133, 143, 170, 171, 181, 180, 182, 172, 184, 174,
83 173, 183, 190, 191, 185, 193, 175, 192, 176, 186,
84 38, 39, 49, 48, 50, 40, 52, 42, 41, 51,
85 58, 59, 53, 61, 43, 60, 44, 54, 194, 179,
86 189, 196, 177, 195, 178, 187, 188, 151, 136, 146,
87 153, 134, 152, 135, 144, 145, 105, 90, 100, 107,
88 88, 106, 89, 98, 99, 62, 47, 57, 64, 45,
89 63, 46, 55, 56,
90};
91
92/* AMR 7.95 kbits - subjective importance bit ordering */
93 /* This array encodes GSM 05.03 Table 9
94 * It's also TS 26.101 Table B.6
95 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -070096const uint16_t gsm690_7_95_bitorder[159] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +020097 8, 7, 6, 5, 4, 3, 2, 14, 16, 9,
98 10, 12, 13, 15, 11, 17, 20, 22, 24, 23,
99 19, 18, 21, 56, 88, 122, 154, 57, 89, 123,
100 155, 58, 90, 124, 156, 52, 84, 118, 150, 53,
101 85, 119, 151, 27, 93, 28, 94, 29, 95, 30,
102 96, 31, 97, 61, 127, 62, 128, 63, 129, 59,
103 91, 125, 157, 32, 98, 64, 130, 1, 0, 25,
104 26, 33, 99, 34, 100, 65, 131, 66, 132, 54,
105 86, 120, 152, 60, 92, 126, 158, 55, 87, 121,
106 153, 117, 116, 115, 46, 78, 112, 144, 43, 75,
107 109, 141, 40, 72, 106, 138, 36, 68, 102, 134,
108 114, 149, 148, 147, 146, 83, 82, 81, 80, 51,
109 50, 49, 48, 47, 45, 44, 42, 39, 35, 79,
110 77, 76, 74, 71, 67, 113, 111, 110, 108, 105,
111 101, 145, 143, 142, 140, 137, 133, 41, 73, 107,
112 139, 37, 69, 103, 135, 38, 70, 104, 136,
113};
114
115/* AMR 7.4 kbits - subjective importance bit ordering */
116 /* This array encodes GSM 05.03 Table 10
117 * It's also TS 26.101 Table B.5
118 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -0700119const uint16_t gsm690_7_4_bitorder[148] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200120 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
121 10, 11, 12, 13, 14, 15, 16, 26, 87, 27,
122 88, 28, 89, 29, 90, 30, 91, 51, 80, 112,
123 141, 52, 81, 113, 142, 54, 83, 115, 144, 55,
124 84, 116, 145, 58, 119, 59, 120, 21, 22, 23,
125 17, 18, 19, 31, 60, 92, 121, 56, 85, 117,
126 146, 20, 24, 25, 50, 79, 111, 140, 57, 86,
127 118, 147, 49, 78, 110, 139, 48, 77, 53, 82,
128 114, 143, 109, 138, 47, 76, 108, 137, 32, 33,
129 61, 62, 93, 94, 122, 123, 41, 42, 43, 44,
130 45, 46, 70, 71, 72, 73, 74, 75, 102, 103,
131 104, 105, 106, 107, 131, 132, 133, 134, 135, 136,
132 34, 63, 95, 124, 35, 64, 96, 125, 36, 65,
133 97, 126, 37, 66, 98, 127, 38, 67, 99, 128,
134 39, 68, 100, 129, 40, 69, 101, 130,
135};
136
137/* AMR 6.7 kbits - subjective importance bit ordering */
138 /* This array encodes GSM 05.03 Table 11
139 * It's also TS 26.101 Table B.4
140 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -0700141const uint16_t gsm690_6_7_bitorder[134] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200142 0, 1, 4, 3, 5, 6, 13, 7, 2, 8,
143 9, 11, 15, 12, 14, 10, 28, 82, 29, 83,
144 27, 81, 26, 80, 30, 84, 16, 55, 109, 56,
145 110, 31, 85, 57, 111, 48, 73, 102, 127, 32,
146 86, 51, 76, 105, 130, 52, 77, 106, 131, 58,
147 112, 33, 87, 19, 23, 53, 78, 107, 132, 21,
148 22, 18, 17, 20, 24, 25, 50, 75, 104, 129,
149 47, 72, 101, 126, 54, 79, 108, 133, 46, 71,
150 100, 125, 128, 103, 74, 49, 45, 70, 99, 124,
151 42, 67, 96, 121, 39, 64, 93, 118, 38, 63,
152 92, 117, 35, 60, 89, 114, 34, 59, 88, 113,
153 44, 69, 98, 123, 43, 68, 97, 122, 41, 66,
154 95, 120, 40, 65, 94, 119, 37, 62, 91, 116,
155 36, 61, 90, 115,
156};
157
158/* AMR 5.9 kbits - subjective importance bit ordering */
159 /* This array encodes GSM 05.03 Table 12
160 * It's also TS 26.101 Table B.3
161 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -0700162const uint16_t gsm690_5_9_bitorder[118] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200163 0, 1, 4, 5, 3, 6, 7, 2, 13, 15,
164 8, 9, 11, 12, 14, 10, 16, 28, 74, 29,
165 75, 27, 73, 26, 72, 30, 76, 51, 97, 50,
166 71, 96, 117, 31, 77, 52, 98, 49, 70, 95,
167 116, 53, 99, 32, 78, 33, 79, 48, 69, 94,
168 115, 47, 68, 93, 114, 46, 67, 92, 113, 19,
169 21, 23, 22, 18, 17, 20, 24, 111, 43, 89,
170 110, 64, 65, 44, 90, 25, 45, 66, 91, 112,
171 54, 100, 40, 61, 86, 107, 39, 60, 85, 106,
172 36, 57, 82, 103, 35, 56, 81, 102, 34, 55,
173 80, 101, 42, 63, 88, 109, 41, 62, 87, 108,
174 38, 59, 84, 105, 37, 58, 83, 104,
175};
176
177/* AMR 5.15 kbits - subjective importance bit ordering */
178 /* This array encodes GSM 05.03 Table 13
179 * It's also TS 26.101 Table B.2
180 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -0700181const uint16_t gsm690_5_15_bitorder[103] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200182 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
183 13, 12, 11, 10, 9, 8, 23, 24, 25, 26,
184 27, 46, 65, 84, 45, 44, 43, 64, 63, 62,
185 83, 82, 81, 102, 101, 100, 42, 61, 80, 99,
186 28, 47, 66, 85, 18, 41, 60, 79, 98, 29,
187 48, 67, 17, 20, 22, 40, 59, 78, 97, 21,
188 30, 49, 68, 86, 19, 16, 87, 39, 38, 58,
189 57, 77, 35, 54, 73, 92, 76, 96, 95, 36,
190 55, 74, 93, 32, 51, 33, 52, 70, 71, 89,
191 90, 31, 50, 69, 88, 37, 56, 75, 94, 34,
192 53, 72, 91,
193};
194
195/* AMR 4.75 kbits - subjective importance bit ordering */
196 /* This array encodes GSM 05.03 Table 14
197 * It's also TS 26.101 Table B.1
198 */
Diego Elio Pettenò23431c72012-06-29 13:01:27 -0700199const uint16_t gsm690_4_75_bitorder[95] = {
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200200 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
201 10, 11, 12, 13, 14, 15, 23, 24, 25, 26,
202 27, 28, 48, 49, 61, 62, 82, 83, 47, 46,
203 45, 44, 81, 80, 79, 78, 17, 18, 20, 22,
204 77, 76, 75, 74, 29, 30, 43, 42, 41, 40,
205 38, 39, 16, 19, 21, 50, 51, 59, 60, 63,
206 64, 72, 73, 84, 85, 93, 94, 32, 33, 35,
207 36, 53, 54, 56, 57, 66, 67, 69, 70, 87,
208 88, 90, 91, 34, 55, 68, 89, 37, 58, 71,
209 92, 31, 52, 65, 86,
210};