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