blob: e5b9bd49f8b490054662618cbc2d3229651f1119 [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 */
36uint16_t gsm690_12_2_bitorder[244] = {
37 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 */
68uint16_t gsm690_10_2_bitorder[204] = {
69 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 */
96uint16_t gsm690_7_95_bitorder[159] = {
97 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 */
119uint16_t gsm690_7_4_bitorder[148] = {
120 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 */
141uint16_t gsm690_6_7_bitorder[134] = {
142 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 */
162uint16_t gsm690_5_9_bitorder[118] = {
163 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 */
181uint16_t gsm690_5_15_bitorder[103] = {
182 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 */
199uint16_t gsm690_4_75_bitorder[95] = {
200 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};