sms: SMS where cropped (from VTY), concatenation of SMS where not possible
[osmocom-bb.git] / src / codec / gsm690.c
1 /* 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          */
36 uint16_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          */
68 uint16_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          */
96 uint16_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          */
119 uint16_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          */
141 uint16_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          */
162 uint16_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          */
181 uint16_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          */
199 uint16_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 };