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.173 22 ANSI-C code for the Adaptive Multi-Rate - Wideband (AMR-WB) speech codec 23 Available from http://www.3gpp.org 24 25 (C) 2007, 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 32 33 Pathname: ./src/mime_io.cpp 34 35 Date: 05/07/2007 36 37 ------------------------------------------------------------------------------ 38 REVISION HISTORY 39 40 41 Description: 42 43 ------------------------------------------------------------------------------ 44 INPUT AND OUTPUT DEFINITIONS 45 46 Inputs: 47 [input_variable_name] = [description of the input to module, its type 48 definition, and length (when applicable)] 49 50 Local Stores/Buffers/Pointers Needed: 51 [local_store_name] = [description of the local store, its type 52 definition, and length (when applicable)] 53 [local_buffer_name] = [description of the local buffer, its type 54 definition, and length (when applicable)] 55 [local_ptr_name] = [description of the local pointer, its type 56 definition, and length (when applicable)] 57 58 Global Stores/Buffers/Pointers Needed: 59 [global_store_name] = [description of the global store, its type 60 definition, and length (when applicable)] 61 [global_buffer_name] = [description of the global buffer, its type 62 definition, and length (when applicable)] 63 [global_ptr_name] = [description of the global pointer, its type 64 definition, and length (when applicable)] 65 66 Outputs: 67 [return_variable_name] = [description of data/pointer returned 68 by module, its type definition, and length 69 (when applicable)] 70 71 Pointers and Buffers Modified: 72 [variable_bfr_ptr] points to the [describe where the 73 variable_bfr_ptr points to, its type definition, and length 74 (when applicable)] 75 [variable_bfr] contents are [describe the new contents of 76 variable_bfr] 77 78 Local Stores Modified: 79 [local_store_name] = [describe new contents, its type 80 definition, and length (when applicable)] 81 82 Global Stores Modified: 83 [global_store_name] = [describe new contents, its type 84 definition, and length (when applicable)] 85 86 ------------------------------------------------------------------------------ 87 FUNCTION DESCRIPTION 88 89 [Describe what the module does by using the variable names 90 listed in the Input and Output Definitions Section above.] 91 92 ------------------------------------------------------------------------------ 93 REQUIREMENTS 94 95 [List requirements to be satisfied by this module.] 96 97 ------------------------------------------------------------------------------ 98 REFERENCES 99 100 [List all references used in designing this module.] 101 102 ------------------------------------------------------------------------------ 103 PSEUDO-CODE 104 105 ------------------------------------------------------------------------------ 106 RESOURCES USED 107 108 STACK USAGE: 109 110 DATA MEMORY USED: x words 111 112 PROGRAM MEMORY USED: x words 113 114 CLOCK CYCLES: 115 116 ------------------------------------------------------------------------------ 117 */ 118 119 120 /*---------------------------------------------------------------------------- 121 ; INCLUDES 122 ----------------------------------------------------------------------------*/ 123 124 #include "pv_amr_wb_type_defs.h" 125 #include "pvamrwbdecoder_api.h" 126 #include "pvamrwbdecoder.h" 127 #include "pvamrwbdecoder_mem_funcs.h" 128 #include "pvamrwbdecoder_cnst.h" 129 #include "dtx.h" 130 #include "mime_io.h" 131 132 /*---------------------------------------------------------------------------- 133 ; MACROS 134 ; Define module specific macros here 135 ----------------------------------------------------------------------------*/ 136 137 138 /*---------------------------------------------------------------------------- 139 ; DEFINES 140 ; Include all pre-processor statements here. Include conditional 141 ; compile variables also. 142 ----------------------------------------------------------------------------*/ 143 144 #define MRSID 9 145 146 /*---------------------------------------------------------------------------- 147 ; LOCAL FUNCTION DEFINITIONS 148 ; Function Prototype declaration 149 ----------------------------------------------------------------------------*/ 150 151 /*---------------------------------------------------------------------------- 152 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS 153 ; Variable declaration - defined here and used outside this module 154 ----------------------------------------------------------------------------*/ 155 156 const uint8 toc_byte[16] = {0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C, 157 0x44, 0x4C, 0x54, 0x5C, 0x64, 0x6C, 0x74, 0x7C 158 }; 159 160 /* number of speech bits for all modes */ 161 const int16 unpacked_size[16] = 162 { 163 132, 177, 253, 285, 164 317, 365, 397, 461, 165 477, 35, 0, 0, 166 0, 0, 0, 0 167 }; 168 169 /* size of packed frame for each mode, excluding TOC byte */ 170 const int16 packed_size[16] = {17, 23, 32, 36, 40, 46, 50, 58, 171 60, 5, 0, 0, 0, 0, 0, 0 172 }; 173 174 /* number of unused speech bits in packed format for each mode */ 175 const int16 unused_size[16] = {4, 7, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}; 176 177 /* sorting tables for all modes */ 178 179 const int16 sort_660[132] = 180 { 181 0, 5, 6, 7, 61, 84, 107, 130, 62, 85, 182 8, 4, 37, 38, 39, 40, 58, 81, 104, 127, 183 60, 83, 106, 129, 108, 131, 128, 41, 42, 80, 184 126, 1, 3, 57, 103, 82, 105, 59, 2, 63, 185 109, 110, 86, 19, 22, 23, 64, 87, 18, 20, 186 21, 17, 13, 88, 43, 89, 65, 111, 14, 24, 187 25, 26, 27, 28, 15, 16, 44, 90, 66, 112, 188 9, 11, 10, 12, 67, 113, 29, 30, 31, 32, 189 34, 33, 35, 36, 45, 51, 68, 74, 91, 97, 190 114, 120, 46, 69, 92, 115, 52, 75, 98, 121, 191 47, 70, 93, 116, 53, 76, 99, 122, 48, 71, 192 94, 117, 54, 77, 100, 123, 49, 72, 95, 118, 193 55, 78, 101, 124, 50, 73, 96, 119, 56, 79, 194 102, 125 195 }; 196 197 const int16 sort_885[177] = 198 { 199 0, 4, 6, 7, 5, 3, 47, 48, 49, 112, 200 113, 114, 75, 106, 140, 171, 80, 111, 145, 176, 201 77, 108, 142, 173, 78, 109, 143, 174, 79, 110, 202 144, 175, 76, 107, 141, 172, 50, 115, 51, 2, 203 1, 81, 116, 146, 19, 21, 12, 17, 18, 20, 204 16, 25, 13, 10, 14, 24, 23, 22, 26, 8, 205 15, 52, 117, 31, 82, 147, 9, 33, 11, 83, 206 148, 53, 118, 28, 27, 84, 149, 34, 35, 29, 207 46, 32, 30, 54, 119, 37, 36, 39, 38, 40, 208 85, 150, 41, 42, 43, 44, 45, 55, 60, 65, 209 70, 86, 91, 96, 101, 120, 125, 130, 135, 151, 210 156, 161, 166, 56, 87, 121, 152, 61, 92, 126, 211 157, 66, 97, 131, 162, 71, 102, 136, 167, 57, 212 88, 122, 153, 62, 93, 127, 158, 67, 98, 132, 213 163, 72, 103, 137, 168, 58, 89, 123, 154, 63, 214 94, 128, 159, 68, 99, 133, 164, 73, 104, 138, 215 169, 59, 90, 124, 155, 64, 95, 129, 160, 69, 216 100, 134, 165, 74, 105, 139, 170 217 }; 218 219 const int16 sort_1265[253] = 220 { 221 0, 4, 6, 93, 143, 196, 246, 7, 5, 3, 222 47, 48, 49, 50, 51, 150, 151, 152, 153, 154, 223 94, 144, 197, 247, 99, 149, 202, 252, 96, 146, 224 199, 249, 97, 147, 200, 250, 100, 203, 98, 148, 225 201, 251, 95, 145, 198, 248, 52, 2, 1, 101, 226 204, 155, 19, 21, 12, 17, 18, 20, 16, 25, 227 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 228 156, 31, 102, 205, 9, 33, 11, 103, 206, 54, 229 157, 28, 27, 104, 207, 34, 35, 29, 46, 32, 230 30, 55, 158, 37, 36, 39, 38, 40, 105, 208, 231 41, 42, 43, 44, 45, 56, 106, 159, 209, 57, 232 66, 75, 84, 107, 116, 125, 134, 160, 169, 178, 233 187, 210, 219, 228, 237, 58, 108, 161, 211, 62, 234 112, 165, 215, 67, 117, 170, 220, 71, 121, 174, 235 224, 76, 126, 179, 229, 80, 130, 183, 233, 85, 236 135, 188, 238, 89, 139, 192, 242, 59, 109, 162, 237 212, 63, 113, 166, 216, 68, 118, 171, 221, 72, 238 122, 175, 225, 77, 127, 180, 230, 81, 131, 184, 239 234, 86, 136, 189, 239, 90, 140, 193, 243, 60, 240 110, 163, 213, 64, 114, 167, 217, 69, 119, 172, 241 222, 73, 123, 176, 226, 78, 128, 181, 231, 82, 242 132, 185, 235, 87, 137, 190, 240, 91, 141, 194, 243 244, 61, 111, 164, 214, 65, 115, 168, 218, 70, 244 120, 173, 223, 74, 124, 177, 227, 79, 129, 182, 245 232, 83, 133, 186, 236, 88, 138, 191, 241, 92, 246 142, 195, 245 247 }; 248 249 const int16 sort_1425[285] = 250 { 251 0, 4, 6, 101, 159, 220, 278, 7, 5, 3, 252 47, 48, 49, 50, 51, 166, 167, 168, 169, 170, 253 102, 160, 221, 279, 107, 165, 226, 284, 104, 162, 254 223, 281, 105, 163, 224, 282, 108, 227, 106, 164, 255 225, 283, 103, 161, 222, 280, 52, 2, 1, 109, 256 228, 171, 19, 21, 12, 17, 18, 20, 16, 25, 257 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 258 172, 31, 110, 229, 9, 33, 11, 111, 230, 54, 259 173, 28, 27, 112, 231, 34, 35, 29, 46, 32, 260 30, 55, 174, 37, 36, 39, 38, 40, 113, 232, 261 41, 42, 43, 44, 45, 56, 114, 175, 233, 62, 262 120, 181, 239, 75, 133, 194, 252, 57, 115, 176, 263 234, 63, 121, 182, 240, 70, 128, 189, 247, 76, 264 134, 195, 253, 83, 141, 202, 260, 92, 150, 211, 265 269, 84, 142, 203, 261, 93, 151, 212, 270, 85, 266 143, 204, 262, 94, 152, 213, 271, 86, 144, 205, 267 263, 95, 153, 214, 272, 64, 122, 183, 241, 77, 268 135, 196, 254, 65, 123, 184, 242, 78, 136, 197, 269 255, 87, 145, 206, 264, 96, 154, 215, 273, 58, 270 116, 177, 235, 66, 124, 185, 243, 71, 129, 190, 271 248, 79, 137, 198, 256, 88, 146, 207, 265, 97, 272 155, 216, 274, 59, 117, 178, 236, 67, 125, 186, 273 244, 72, 130, 191, 249, 80, 138, 199, 257, 89, 274 147, 208, 266, 98, 156, 217, 275, 60, 118, 179, 275 237, 68, 126, 187, 245, 73, 131, 192, 250, 81, 276 139, 200, 258, 90, 148, 209, 267, 99, 157, 218, 277 276, 61, 119, 180, 238, 69, 127, 188, 246, 74, 278 132, 193, 251, 82, 140, 201, 259, 91, 149, 210, 279 268, 100, 158, 219, 277 280 }; 281 282 const int16 sort_1585[317] = 283 { 284 0, 4, 6, 109, 175, 244, 310, 7, 5, 3, 285 47, 48, 49, 50, 51, 182, 183, 184, 185, 186, 286 110, 176, 245, 311, 115, 181, 250, 316, 112, 178, 287 247, 313, 113, 179, 248, 314, 116, 251, 114, 180, 288 249, 315, 111, 177, 246, 312, 52, 2, 1, 117, 289 252, 187, 19, 21, 12, 17, 18, 20, 16, 25, 290 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 291 188, 31, 118, 253, 9, 33, 11, 119, 254, 54, 292 189, 28, 27, 120, 255, 34, 35, 29, 46, 32, 293 30, 55, 190, 37, 36, 39, 38, 40, 121, 256, 294 41, 42, 43, 44, 45, 56, 122, 191, 257, 63, 295 129, 198, 264, 76, 142, 211, 277, 89, 155, 224, 296 290, 102, 168, 237, 303, 57, 123, 192, 258, 70, 297 136, 205, 271, 83, 149, 218, 284, 96, 162, 231, 298 297, 62, 128, 197, 263, 75, 141, 210, 276, 88, 299 154, 223, 289, 101, 167, 236, 302, 58, 124, 193, 300 259, 71, 137, 206, 272, 84, 150, 219, 285, 97, 301 163, 232, 298, 59, 125, 194, 260, 64, 130, 199, 302 265, 67, 133, 202, 268, 72, 138, 207, 273, 77, 303 143, 212, 278, 80, 146, 215, 281, 85, 151, 220, 304 286, 90, 156, 225, 291, 93, 159, 228, 294, 98, 305 164, 233, 299, 103, 169, 238, 304, 106, 172, 241, 306 307, 60, 126, 195, 261, 65, 131, 200, 266, 68, 307 134, 203, 269, 73, 139, 208, 274, 78, 144, 213, 308 279, 81, 147, 216, 282, 86, 152, 221, 287, 91, 309 157, 226, 292, 94, 160, 229, 295, 99, 165, 234, 310 300, 104, 170, 239, 305, 107, 173, 242, 308, 61, 311 127, 196, 262, 66, 132, 201, 267, 69, 135, 204, 312 270, 74, 140, 209, 275, 79, 145, 214, 280, 82, 313 148, 217, 283, 87, 153, 222, 288, 92, 158, 227, 314 293, 95, 161, 230, 296, 100, 166, 235, 301, 105, 315 171, 240, 306, 108, 174, 243, 309 316 }; 317 318 const int16 sort_1825[365] = 319 { 320 0, 4, 6, 121, 199, 280, 358, 7, 5, 3, 321 47, 48, 49, 50, 51, 206, 207, 208, 209, 210, 322 122, 200, 281, 359, 127, 205, 286, 364, 124, 202, 323 283, 361, 125, 203, 284, 362, 128, 287, 126, 204, 324 285, 363, 123, 201, 282, 360, 52, 2, 1, 129, 325 288, 211, 19, 21, 12, 17, 18, 20, 16, 25, 326 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 327 212, 31, 130, 289, 9, 33, 11, 131, 290, 54, 328 213, 28, 27, 132, 291, 34, 35, 29, 46, 32, 329 30, 55, 214, 37, 36, 39, 38, 40, 133, 292, 330 41, 42, 43, 44, 45, 56, 134, 215, 293, 198, 331 299, 136, 120, 138, 60, 279, 58, 62, 357, 139, 332 140, 295, 156, 57, 219, 297, 63, 217, 137, 170, 333 300, 222, 64, 106, 61, 78, 294, 92, 142, 141, 334 135, 221, 296, 301, 343, 59, 298, 184, 329, 315, 335 220, 216, 265, 251, 218, 237, 352, 223, 157, 86, 336 171, 87, 164, 351, 111, 302, 65, 178, 115, 323, 337 72, 192, 101, 179, 93, 73, 193, 151, 337, 309, 338 143, 274, 69, 324, 165, 150, 97, 338, 110, 310, 339 330, 273, 68, 107, 175, 245, 114, 79, 113, 189, 340 246, 259, 174, 71, 185, 96, 344, 100, 322, 83, 341 334, 316, 333, 252, 161, 348, 147, 82, 269, 232, 342 260, 308, 353, 347, 163, 231, 306, 320, 188, 270, 343 146, 177, 266, 350, 256, 85, 149, 116, 191, 160, 344 238, 258, 336, 305, 255, 88, 224, 99, 339, 230, 345 228, 227, 272, 242, 241, 319, 233, 311, 102, 74, 346 180, 275, 66, 194, 152, 325, 172, 247, 244, 261, 347 117, 158, 166, 354, 75, 144, 108, 312, 94, 186, 348 303, 80, 234, 89, 195, 112, 340, 181, 345, 317, 349 326, 276, 239, 167, 118, 313, 70, 355, 327, 253, 350 190, 176, 271, 104, 98, 153, 103, 90, 76, 267, 351 277, 248, 225, 262, 182, 84, 154, 235, 335, 168, 352 331, 196, 341, 249, 162, 307, 148, 349, 263, 321, 353 257, 243, 229, 356, 159, 119, 67, 187, 173, 145, 354 240, 77, 304, 332, 314, 342, 109, 254, 81, 278, 355 105, 91, 346, 318, 183, 250, 197, 328, 95, 155, 356 169, 268, 226, 236, 264 357 }; 358 359 const int16 sort_1985[397] = 360 { 361 0, 4, 6, 129, 215, 304, 390, 7, 5, 3, 362 47, 48, 49, 50, 51, 222, 223, 224, 225, 226, 363 130, 216, 305, 391, 135, 221, 310, 396, 132, 218, 364 307, 393, 133, 219, 308, 394, 136, 311, 134, 220, 365 309, 395, 131, 217, 306, 392, 52, 2, 1, 137, 366 312, 227, 19, 21, 12, 17, 18, 20, 16, 25, 367 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 368 228, 31, 138, 313, 9, 33, 11, 139, 314, 54, 369 229, 28, 27, 140, 315, 34, 35, 29, 46, 32, 370 30, 55, 230, 37, 36, 39, 38, 40, 141, 316, 371 41, 42, 43, 44, 45, 56, 142, 231, 317, 63, 372 73, 92, 340, 82, 324, 149, 353, 159, 334, 165, 373 338, 178, 163, 254, 77, 168, 257, 153, 343, 57, 374 248, 238, 79, 252, 166, 67, 80, 201, 101, 267, 375 143, 164, 341, 255, 339, 187, 376, 318, 78, 328, 376 362, 115, 232, 242, 253, 290, 276, 62, 58, 158, 377 68, 93, 179, 319, 148, 169, 154, 72, 385, 329, 378 333, 344, 102, 83, 144, 233, 323, 124, 243, 192, 379 354, 237, 64, 247, 202, 209, 150, 116, 335, 268, 380 239, 299, 188, 196, 298, 94, 195, 258, 123, 363, 381 384, 109, 325, 371, 170, 370, 84, 110, 295, 180, 382 74, 210, 191, 106, 291, 205, 367, 381, 377, 206, 383 355, 122, 119, 120, 383, 160, 105, 108, 277, 380, 384 294, 284, 285, 345, 208, 269, 249, 366, 386, 300, 385 297, 259, 125, 369, 197, 97, 194, 286, 211, 281, 386 280, 183, 372, 87, 155, 283, 59, 348, 327, 184, 387 76, 111, 330, 203, 349, 69, 98, 152, 145, 189, 388 66, 320, 337, 173, 358, 251, 198, 174, 263, 262, 389 126, 241, 193, 88, 388, 117, 95, 387, 112, 359, 390 287, 244, 103, 272, 301, 171, 162, 234, 273, 127, 391 373, 181, 292, 85, 378, 302, 121, 107, 364, 346, 392 356, 212, 278, 213, 65, 382, 288, 207, 113, 175, 393 99, 296, 374, 368, 199, 260, 185, 336, 331, 161, 394 270, 264, 250, 240, 75, 350, 151, 60, 89, 321, 395 156, 274, 360, 326, 70, 282, 167, 146, 352, 81, 396 91, 389, 266, 245, 177, 235, 190, 256, 204, 342, 397 128, 118, 303, 104, 379, 182, 114, 375, 200, 96, 398 293, 172, 214, 365, 279, 86, 289, 351, 347, 357, 399 261, 186, 176, 271, 90, 100, 147, 322, 275, 361, 400 71, 332, 61, 265, 157, 246, 236 401 }; 402 403 const int16 sort_2305[461] = 404 { 405 0, 4, 6, 145, 247, 352, 454, 7, 5, 3, 406 47, 48, 49, 50, 51, 254, 255, 256, 257, 258, 407 146, 248, 353, 455, 151, 253, 358, 460, 148, 250, 408 355, 457, 149, 251, 356, 458, 152, 359, 150, 252, 409 357, 459, 147, 249, 354, 456, 52, 2, 1, 153, 410 360, 259, 19, 21, 12, 17, 18, 20, 16, 25, 411 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 412 260, 31, 154, 361, 9, 33, 11, 155, 362, 54, 413 261, 28, 27, 156, 363, 34, 35, 29, 46, 32, 414 30, 55, 262, 37, 36, 39, 38, 40, 157, 364, 415 41, 42, 43, 44, 45, 56, 158, 263, 365, 181, 416 192, 170, 79, 57, 399, 90, 159, 297, 377, 366, 417 275, 68, 183, 388, 286, 194, 299, 92 , 70, 182, 418 401, 172, 59, 91, 58, 400, 368, 161, 81, 160, 419 264, 171, 80, 389, 390, 378, 379, 193, 298, 69, 420 266, 265, 367, 277, 288, 276, 287, 184, 60, 195, 421 82, 93, 71, 369, 402, 173, 162, 444, 300, 391, 422 98, 76, 278, 61, 267, 374, 135, 411, 167, 102, 423 380, 200, 87, 178, 65, 94, 204, 124, 72, 342, 424 189, 305, 381, 396, 433, 301, 226, 407, 289, 237, 425 113, 215, 185, 128, 309, 403, 116, 320, 196, 331, 426 370, 422, 174, 64, 392, 83, 425, 219, 134, 188, 427 432, 112, 427, 139, 279, 163, 436, 208, 447, 218, 428 236, 229, 97, 294, 385, 230, 166, 268, 177, 443, 429 225, 426, 101, 272, 138, 127, 290, 117, 347, 199, 430 414, 95, 140, 240, 410, 395, 209, 129, 283, 346, 431 105, 241, 437, 86, 308, 448, 203, 345, 186, 107, 432 220, 415, 334, 319, 106, 313, 118, 123, 73, 207, 433 421, 214, 384, 373, 438, 62, 371, 341, 75, 449, 434 168, 323, 164, 242, 416, 324, 304, 197, 335, 404, 435 271, 63, 191, 325, 96, 169, 231, 280, 312, 187, 436 406, 84, 201, 100, 67, 382, 175, 336, 202, 330, 437 269, 393, 376, 383, 293, 307, 409, 179, 285, 314, 438 302, 372, 398, 190, 180, 89, 99, 103, 232, 78, 439 88, 77, 136, 387, 165, 198, 394, 125, 176, 428, 440 74, 375, 238, 227, 66, 273, 282, 141, 306, 412, 441 114, 85, 130, 348, 119, 291, 296, 386, 233, 397, 442 303, 405, 284, 445, 423, 221, 210, 205, 450, 108, 443 274, 434, 216, 343, 337, 142, 243, 321, 408, 451, 444 310, 292, 120, 109, 281, 439, 270, 429, 332, 295, 445 418, 211, 315, 222, 326, 131, 430, 244, 327, 349, 446 417, 316, 143, 338, 440, 234, 110, 212, 452, 245, 447 121, 419, 350, 223, 132, 441, 328, 413, 317, 339, 448 126, 104, 137, 446, 344, 239, 435, 115, 333, 206, 449 322, 217, 228, 424, 453, 311, 351, 111, 442, 224, 450 213, 122, 431, 340, 235, 246, 133, 144, 420, 329, 451 318 452 }; 453 454 const int16 sort_2385[477] = 455 { 456 0, 4, 6, 145, 251, 360, 466, 7, 5, 3, 457 47, 48, 49, 50, 51, 262, 263, 264, 265, 266, 458 146, 252, 361, 467, 151, 257, 366, 472, 148, 254, 459 363, 469, 149, 255, 364, 470, 156, 371, 150, 256, 460 365, 471, 147, 253, 362, 468, 52, 2, 1, 157, 461 372, 267, 19, 21, 12, 17, 18, 20, 16, 25, 462 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, 463 268, 31, 152, 153, 154, 155, 258, 259, 260, 261, 464 367, 368, 369, 370, 473, 474, 475, 476, 158, 373, 465 9, 33, 11, 159, 374, 54, 269, 28, 27, 160, 466 375, 34, 35, 29, 46, 32, 30, 55, 270, 37, 467 36, 39, 38, 40, 161, 376, 41, 42, 43, 44, 468 45, 56, 162, 271, 377, 185, 196, 174, 79, 57, 469 411, 90, 163, 305, 389, 378, 283, 68, 187, 400, 470 294, 198, 307, 92, 70, 186, 413, 176, 59, 91, 471 58, 412, 380, 165, 81, 164, 272, 175, 80, 401, 472 402, 390, 391, 197, 306, 69, 274, 273, 379, 285, 473 296, 284, 295, 188, 60, 199, 82, 93, 71, 381, 474 414, 177, 166, 456, 308, 403, 98, 76, 286, 61, 475 275, 386, 135, 423, 171, 102, 392, 204, 87, 182, 476 65, 94, 208, 124, 72, 350, 193, 313, 393, 408, 477 445, 309, 230, 419, 297, 241, 113, 219, 189, 128, 478 317, 415, 116, 328, 200, 339, 382, 434, 178, 64, 479 404, 83, 437, 223, 134, 192, 444, 112, 439, 139, 480 287, 167, 448, 212, 459, 222, 240, 233, 97, 302, 481 397, 234, 170, 276, 181, 455, 229, 438, 101, 280, 482 138, 127, 298, 117, 355, 203, 426, 95, 140, 244, 483 422, 407, 213, 129, 291, 354, 105, 245, 449, 86, 484 316, 460, 207, 353, 190, 107, 224, 427, 342, 327, 485 106, 321, 118, 123, 73, 211, 433, 218, 396, 385, 486 450, 62, 383, 349, 75, 461, 172, 331, 168, 246, 487 428, 332, 312, 201, 343, 416, 279, 63, 195, 333, 488 96, 173, 235, 288, 320, 191, 418, 84, 205, 100, 489 67, 394, 179, 344, 206, 338, 277, 405, 388, 395, 490 301, 315, 421, 183, 293, 322, 310, 384, 410, 194, 491 184, 89, 99, 103, 236, 78, 88, 77, 136, 399, 492 169, 202, 406, 125, 180, 440, 74, 387, 242, 231, 493 66, 281, 290, 141, 314, 424, 114, 85, 130, 356, 494 119, 299, 304, 398, 237, 409, 311, 417, 292, 457, 495 435, 225, 214, 209, 462, 108, 282, 446, 220, 351, 496 345, 142, 247, 329, 420, 463, 318, 300, 120, 109, 497 289, 451, 278, 441, 340, 303, 430, 215, 323, 226, 498 334, 131, 442, 248, 335, 357, 429, 324, 143, 346, 499 452, 238, 110, 216, 464, 249, 121, 431, 358, 227, 500 132, 453, 336, 425, 325, 347, 126, 104, 137, 458, 501 352, 243, 447, 115, 341, 210, 330, 221, 232, 436, 502 465, 319, 359, 111, 454, 228, 217, 122, 443, 348, 503 239, 250, 133, 144, 432, 337, 326 504 }; 505 506 const int16 sort_SID[35] = 507 { 508 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 509 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 510 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 511 30, 31, 32, 33, 34 512 }; 513 514 515 /*---------------------------------------------------------------------------- 516 ; EXTERNAL FUNCTION REFERENCES 517 ; Declare functions defined elsewhere and referenced in this module 518 ----------------------------------------------------------------------------*/ 519 520 /*---------------------------------------------------------------------------- 521 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 522 ; Declare variables used in this module but defined elsewhere 523 ----------------------------------------------------------------------------*/ 524 525 /*---------------------------------------------------------------------------- 526 ; FUNCTION CODE 527 ----------------------------------------------------------------------------*/ 528 529 void mime_unsorting(uint8 unsorted_bits[], 530 int16 sorted_bits_into_int16[], 531 int16 * frame_type, 532 int16 * mode, 533 uint8 quality, 534 RX_State_wb *st) 535 { 536 537 int16 i; 538 int16 j; 539 uint8 temp = 0; 540 uint8 *unsorted_bits_ptr = (uint8*)unsorted_bits; 541 542 /* pointer table for bit sorting tables */ 543 const int16 *AmrWbSortingTables[16] = 544 { 545 sort_660, sort_885, sort_1265, sort_1425, 546 sort_1585, sort_1825, sort_1985, sort_2305, 547 sort_2385, sort_SID, NULL, NULL, 548 NULL, NULL, NULL, NULL 549 }; 550 551 const int16 * pt_AmrWbSortingTables = AmrWbSortingTables[*mode]; 552 553 /* clear compressed speech bit buffer */ 554 pv_memset(sorted_bits_into_int16, 555 0, 556 unpacked_size[*mode]*sizeof(*sorted_bits_into_int16)); 557 558 /* unpack and unsort speech or SID bits */ 559 560 561 for (i = unpacked_size[*mode] >> 3; i != 0; i--) 562 { 563 temp = *(unsorted_bits_ptr++); 564 565 for (j = 2; j != 0; j--) 566 { 567 switch (temp & 0xf0) 568 { 569 case 0xf0: 570 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 571 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 572 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 573 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 574 break; 575 case 0xe0: 576 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 577 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 578 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 579 pt_AmrWbSortingTables++; 580 break; 581 case 0xd0: 582 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 583 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 584 pt_AmrWbSortingTables++; 585 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 586 break; 587 case 0xc0: 588 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 589 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 590 pt_AmrWbSortingTables += 2; 591 break; 592 case 0xb0: 593 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 594 pt_AmrWbSortingTables++; 595 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 596 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 597 break; 598 case 0xa0: 599 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 600 pt_AmrWbSortingTables++; 601 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 602 pt_AmrWbSortingTables++; 603 break; 604 case 0x90: 605 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 606 pt_AmrWbSortingTables += 2; 607 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 608 break; 609 case 0x80: 610 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 611 pt_AmrWbSortingTables += 3; 612 break; 613 case 0x70: 614 pt_AmrWbSortingTables++; 615 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 616 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 617 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 618 break; 619 case 0x60: 620 pt_AmrWbSortingTables++; 621 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 622 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 623 pt_AmrWbSortingTables++; 624 break; 625 case 0x50: 626 pt_AmrWbSortingTables++; 627 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 628 pt_AmrWbSortingTables++; 629 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 630 break; 631 case 0x40: 632 pt_AmrWbSortingTables++; 633 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 634 pt_AmrWbSortingTables += 2; 635 break; 636 case 0x30: 637 pt_AmrWbSortingTables += 2; 638 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 639 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 640 break; 641 case 0x20: 642 pt_AmrWbSortingTables += 2; 643 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 644 pt_AmrWbSortingTables++; 645 break; 646 case 0x10: 647 pt_AmrWbSortingTables += 3; 648 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 649 break; 650 default: 651 pt_AmrWbSortingTables += 4; 652 break; 653 } 654 temp <<= 4; 655 } 656 } 657 658 if (unpacked_size[*mode] % 4) 659 { 660 temp <<= 1; 661 662 if (temp & 0x80) 663 { 664 sorted_bits_into_int16[*(pt_AmrWbSortingTables++)] = BIT_1; 665 } 666 } 667 668 /* set frame type */ 669 switch (*mode) 670 { 671 case MODE_7k: 672 case MODE_9k: 673 case MODE_12k: 674 case MODE_14k: 675 case MODE_16k: 676 case MODE_18k: 677 case MODE_20k: 678 case MODE_23k: 679 case MODE_24k: 680 if (quality) 681 { 682 *frame_type = RX_SPEECH_GOOD; 683 } 684 else 685 { 686 *frame_type = RX_SPEECH_BAD; 687 } 688 break; 689 690 case MRSID: 691 if (quality) 692 { 693 if (temp & 0x80) 694 { 695 *frame_type = RX_SID_UPDATE; 696 } 697 else 698 { 699 *frame_type = RX_SID_FIRST; 700 } 701 } 702 else 703 { 704 *frame_type = RX_SID_BAD; 705 } 706 707 /* set mode index */ 708 *mode = st->prev_mode; 709 break; 710 case 14: /* SPEECH_LOST */ 711 *frame_type = RX_SPEECH_LOST; 712 *mode = st->prev_mode; 713 break; 714 case 15: /* NO_DATA */ 715 *frame_type = RX_NO_DATA; 716 *mode = st->prev_mode; 717 break; 718 default: /* replace frame with unused mode index by NO_DATA frame */ 719 *frame_type = RX_NO_DATA; 720 *mode = st->prev_mode; 721 break; 722 } 723 724 st->prev_mode = *mode; 725 726 } 727 728 729 730