Home | History | Annotate | Download | only in src
      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  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
    129 extern "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