bitreorder_tab.cpp revision 4f1efc098cb5791c3e9f483f2af84aef70d2d0a0
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/****************************************************************************************
19Portions 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)
26Permission to distribute, modify and use this file under the standard license
27terms listed above has been obtained from the copyright holder.
28****************************************************************************************/
29/*
30
31 Pathname: .audio/gsm-amr/c/src/bitreorder.c
32
33------------------------------------------------------------------------------
34 REVISION HISTORY
35
36 Description: Changed file name to bitreorder_tab.c and .h. Also, updated the
37              module description.
38
39 Description: Define "const Word16 *reorderBits[NUM_MODES-1]" as
40              "const Word16 *const reorderBits[NUM_MODES-1]".
41
42 Description: Added #ifdef __cplusplus and removed "extern" from table
43              definition. Removed corresponding header file from Include
44              section.
45
46 Description: Put "extern" back.
47
48 Who:                       Date:
49 Description:
50
51------------------------------------------------------------------------------
52 INPUT AND OUTPUT DEFINITIONS
53
54 Inputs:
55    None
56
57 Local Stores/Buffers/Pointers Needed:
58    None
59
60 Global Stores/Buffers/Pointers Needed:
61    None
62
63 Outputs:
64    None
65
66 Pointers and Buffers Modified:
67    None
68
69 Local Stores Modified:
70    None
71
72 Global Stores Modified:
73    None
74
75------------------------------------------------------------------------------
76 FUNCTION DESCRIPTION
77
78 This function contains tables needed to reformat the encoded speech bits
79 into IF2, WMF, and ETS.
80
81------------------------------------------------------------------------------
82 REQUIREMENTS
83
84 None
85
86------------------------------------------------------------------------------
87 REFERENCES
88
89 AMR Speech Codec Frame Structure,
90 3GPP TS 26.101 version 4.1.0 Release 4, June 2001
91
92------------------------------------------------------------------------------
93 PSEUDO-CODE
94
95
96------------------------------------------------------------------------------
97 RESOURCES USED
98   When the code is written for a specific target processor the
99     the resources used should be documented below.
100
101 STACK USAGE: [stack count for this module] + [variable to represent
102          stack usage for each subroutine called]
103
104     where: [stack usage variable] = stack usage for [subroutine
105         name] (see [filename].ext)
106
107 DATA MEMORY USED: x words
108
109 PROGRAM MEMORY USED: x words
110
111 CLOCK CYCLES: [cycle count equation for this module] + [variable
112           used to represent cycle count for each subroutine
113           called]
114
115     where: [cycle count variable] = cycle count for [subroutine
116        name] (see [filename].ext)
117
118------------------------------------------------------------------------------
119*/
120
121
122/*----------------------------------------------------------------------------
123; INCLUDES
124----------------------------------------------------------------------------*/
125#include "typedef.h"
126
127/*--------------------------------------------------------------------------*/
128#ifdef __cplusplus
129extern "C"
130{
131#endif
132
133    /*----------------------------------------------------------------------------
134    ; MACROS
135    ; Define module specific macros here
136    ----------------------------------------------------------------------------*/
137
138
139    /*----------------------------------------------------------------------------
140    ; DEFINES
141    ; Include all pre-processor statements here. Include conditional
142    ; compile variables also.
143    ----------------------------------------------------------------------------*/
144#define NUM_MODES           16
145#define NUMBIT_MR475        95
146#define NUMBIT_MR515       103
147#define NUMBIT_MR59        118
148#define NUMBIT_MR67        134
149#define NUMBIT_MR74        148
150#define NUMBIT_MR795       159
151#define NUMBIT_MR102       204
152#define NUMBIT_MR122       244
153#define NUMBIT_AMR_SID      39
154#define NUMBIT_GSMEFR_SID   43
155#define NUMBIT_TDMAEFR_SID  38
156#define NUMBIT_PDCEFR_SID   37
157#define NUMBIT_UNUSED1       0
158#define NUMBIT_UNUSED2       0
159#define NUMBIT_UNUSED3       0
160#define NUMBIT_NO_DATA       0
161
162#define MAX_NUM_BITS       244
163    /*----------------------------------------------------------------------------
164    ; LOCAL FUNCTION DEFINITIONS
165    ; Function Prototype declaration
166    ----------------------------------------------------------------------------*/
167
168
169    /*----------------------------------------------------------------------------
170    ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
171    ; Variable declaration - defined here and used outside this module
172    ----------------------------------------------------------------------------*/
173    /* number of parameters per modes (values must be <= MAX_PRM_SIZE!) */
174    extern const Word16 numOfBits[NUM_MODES] =
175    {
176        NUMBIT_MR475,
177        NUMBIT_MR515,
178        NUMBIT_MR59,
179        NUMBIT_MR67,
180        NUMBIT_MR74,
181        NUMBIT_MR795,
182        NUMBIT_MR102,
183        NUMBIT_MR122,
184        NUMBIT_AMR_SID,
185        NUMBIT_GSMEFR_SID,
186        NUMBIT_TDMAEFR_SID,
187        NUMBIT_PDCEFR_SID,
188        NUMBIT_UNUSED1,
189        NUMBIT_UNUSED2,
190        NUMBIT_UNUSED3,
191        NUMBIT_NO_DATA
192    };
193
194    extern const Word16 reorderBits_MR475[NUMBIT_MR475] =
195    {
196        0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
197        10, 11, 12, 13, 14, 15, 23, 24, 25, 26,
198        27, 28, 48, 49, 61, 62, 82, 83, 47, 46,
199        45, 44, 81, 80, 79, 78, 17, 18, 20, 22,
200        77, 76, 75, 74, 29, 30, 43, 42, 41, 40,
201        38, 39, 16, 19, 21, 50, 51, 59, 60, 63,
202        64, 72, 73, 84, 85, 93, 94, 32, 33, 35,
203        36, 53, 54, 56, 57, 66, 67, 69, 70, 87,
204        88, 90, 91, 34, 55, 68, 89, 37, 58, 71,
205        92, 31, 52, 65, 86
206    };
207
208    extern const Word16 reorderBits_MR515[NUMBIT_MR515] =
209    {
210        7,  6,  5,  4,  3,  2,  1,  0, 15, 14,
211        13, 12, 11, 10,  9,  8, 23, 24, 25, 26,
212        27, 46, 65, 84, 45, 44, 43, 64, 63, 62,
213        83, 82, 81, 102, 101, 100, 42, 61, 80, 99,
214        28, 47, 66, 85, 18, 41, 60, 79, 98, 29,
215        48, 67, 17, 20, 22, 40, 59, 78, 97, 21,
216        30, 49, 68, 86, 19, 16, 87, 39, 38, 58,
217        57, 77, 35, 54, 73, 92, 76, 96, 95, 36,
218        55, 74, 93, 32, 51, 33, 52, 70, 71, 89,
219        90, 31, 50, 69, 88, 37, 56, 75, 94, 34,
220        53, 72, 91
221    };
222
223    extern const Word16 reorderBits_MR59[NUMBIT_MR59] =
224    {
225        0,  1,  4,  5,  3,  6,  7,  2, 13, 15,
226        8,  9, 11, 12, 14, 10, 16, 28, 74, 29,
227        75, 27, 73, 26, 72, 30, 76, 51, 97, 50,
228        71, 96, 117, 31, 77, 52, 98, 49, 70, 95,
229        116, 53, 99, 32, 78, 33, 79, 48, 69, 94,
230        115, 47, 68, 93, 114, 46, 67, 92, 113, 19,
231        21, 23, 22, 18, 17, 20, 24, 111, 43, 89,
232        110, 64, 65, 44, 90, 25, 45, 66, 91, 112,
233        54, 100, 40, 61, 86, 107, 39, 60, 85, 106,
234        36, 57, 82, 103, 35, 56, 81, 102, 34, 55,
235        80, 101, 42, 63, 88, 109, 41, 62, 87, 108,
236        38, 59, 84, 105, 37, 58, 83, 104
237    };
238
239    extern const Word16 reorderBits_MR67[NUMBIT_MR67] =
240    {
241        0,  1,  4,  3,  5,  6, 13,  7,  2,  8,
242        9, 11, 15, 12, 14, 10, 28, 82, 29, 83,
243        27, 81, 26, 80, 30, 84, 16, 55, 109, 56,
244        110, 31, 85, 57, 111, 48, 73, 102, 127, 32,
245        86, 51, 76, 105, 130, 52, 77, 106, 131, 58,
246        112, 33, 87, 19, 23, 53, 78, 107, 132, 21,
247        22, 18, 17, 20, 24, 25, 50, 75, 104, 129,
248        47, 72, 101, 126, 54, 79, 108, 133, 46, 71,
249        100, 125, 128, 103, 74, 49, 45, 70, 99, 124,
250        42, 67, 96, 121, 39, 64, 93, 118, 38, 63,
251        92, 117, 35, 60, 89, 114, 34, 59, 88, 113,
252        44, 69, 98, 123, 43, 68, 97, 122, 41, 66,
253        95, 120, 40, 65, 94, 119, 37, 62, 91, 116,
254        36, 61, 90, 115
255    };
256
257    extern const Word16 reorderBits_MR74[NUMBIT_MR74] =
258    {
259        0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
260        10, 11, 12, 13, 14, 15, 16, 26, 87, 27,
261        88, 28, 89, 29, 90, 30, 91, 51, 80, 112,
262        141, 52, 81, 113, 142, 54, 83, 115, 144, 55,
263        84, 116, 145, 58, 119, 59, 120, 21, 22, 23,
264        17, 18, 19, 31, 60, 92, 121, 56, 85, 117,
265        146, 20, 24, 25, 50, 79, 111, 140, 57, 86,
266        118, 147, 49, 78, 110, 139, 48, 77, 53, 82,
267        114, 143, 109, 138, 47, 76, 108, 137, 32, 33,
268        61, 62, 93, 94, 122, 123, 41, 42, 43, 44,
269        45, 46, 70, 71, 72, 73, 74, 75, 102, 103,
270        104, 105, 106, 107, 131, 132, 133, 134, 135, 136,
271        34, 63, 95, 124, 35, 64, 96, 125, 36, 65,
272        97, 126, 37, 66, 98, 127, 38, 67, 99, 128,
273        39, 68, 100, 129, 40, 69, 101, 130
274    };
275
276    extern const Word16 reorderBits_MR795[NUMBIT_MR795] =
277    {
278        8,  7,  6,  5,  4,  3,  2, 14, 16,  9,
279        10, 12, 13, 15, 11, 17, 20, 22, 24, 23,
280        19, 18, 21, 56, 88, 122, 154, 57, 89, 123,
281        155, 58, 90, 124, 156, 52, 84, 118, 150, 53,
282        85, 119, 151, 27, 93, 28, 94, 29, 95, 30,
283        96, 31, 97, 61, 127, 62, 128, 63, 129, 59,
284        91, 125, 157, 32, 98, 64, 130,  1,  0, 25,
285        26, 33, 99, 34, 100, 65, 131, 66, 132, 54,
286        86, 120, 152, 60, 92, 126, 158, 55, 87, 121,
287        153, 117, 116, 115, 46, 78, 112, 144, 43, 75,
288        109, 141, 40, 72, 106, 138, 36, 68, 102, 134,
289        114, 149, 148, 147, 146, 83, 82, 81, 80, 51,
290        50, 49, 48, 47, 45, 44, 42, 39, 35, 79,
291        77, 76, 74, 71, 67, 113, 111, 110, 108, 105,
292        101, 145, 143, 142, 140, 137, 133, 41, 73, 107,
293        139, 37, 69, 103, 135, 38, 70, 104, 136
294    };
295
296    extern const Word16 reorderBits_MR102[NUMBIT_MR102] =
297    {
298        7,  6,  5,  4,  3,  2,  1,  0, 16, 15,
299        14, 13, 12, 11, 10,  9,  8, 26, 27, 28,
300        29, 30, 31, 115, 116, 117, 118, 119, 120, 72,
301        73, 161, 162, 65, 68, 69, 108, 111, 112, 154,
302        157, 158, 197, 200, 201, 32, 33, 121, 122, 74,
303        75, 163, 164, 66, 109, 155, 198, 19, 23, 21,
304        22, 18, 17, 20, 24, 25, 37, 36, 35, 34,
305        80, 79, 78, 77, 126, 125, 124, 123, 169, 168,
306        167, 166, 70, 67, 71, 113, 110, 114, 159, 156,
307        160, 202, 199, 203, 76, 165, 81, 82, 92, 91,
308        93, 83, 95, 85, 84, 94, 101, 102, 96, 104,
309        86, 103, 87, 97, 127, 128, 138, 137, 139, 129,
310        141, 131, 130, 140, 147, 148, 142, 150, 132, 149,
311        133, 143, 170, 171, 181, 180, 182, 172, 184, 174,
312        173, 183, 190, 191, 185, 193, 175, 192, 176, 186,
313        38, 39, 49, 48, 50, 40, 52, 42, 41, 51,
314        58, 59, 53, 61, 43, 60, 44, 54, 194, 179,
315        189, 196, 177, 195, 178, 187, 188, 151, 136, 146,
316        153, 134, 152, 135, 144, 145, 105, 90, 100, 107,
317        88, 106, 89, 98, 99, 62, 47, 57, 64, 45,
318        63, 46, 55, 56
319    };
320
321    extern const Word16 reorderBits_MR122[NUMBIT_MR122] =
322    {
323        0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
324        10, 11, 12, 13, 14, 23, 15, 16, 17, 18,
325        19, 20, 21, 22, 24, 25, 26, 27, 28, 38,
326        141, 39, 142, 40, 143, 41, 144, 42, 145, 43,
327        146, 44, 147, 45, 148, 46, 149, 47, 97, 150,
328        200, 48, 98, 151, 201, 49, 99, 152, 202, 86,
329        136, 189, 239, 87, 137, 190, 240, 88, 138, 191,
330        241, 91, 194, 92, 195, 93, 196, 94, 197, 95,
331        198, 29, 30, 31, 32, 33, 34, 35, 50, 100,
332        153, 203, 89, 139, 192, 242, 51, 101, 154, 204,
333        55, 105, 158, 208, 90, 140, 193, 243, 59, 109,
334        162, 212, 63, 113, 166, 216, 67, 117, 170, 220,
335        36, 37, 54, 53, 52, 58, 57, 56, 62, 61,
336        60, 66, 65, 64, 70, 69, 68, 104, 103, 102,
337        108, 107, 106, 112, 111, 110, 116, 115, 114, 120,
338        119, 118, 157, 156, 155, 161, 160, 159, 165, 164,
339        163, 169, 168, 167, 173, 172, 171, 207, 206, 205,
340        211, 210, 209, 215, 214, 213, 219, 218, 217, 223,
341        222, 221, 73, 72, 71, 76, 75, 74, 79, 78,
342        77, 82, 81, 80, 85, 84, 83, 123, 122, 121,
343        126, 125, 124, 129, 128, 127, 132, 131, 130, 135,
344        134, 133, 176, 175, 174, 179, 178, 177, 182, 181,
345        180, 185, 184, 183, 188, 187, 186, 226, 225, 224,
346        229, 228, 227, 232, 231, 230, 235, 234, 233, 238,
347        237, 236, 96, 199
348    };
349
350    /* overall table with all parameter sizes for all modes */
351    extern const Word16 * const reorderBits[NUM_MODES-1] =
352    {
353        reorderBits_MR475,
354        reorderBits_MR515,
355        reorderBits_MR59,
356        reorderBits_MR67,
357        reorderBits_MR74,
358        reorderBits_MR795,
359        reorderBits_MR102,
360        reorderBits_MR122
361    };
362
363    /* Number of Frames (16-bit segments sent for each mode */
364    extern const Word16 numCompressedBytes[16] =
365    {
366        13, /*4.75*/
367        14, /*5.15*/
368        16, /*5.90*/
369        18, /*6.70*/
370        19, /*7.40*/
371        21, /*7.95*/
372        26, /*10.2*/
373        31, /*12.2*/
374        6, /*GsmAmr comfort noise*/
375        6, /*Gsm-Efr comfort noise*/
376        6, /*IS-641 comfort noise*/
377        6, /*Pdc-Efr comfort noise*/
378        0, /*future use*/
379        0, /*future use*/
380        0, /*future use*/
381        1  /*No transmission*/
382    };
383    /*----------------------------------------------------------------------------
384    ; EXTERNAL FUNCTION REFERENCES
385    ; Declare functions defined elsewhere and referenced in this module
386    ----------------------------------------------------------------------------*/
387
388
389    /*----------------------------------------------------------------------------
390    ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
391    ; Declare variables used in this module but defined elsewhere
392    ----------------------------------------------------------------------------*/
393
394    /*--------------------------------------------------------------------------*/
395#ifdef __cplusplus
396}
397#endif
398
399
400/*----------------------------------------------------------------------------
401; FUNCTION CODE
402----------------------------------------------------------------------------*/
403
404/*----------------------------------------------------------------------------
405; Define all local variables
406----------------------------------------------------------------------------*/
407
408
409/*----------------------------------------------------------------------------
410; Function body here
411----------------------------------------------------------------------------*/
412
413
414/*----------------------------------------------------------------------------
415; Return nothing or data or data pointer
416----------------------------------------------------------------------------*/
417
418
419
420
421
422