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
mime_unsorting(uint8 unsorted_bits[],int16 sorted_bits_into_int16[],int16 * frame_type,int16 * mode,uint8 quality,RX_State_wb * st)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