Git init
[external/opencore-amr.git] / opencore / codecs_v2 / audio / gsm_amr / amr_nb / common / src / bitreorder_tab.cpp
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /****************************************************************************************
19 Portions of this file are derived from the following 3GPP standard:
20
21     3GPP TS 26.073
22     ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23     Available from http://www.3gpp.org
24
25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26 Permission to distribute, modify and use this file under the standard license
27 terms listed above has been obtained from the copyright holder.
28 ****************************************************************************************/
29 /*
30
31  Filename: bitreorder_tab.cpp
32
33 ------------------------------------------------------------------------------
34  INPUT AND OUTPUT DEFINITIONS
35
36  Inputs:
37     None
38
39  Local Stores/Buffers/Pointers Needed:
40     None
41
42  Global Stores/Buffers/Pointers Needed:
43     None
44
45  Outputs:
46     None
47
48  Pointers and Buffers Modified:
49     None
50
51  Local Stores Modified:
52     None
53
54  Global Stores Modified:
55     None
56
57 ------------------------------------------------------------------------------
58  FUNCTION DESCRIPTION
59
60  This function contains tables needed to reformat the encoded speech bits
61  into IF2, WMF, and ETS.
62
63 ------------------------------------------------------------------------------
64  REQUIREMENTS
65
66  None
67
68 ------------------------------------------------------------------------------
69  REFERENCES
70
71  AMR Speech Codec Frame Structure,
72  3GPP TS 26.101 version 4.1.0 Release 4, June 2001
73
74 ------------------------------------------------------------------------------
75  PSEUDO-CODE
76
77
78 ------------------------------------------------------------------------------
79 */
80
81
82 /*----------------------------------------------------------------------------
83 ; INCLUDES
84 ----------------------------------------------------------------------------*/
85 #include "bitreorder_tab.h"
86
87 /*--------------------------------------------------------------------------*/
88 #ifdef __cplusplus
89 extern "C"
90 {
91 #endif
92
93     /*----------------------------------------------------------------------------
94     ; MACROS
95     ; Define module specific macros here
96     ----------------------------------------------------------------------------*/
97
98
99     /*----------------------------------------------------------------------------
100     ; DEFINES
101     ; Include all pre-processor statements here. Include conditional
102     ; compile variables also.
103     ----------------------------------------------------------------------------*/
104 #define NUM_MODES           16
105 #define NUMBIT_MR475        95
106 #define NUMBIT_MR515       103
107 #define NUMBIT_MR59        118
108 #define NUMBIT_MR67        134
109 #define NUMBIT_MR74        148
110 #define NUMBIT_MR795       159
111 #define NUMBIT_MR102       204
112 #define NUMBIT_MR122       244
113 #define NUMBIT_AMR_SID      39
114 #define NUMBIT_GSMEFR_SID   43
115 #define NUMBIT_TDMAEFR_SID  38
116 #define NUMBIT_PDCEFR_SID   37
117 #define NUMBIT_UNUSED1       0
118 #define NUMBIT_UNUSED2       0
119 #define NUMBIT_UNUSED3       0
120 #define NUMBIT_NO_DATA       0
121
122 #define MAX_NUM_BITS       244
123     /*----------------------------------------------------------------------------
124     ; LOCAL FUNCTION DEFINITIONS
125     ; Function Prototype declaration
126     ----------------------------------------------------------------------------*/
127
128
129     /*----------------------------------------------------------------------------
130     ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
131     ; Variable declaration - defined here and used outside this module
132     ----------------------------------------------------------------------------*/
133     /* number of parameters per modes (values must be <= MAX_PRM_SIZE!) */
134     const Word16 numOfBits[NUM_MODES] =
135     {
136         NUMBIT_MR475,
137         NUMBIT_MR515,
138         NUMBIT_MR59,
139         NUMBIT_MR67,
140         NUMBIT_MR74,
141         NUMBIT_MR795,
142         NUMBIT_MR102,
143         NUMBIT_MR122,
144         NUMBIT_AMR_SID,
145         NUMBIT_GSMEFR_SID,
146         NUMBIT_TDMAEFR_SID,
147         NUMBIT_PDCEFR_SID,
148         NUMBIT_UNUSED1,
149         NUMBIT_UNUSED2,
150         NUMBIT_UNUSED3,
151         NUMBIT_NO_DATA
152     };
153
154     const Word16 reorderBits_MR475[NUMBIT_MR475] =
155     {
156         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
157         10, 11, 12, 13, 14, 15, 23, 24, 25, 26,
158         27, 28, 48, 49, 61, 62, 82, 83, 47, 46,
159         45, 44, 81, 80, 79, 78, 17, 18, 20, 22,
160         77, 76, 75, 74, 29, 30, 43, 42, 41, 40,
161         38, 39, 16, 19, 21, 50, 51, 59, 60, 63,
162         64, 72, 73, 84, 85, 93, 94, 32, 33, 35,
163         36, 53, 54, 56, 57, 66, 67, 69, 70, 87,
164         88, 90, 91, 34, 55, 68, 89, 37, 58, 71,
165         92, 31, 52, 65, 86
166     };
167
168     const Word16 reorderBits_MR515[NUMBIT_MR515] =
169     {
170         7,  6,  5,  4,  3,  2,  1,  0, 15, 14,
171         13, 12, 11, 10,  9,  8, 23, 24, 25, 26,
172         27, 46, 65, 84, 45, 44, 43, 64, 63, 62,
173         83, 82, 81, 102, 101, 100, 42, 61, 80, 99,
174         28, 47, 66, 85, 18, 41, 60, 79, 98, 29,
175         48, 67, 17, 20, 22, 40, 59, 78, 97, 21,
176         30, 49, 68, 86, 19, 16, 87, 39, 38, 58,
177         57, 77, 35, 54, 73, 92, 76, 96, 95, 36,
178         55, 74, 93, 32, 51, 33, 52, 70, 71, 89,
179         90, 31, 50, 69, 88, 37, 56, 75, 94, 34,
180         53, 72, 91
181     };
182
183     const Word16 reorderBits_MR59[NUMBIT_MR59] =
184     {
185         0,  1,  4,  5,  3,  6,  7,  2, 13, 15,
186         8,  9, 11, 12, 14, 10, 16, 28, 74, 29,
187         75, 27, 73, 26, 72, 30, 76, 51, 97, 50,
188         71, 96, 117, 31, 77, 52, 98, 49, 70, 95,
189         116, 53, 99, 32, 78, 33, 79, 48, 69, 94,
190         115, 47, 68, 93, 114, 46, 67, 92, 113, 19,
191         21, 23, 22, 18, 17, 20, 24, 111, 43, 89,
192         110, 64, 65, 44, 90, 25, 45, 66, 91, 112,
193         54, 100, 40, 61, 86, 107, 39, 60, 85, 106,
194         36, 57, 82, 103, 35, 56, 81, 102, 34, 55,
195         80, 101, 42, 63, 88, 109, 41, 62, 87, 108,
196         38, 59, 84, 105, 37, 58, 83, 104
197     };
198
199     const Word16 reorderBits_MR67[NUMBIT_MR67] =
200     {
201         0,  1,  4,  3,  5,  6, 13,  7,  2,  8,
202         9, 11, 15, 12, 14, 10, 28, 82, 29, 83,
203         27, 81, 26, 80, 30, 84, 16, 55, 109, 56,
204         110, 31, 85, 57, 111, 48, 73, 102, 127, 32,
205         86, 51, 76, 105, 130, 52, 77, 106, 131, 58,
206         112, 33, 87, 19, 23, 53, 78, 107, 132, 21,
207         22, 18, 17, 20, 24, 25, 50, 75, 104, 129,
208         47, 72, 101, 126, 54, 79, 108, 133, 46, 71,
209         100, 125, 128, 103, 74, 49, 45, 70, 99, 124,
210         42, 67, 96, 121, 39, 64, 93, 118, 38, 63,
211         92, 117, 35, 60, 89, 114, 34, 59, 88, 113,
212         44, 69, 98, 123, 43, 68, 97, 122, 41, 66,
213         95, 120, 40, 65, 94, 119, 37, 62, 91, 116,
214         36, 61, 90, 115
215     };
216
217     const Word16 reorderBits_MR74[NUMBIT_MR74] =
218     {
219         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
220         10, 11, 12, 13, 14, 15, 16, 26, 87, 27,
221         88, 28, 89, 29, 90, 30, 91, 51, 80, 112,
222         141, 52, 81, 113, 142, 54, 83, 115, 144, 55,
223         84, 116, 145, 58, 119, 59, 120, 21, 22, 23,
224         17, 18, 19, 31, 60, 92, 121, 56, 85, 117,
225         146, 20, 24, 25, 50, 79, 111, 140, 57, 86,
226         118, 147, 49, 78, 110, 139, 48, 77, 53, 82,
227         114, 143, 109, 138, 47, 76, 108, 137, 32, 33,
228         61, 62, 93, 94, 122, 123, 41, 42, 43, 44,
229         45, 46, 70, 71, 72, 73, 74, 75, 102, 103,
230         104, 105, 106, 107, 131, 132, 133, 134, 135, 136,
231         34, 63, 95, 124, 35, 64, 96, 125, 36, 65,
232         97, 126, 37, 66, 98, 127, 38, 67, 99, 128,
233         39, 68, 100, 129, 40, 69, 101, 130
234     };
235
236     const Word16 reorderBits_MR795[NUMBIT_MR795] =
237     {
238         8,  7,  6,  5,  4,  3,  2, 14, 16,  9,
239         10, 12, 13, 15, 11, 17, 20, 22, 24, 23,
240         19, 18, 21, 56, 88, 122, 154, 57, 89, 123,
241         155, 58, 90, 124, 156, 52, 84, 118, 150, 53,
242         85, 119, 151, 27, 93, 28, 94, 29, 95, 30,
243         96, 31, 97, 61, 127, 62, 128, 63, 129, 59,
244         91, 125, 157, 32, 98, 64, 130,  1,  0, 25,
245         26, 33, 99, 34, 100, 65, 131, 66, 132, 54,
246         86, 120, 152, 60, 92, 126, 158, 55, 87, 121,
247         153, 117, 116, 115, 46, 78, 112, 144, 43, 75,
248         109, 141, 40, 72, 106, 138, 36, 68, 102, 134,
249         114, 149, 148, 147, 146, 83, 82, 81, 80, 51,
250         50, 49, 48, 47, 45, 44, 42, 39, 35, 79,
251         77, 76, 74, 71, 67, 113, 111, 110, 108, 105,
252         101, 145, 143, 142, 140, 137, 133, 41, 73, 107,
253         139, 37, 69, 103, 135, 38, 70, 104, 136
254     };
255
256     const Word16 reorderBits_MR102[NUMBIT_MR102] =
257     {
258         7,  6,  5,  4,  3,  2,  1,  0, 16, 15,
259         14, 13, 12, 11, 10,  9,  8, 26, 27, 28,
260         29, 30, 31, 115, 116, 117, 118, 119, 120, 72,
261         73, 161, 162, 65, 68, 69, 108, 111, 112, 154,
262         157, 158, 197, 200, 201, 32, 33, 121, 122, 74,
263         75, 163, 164, 66, 109, 155, 198, 19, 23, 21,
264         22, 18, 17, 20, 24, 25, 37, 36, 35, 34,
265         80, 79, 78, 77, 126, 125, 124, 123, 169, 168,
266         167, 166, 70, 67, 71, 113, 110, 114, 159, 156,
267         160, 202, 199, 203, 76, 165, 81, 82, 92, 91,
268         93, 83, 95, 85, 84, 94, 101, 102, 96, 104,
269         86, 103, 87, 97, 127, 128, 138, 137, 139, 129,
270         141, 131, 130, 140, 147, 148, 142, 150, 132, 149,
271         133, 143, 170, 171, 181, 180, 182, 172, 184, 174,
272         173, 183, 190, 191, 185, 193, 175, 192, 176, 186,
273         38, 39, 49, 48, 50, 40, 52, 42, 41, 51,
274         58, 59, 53, 61, 43, 60, 44, 54, 194, 179,
275         189, 196, 177, 195, 178, 187, 188, 151, 136, 146,
276         153, 134, 152, 135, 144, 145, 105, 90, 100, 107,
277         88, 106, 89, 98, 99, 62, 47, 57, 64, 45,
278         63, 46, 55, 56
279     };
280
281     const Word16 reorderBits_MR122[NUMBIT_MR122] =
282     {
283         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
284         10, 11, 12, 13, 14, 23, 15, 16, 17, 18,
285         19, 20, 21, 22, 24, 25, 26, 27, 28, 38,
286         141, 39, 142, 40, 143, 41, 144, 42, 145, 43,
287         146, 44, 147, 45, 148, 46, 149, 47, 97, 150,
288         200, 48, 98, 151, 201, 49, 99, 152, 202, 86,
289         136, 189, 239, 87, 137, 190, 240, 88, 138, 191,
290         241, 91, 194, 92, 195, 93, 196, 94, 197, 95,
291         198, 29, 30, 31, 32, 33, 34, 35, 50, 100,
292         153, 203, 89, 139, 192, 242, 51, 101, 154, 204,
293         55, 105, 158, 208, 90, 140, 193, 243, 59, 109,
294         162, 212, 63, 113, 166, 216, 67, 117, 170, 220,
295         36, 37, 54, 53, 52, 58, 57, 56, 62, 61,
296         60, 66, 65, 64, 70, 69, 68, 104, 103, 102,
297         108, 107, 106, 112, 111, 110, 116, 115, 114, 120,
298         119, 118, 157, 156, 155, 161, 160, 159, 165, 164,
299         163, 169, 168, 167, 173, 172, 171, 207, 206, 205,
300         211, 210, 209, 215, 214, 213, 219, 218, 217, 223,
301         222, 221, 73, 72, 71, 76, 75, 74, 79, 78,
302         77, 82, 81, 80, 85, 84, 83, 123, 122, 121,
303         126, 125, 124, 129, 128, 127, 132, 131, 130, 135,
304         134, 133, 176, 175, 174, 179, 178, 177, 182, 181,
305         180, 185, 184, 183, 188, 187, 186, 226, 225, 224,
306         229, 228, 227, 232, 231, 230, 235, 234, 233, 238,
307         237, 236, 96, 199
308     };
309
310     /* overall table with all parameter sizes for all modes */
311     const Word16 * const reorderBits[NUM_MODES-1] =
312     {
313         reorderBits_MR475,
314         reorderBits_MR515,
315         reorderBits_MR59,
316         reorderBits_MR67,
317         reorderBits_MR74,
318         reorderBits_MR795,
319         reorderBits_MR102,
320         reorderBits_MR122
321     };
322
323     /* Number of Frames (16-bit segments sent for each mode */
324     const Word16 numCompressedBytes[16] =
325     {
326         13, /*4.75*/
327         14, /*5.15*/
328         16, /*5.90*/
329         18, /*6.70*/
330         19, /*7.40*/
331         21, /*7.95*/
332         26, /*10.2*/
333         31, /*12.2*/
334         6, /*GsmAmr comfort noise*/
335         6, /*Gsm-Efr comfort noise*/
336         6, /*IS-641 comfort noise*/
337         6, /*Pdc-Efr comfort noise*/
338         0, /*future use*/
339         0, /*future use*/
340         0, /*future use*/
341         1  /*No transmission*/
342     };
343     /*----------------------------------------------------------------------------
344     ; EXTERNAL FUNCTION REFERENCES
345     ; Declare functions defined elsewhere and referenced in this module
346     ----------------------------------------------------------------------------*/
347
348
349     /*----------------------------------------------------------------------------
350     ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
351     ; Declare variables used in this module but defined elsewhere
352     ----------------------------------------------------------------------------*/
353
354     /*--------------------------------------------------------------------------*/
355 #ifdef __cplusplus
356 }
357 #endif
358
359
360 /*----------------------------------------------------------------------------
361 ; FUNCTION CODE
362 ----------------------------------------------------------------------------*/
363
364 /*----------------------------------------------------------------------------
365 ; Define all local variables
366 ----------------------------------------------------------------------------*/
367
368
369 /*----------------------------------------------------------------------------
370 ; Function body here
371 ----------------------------------------------------------------------------*/
372
373
374 /*----------------------------------------------------------------------------
375 ; Return nothing or data or data pointer
376 ----------------------------------------------------------------------------*/
377
378
379
380
381