Line data Source code
1 : /******************************************************************************************************
2 :
3 : (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
4 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
5 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
6 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
7 : contributors to this repository. All Rights Reserved.
8 :
9 : This software is protected by copyright law and by international treaties.
10 : The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
11 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
12 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
13 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
14 : contributors to this repository retain full ownership rights in their respective contributions in
15 : the software. This notice grants no license of any kind, including but not limited to patent
16 : license, nor is any license granted by implication, estoppel or otherwise.
17 :
18 : Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
19 : contributions.
20 :
21 : This software is provided "AS IS", without any express or implied warranties. The software is in the
22 : development stage. It is intended exclusively for experts who have experience with such software and
23 : solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
24 : and fitness for a particular purpose are hereby disclaimed and excluded.
25 :
26 : Any dispute, controversy or claim arising under or in relation to providing this software shall be
27 : submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
28 : accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
29 : the United Nations Convention on Contracts on the International Sales of Goods.
30 :
31 : *******************************************************************************************************/
32 :
33 : /*====================================================================================
34 : EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
35 : ====================================================================================*/
36 :
37 : #include <assert.h>
38 : #include <stdint.h>
39 : #include "options.h"
40 : #include "cnst.h"
41 : #include "prot_fx.h"
42 : #include "stat_enc.h"
43 : #include "stat_dec.h"
44 : #include "rom_com.h"
45 : #include "mime.h"
46 : #include "ivas_cnst.h"
47 : #include "ivas_rom_com.h"
48 : #include "wmc_auto.h"
49 : #include "ivas_prot_fx.h"
50 : #include "prot_fx_enc.h"
51 : #ifdef DEBUGGING
52 : #include "debug.h"
53 : #ifdef DBG_BITSTREAM_ANALYSIS
54 : #include <string.h>
55 : #endif
56 : #endif
57 :
58 : #ifdef DEBUGGING
59 :
60 : #define FEC_SEED 12558
61 :
62 : /*-------------------------------------------------------------------*
63 : * Global variables
64 : *--------------------------------------------------------------------*/
65 :
66 : FILE *FEC_pattern = NULL; /* FEC pattern file (for simulation of FEC) */
67 : #endif
68 :
69 : #define STEP_MAX_NUM_INDICES 100 /* increase the maximum number of allowed indices in the list by this amount */
70 :
71 : /*-------------------------------------------------------------------*
72 : * BRATE2IDX_fx()
73 : *
74 : * Convert Bitrate to Index Value
75 : *-------------------------------------------------------------------*/
76 :
77 21301 : Word16 BRATE2IDX_fx(
78 : const Word32 brate )
79 : {
80 :
81 : Word32 L_temp;
82 : Word32 L_idx;
83 : #define START 9
84 : extern const Word16 bit_rates_div50[];
85 :
86 : /* This is a Fast Bit Rate Value to Index Value Binary Search */
87 21301 : L_temp = L_msu0( brate, bit_rates_div50[START], 50 );
88 21301 : L_temp = L_min( 6, L_max( -6, L_temp ) );
89 21301 : L_idx = L_add( L_temp, START );
90 21301 : L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
91 21301 : L_temp = L_min( 3, L_max( -3, L_temp ) );
92 21301 : L_idx = L_add( L_temp, L_idx );
93 21301 : L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
94 21301 : L_temp = L_min( 1, L_max( -2, L_temp ) );
95 21301 : L_idx = L_add( L_temp, L_idx );
96 21301 : L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
97 21301 : if ( L_temp != 0 )
98 7101 : L_idx = L_add( L_idx, 1 );
99 :
100 21301 : return (Word16) L_idx;
101 : }
102 :
103 :
104 : /*-------------------------------------------------------------------*
105 : * BRATE2IDX16k_fx()
106 : *
107 : * Convert Bitrate to Index Value
108 : *-------------------------------------------------------------------*/
109 :
110 60 : Word16 BRATE2IDX16k_fx(
111 : Word32 brate )
112 : {
113 : Word32 L_temp, L_idx;
114 : #define START_16K 5
115 : extern const Word16 bit_rates_16k_div50[];
116 :
117 60 : if ( EQ_32( brate, ACELP_16k40 ) )
118 : {
119 0 : brate = ACELP_14k80;
120 0 : move16();
121 : }
122 :
123 : /* This is a Fast Bit Rate Value to Index Value Binary Search */
124 60 : L_temp = L_msu0( brate, bit_rates_16k_div50[START_16K], 50 );
125 60 : L_temp = L_min( 3, L_max( -3, L_temp ) );
126 60 : L_idx = L_add( L_temp, START_16K );
127 60 : L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
128 60 : L_temp = L_min( 2, L_max( -2, L_temp ) );
129 60 : L_idx = L_add( L_temp, L_idx );
130 60 : L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
131 60 : L_temp = L_min( 1, L_max( -1, L_temp ) );
132 60 : L_idx = L_add( L_temp, L_idx );
133 :
134 60 : return (Word16) L_idx;
135 : }
136 :
137 :
138 : /*-------------------------------------------------------------------*
139 : * BIT_ALLOC_IDX_fx()
140 : *-------------------------------------------------------------------*/
141 :
142 710 : Word32 BIT_ALLOC_IDX_fx(
143 : const Word32 brate,
144 : Word16 ctype,
145 : const Word16 sfrm,
146 : const Word16 tc )
147 : {
148 : Word32 L_temp;
149 : Word16 temp;
150 :
151 710 : if ( ctype == INACTIVE ) /* no sub(ctype, INACTIVE) because it is '0' */
152 0 : ctype = GENERIC;
153 710 : move16();
154 710 : L_temp = L_mac0( -1l * 256, 1 * 256, ctype );
155 :
156 710 : temp = BRATE2IDX_fx( brate );
157 710 : L_temp = L_mac0( L_temp, 4 * 256, temp );
158 710 : IF( tc >= 0 )
159 15 : L_temp = L_mac0( L_temp, ( 10 - 4 ) * 256, temp );
160 : /* So either 'temp' x 4 when 'tc < 0', 'temp' x 10 otherwise */
161 :
162 710 : L_temp = L_mac0( L_temp, 1 * 256, s_max( 0, tc ) );
163 :
164 710 : L_temp = L_mac0( L_temp, s_max( 0, sfrm ), 1 );
165 710 : if ( sfrm < 0 )
166 695 : L_temp = L_shr( L_temp, 2 );
167 710 : L_temp = L_shr( L_temp, 6 );
168 :
169 710 : return L_temp;
170 : }
171 :
172 :
173 : /*-------------------------------------------------------------------*
174 : * BIT_ALLOC_IDX_16KHZ_fx()
175 : *-------------------------------------------------------------------*/
176 :
177 60 : Word32 BIT_ALLOC_IDX_16KHZ_fx(
178 : const Word32 brate,
179 : const Word16 ctype,
180 : const Word16 sfrm,
181 : const Word16 tc )
182 : {
183 : Word32 L_temp;
184 : Word16 temp;
185 : /* 'ctype' =
186 : TRANSITION => 2
187 : GENERIC => 1
188 : ALL Other => 0
189 : */
190 60 : L_temp = L_and( shr( 0x0240l, shl( ctype, 1 ) ), 3 );
191 :
192 60 : temp = BRATE2IDX16k_fx( brate );
193 60 : L_temp = L_mac0( L_temp, 3, temp );
194 60 : IF( tc >= 0 )
195 60 : L_temp = L_mac0( L_temp, ( 7 - 3 ), temp );
196 : /* So either 'temp' x 3 when 'tc < 0', 'temp' x 7 otherwise */
197 :
198 60 : L_temp = L_mac0( L_temp, 1, s_max( 0, tc ) );
199 :
200 60 : IF( sfrm >= 0 )
201 : {
202 : /* Mult by 5 */
203 60 : L_temp = L_add( L_temp, L_shl( L_temp, 2 ) );
204 60 : L_temp = L_mac0( L_temp, shr( sfrm, 6 ), 1 );
205 : }
206 :
207 60 : return L_temp;
208 : }
209 :
210 :
211 : /*-------------------------------------------------------------------*
212 : * rate2AMRWB_IOmode()
213 : *
214 : * lookup AMRWB IO mode
215 : *-------------------------------------------------------------------*/
216 :
217 3100 : static Word16 rate2AMRWB_IOmode(
218 : Word32 brate /* i : bitrate */
219 : )
220 : {
221 3100 : SWITCH( brate )
222 : {
223 : /* EVS AMR-WB IO modes */
224 0 : case SID_1k75:
225 0 : return AMRWB_IO_SID;
226 0 : case ACELP_6k60:
227 0 : return AMRWB_IO_6600;
228 0 : case ACELP_8k85:
229 0 : return AMRWB_IO_8850;
230 0 : case ACELP_12k65:
231 0 : return AMRWB_IO_1265;
232 0 : case ACELP_14k25:
233 0 : return AMRWB_IO_1425;
234 0 : case ACELP_15k85:
235 0 : return AMRWB_IO_1585;
236 0 : case ACELP_18k25:
237 0 : return AMRWB_IO_1825;
238 0 : case ACELP_19k85:
239 0 : return AMRWB_IO_1985;
240 0 : case ACELP_23k05:
241 0 : return AMRWB_IO_2305;
242 0 : case ACELP_23k85:
243 0 : return AMRWB_IO_2385;
244 3100 : default:
245 3100 : break;
246 : }
247 :
248 3100 : return -1;
249 : }
250 :
251 :
252 : /*-------------------------------------------------------------------*
253 : * rate2EVSmode()
254 : *
255 : * lookup EVS mode
256 : *-------------------------------------------------------------------*/
257 :
258 3100 : Word16 rate2EVSmode(
259 : const Word32 brate, /* i : bitrate */
260 : Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
261 : )
262 : {
263 3100 : if ( is_amr_wb != NULL )
264 : {
265 0 : *is_amr_wb = 0;
266 0 : move16();
267 : }
268 :
269 3100 : SWITCH( brate )
270 : {
271 : /* EVS Primary modes */
272 0 : case FRAME_NO_DATA:
273 0 : return NO_DATA_TYPE;
274 0 : case SID_2k40:
275 0 : return PRIMARY_SID;
276 0 : case PPP_NELP_2k80:
277 0 : return PRIMARY_2800;
278 0 : case ACELP_7k20:
279 0 : return PRIMARY_7200;
280 0 : case ACELP_8k00:
281 0 : return PRIMARY_8000;
282 0 : case ACELP_9k60:
283 0 : return PRIMARY_9600;
284 1050 : case ACELP_13k20:
285 1050 : return PRIMARY_13200;
286 0 : case ACELP_16k40:
287 0 : return PRIMARY_16400;
288 1050 : case ACELP_24k40:
289 1050 : return PRIMARY_24400;
290 0 : case ACELP_32k:
291 0 : return PRIMARY_32000;
292 0 : case ACELP_48k:
293 0 : return PRIMARY_48000;
294 1000 : case ACELP_64k:
295 1000 : return PRIMARY_64000;
296 0 : case HQ_96k:
297 0 : return PRIMARY_96000;
298 0 : case HQ_128k:
299 0 : return PRIMARY_128000;
300 0 : default:
301 0 : break;
302 : }
303 :
304 0 : if ( is_amr_wb != NULL )
305 : {
306 0 : *is_amr_wb = 1;
307 0 : move16();
308 : }
309 :
310 0 : return rate2AMRWB_IOmode( brate );
311 : }
312 :
313 :
314 : /*-------------------------------------------------------------------*
315 : * ind_list_realloc()
316 : *
317 : * Re-allocate the list of indices
318 : *-------------------------------------------------------------------*/
319 :
320 0 : ivas_error ind_list_realloc(
321 : INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */
322 : const Word16 max_num_indices, /* i : new maximum number of allowed indices in the list */
323 : Encoder_Struct *st_ivas /* i : IVAS encoder structure */
324 : )
325 : {
326 : Word16 i, n, ch, n_channels, ind_list_pos, is_metadata, ivas_max_num_indices;
327 : INDICE_HANDLE new_ind_list;
328 : BSTR_ENC_HANDLE hBstr;
329 :
330 0 : IF( st_ivas == NULL )
331 : {
332 0 : return IVAS_ERR_OK;
333 : }
334 :
335 : /* get the pointer to the beginning of the old buffer of indices (either metadata or core coders) */
336 0 : IF( old_ind_list == st_ivas->ind_list_metadata )
337 : {
338 0 : is_metadata = 1;
339 0 : ivas_max_num_indices = st_ivas->ivas_max_num_indices_metadata;
340 : }
341 : ELSE
342 : {
343 0 : is_metadata = 0;
344 0 : ivas_max_num_indices = st_ivas->ivas_max_num_indices;
345 : }
346 0 : move16();
347 0 : move16();
348 :
349 : /* allocate new buffer of indices */
350 0 : IF( ( new_ind_list = (INDICE_HANDLE) malloc( max_num_indices * sizeof( Indice ) ) ) == NULL )
351 : {
352 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) );
353 : }
354 :
355 : /* move indices from the old list to the new list */
356 0 : FOR( i = 0; i < s_min( max_num_indices, ivas_max_num_indices ); i++ )
357 : {
358 0 : IF( GT_16( old_ind_list[i].nb_bits, -1 ) )
359 : {
360 0 : new_ind_list[i].id = old_ind_list[i].id;
361 0 : new_ind_list[i].value = old_ind_list[i].value;
362 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
363 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
364 : #endif
365 0 : move16();
366 0 : move16();
367 : }
368 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
369 0 : move16();
370 : }
371 :
372 : /* reset nb_bits of all other indices to -1 */
373 0 : FOR( ; i < max_num_indices; i++ )
374 : {
375 0 : new_ind_list[i].nb_bits = -1;
376 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
377 : sprintf( new_ind_list[i].function_name, "RESET in ind_list_realloc" );
378 : #endif
379 0 : move16();
380 : }
381 :
382 : /* update parameters in all SCE elements */
383 0 : FOR( n = 0; n < st_ivas->nSCE; n++ )
384 : {
385 : /* get the pointer to hBstr */
386 0 : IF( is_metadata )
387 : {
388 0 : hBstr = st_ivas->hSCE[n]->hMetaData;
389 : }
390 : ELSE
391 : {
392 0 : hBstr = st_ivas->hSCE[n]->hCoreCoder[0]->hBstr;
393 : }
394 :
395 0 : IF( hBstr != NULL )
396 : {
397 : /* get the current position inside the old list */
398 0 : ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
399 :
400 : /* set pointers in the new list */
401 0 : *( hBstr->ivas_ind_list_zero ) = new_ind_list;
402 0 : hBstr->ind_list = &new_ind_list[ind_list_pos];
403 :
404 : /* set the new maximum number of indices */
405 0 : *( hBstr->ivas_max_num_indices ) = max_num_indices;
406 0 : move16();
407 : }
408 : }
409 :
410 : /* update parameters in all CPE elements */
411 0 : FOR( n = 0; n < st_ivas->nCPE; n++ )
412 : {
413 : /* get the pointer to hBstr */
414 0 : IF( is_metadata )
415 : {
416 0 : n_channels = 1;
417 : }
418 : ELSE
419 : {
420 0 : n_channels = CPE_CHANNELS;
421 : }
422 0 : move16();
423 :
424 0 : FOR( ch = 0; ch < n_channels; ch++ )
425 : {
426 0 : IF( is_metadata )
427 : {
428 0 : hBstr = st_ivas->hCPE[n]->hMetaData;
429 : }
430 : ELSE
431 : {
432 0 : hBstr = st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr;
433 : }
434 :
435 0 : IF( hBstr != NULL )
436 : {
437 : /* get the current position inside the old list */
438 0 : ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
439 :
440 : /* set pointers in the new list */
441 0 : *( hBstr->ivas_ind_list_zero ) = new_ind_list;
442 0 : hBstr->ind_list = &new_ind_list[ind_list_pos];
443 :
444 : /* set the new maximum number of indices */
445 0 : *( hBstr->ivas_max_num_indices ) = max_num_indices;
446 0 : move16();
447 : }
448 : }
449 : }
450 :
451 : /* free the old list */
452 0 : free( old_ind_list );
453 :
454 0 : return IVAS_ERR_OK;
455 : }
456 :
457 :
458 : /*-----------------------------------------------------------------------*
459 : * get_ivas_max_num_indices()
460 : *
461 : * Get the maximum allowed number of indices in the encoder
462 : *-----------------------------------------------------------------------*/
463 :
464 : /*! r: maximum number of indices */
465 0 : Word16 get_ivas_max_num_indices_fx(
466 : const IVAS_FORMAT ivas_format, /* i : IVAS format */
467 : const Word32 ivas_total_brate /* i : IVAS total bitrate */
468 : )
469 : {
470 0 : test();
471 0 : test();
472 0 : IF( EQ_16( ivas_format, STEREO_FORMAT ) )
473 : {
474 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
475 : {
476 0 : return 300;
477 : }
478 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
479 : {
480 0 : return 400;
481 : }
482 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
483 : {
484 0 : return 450;
485 : }
486 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
487 : {
488 0 : return 650;
489 : }
490 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
491 : {
492 0 : return 750;
493 : }
494 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
495 : {
496 0 : return 850;
497 : }
498 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
499 : {
500 0 : return 950;
501 : }
502 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
503 : {
504 0 : return 1350;
505 : }
506 : ELSE
507 : {
508 0 : return 1650;
509 : }
510 : }
511 0 : ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) || EQ_16( ivas_format, MONO_FORMAT ) )
512 : {
513 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
514 : {
515 0 : return 250;
516 : }
517 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
518 : {
519 0 : return 350;
520 : }
521 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
522 : {
523 0 : return 450;
524 : }
525 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
526 : {
527 0 : return 550;
528 : }
529 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
530 : {
531 0 : return 620;
532 : }
533 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
534 : {
535 0 : return 670;
536 : }
537 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
538 : {
539 0 : return 780;
540 : }
541 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
542 : {
543 0 : return 880;
544 : }
545 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
546 : {
547 0 : return 950;
548 : }
549 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
550 : {
551 0 : return 1100;
552 : }
553 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
554 : {
555 0 : return 1300;
556 : }
557 : ELSE
558 : {
559 0 : return 1650;
560 : }
561 : }
562 0 : ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
563 : {
564 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
565 : {
566 0 : return 250;
567 : }
568 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
569 : {
570 0 : return 350;
571 : }
572 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
573 : {
574 0 : return 400;
575 : }
576 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
577 : {
578 0 : return 650;
579 : }
580 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
581 : {
582 0 : return 750;
583 : }
584 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
585 : {
586 0 : return 1020;
587 : }
588 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
589 : {
590 0 : return 1160;
591 : }
592 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
593 : {
594 0 : return 1220;
595 : }
596 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
597 : {
598 0 : return 1300;
599 : }
600 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
601 : {
602 0 : return 1720;
603 : }
604 : ELSE
605 : {
606 0 : return 2000;
607 : }
608 : }
609 0 : ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
610 : {
611 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
612 : {
613 0 : return 300;
614 : }
615 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
616 : {
617 0 : return 400;
618 : }
619 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
620 : {
621 0 : return 650;
622 : }
623 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
624 : {
625 0 : return 750;
626 : }
627 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
628 : {
629 0 : return 850;
630 : }
631 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
632 : {
633 0 : return 950;
634 : }
635 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
636 : {
637 0 : return 1150;
638 : }
639 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
640 : {
641 0 : return 1450;
642 : }
643 : ELSE
644 : {
645 0 : return 1650;
646 : }
647 : }
648 0 : ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
649 : {
650 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
651 : {
652 0 : return 300;
653 : }
654 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
655 : {
656 0 : return 400;
657 : }
658 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
659 : {
660 0 : return 650;
661 : }
662 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
663 : {
664 0 : return 750;
665 : }
666 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
667 : {
668 0 : return 1150;
669 : }
670 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
671 : {
672 0 : return 1250;
673 : }
674 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
675 : {
676 0 : return 1400;
677 : }
678 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
679 : {
680 0 : return 1650;
681 : }
682 : ELSE
683 : {
684 0 : return 1850;
685 : }
686 : }
687 0 : ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
688 : {
689 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
690 : {
691 0 : return 250;
692 : }
693 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
694 : {
695 0 : return 350;
696 : }
697 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
698 : {
699 0 : return 400;
700 : }
701 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
702 : {
703 0 : return 650;
704 : }
705 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
706 : {
707 0 : return 750;
708 : }
709 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
710 : {
711 0 : return 850;
712 : }
713 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
714 : {
715 0 : return 1150;
716 : }
717 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
718 : {
719 0 : return 1420;
720 : }
721 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
722 : {
723 0 : return 2120;
724 : }
725 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
726 : {
727 0 : return 2250;
728 : }
729 : ELSE
730 : {
731 0 : return 2450;
732 : }
733 : }
734 :
735 0 : return 2450;
736 : }
737 : /*-----------------------------------------------------------------------*
738 : * get_BWE_max_num_indices()
739 : *
740 : * Get the maximum number of indices in the BWE
741 : *-----------------------------------------------------------------------*/
742 :
743 : /*! r: maximum number of indices */
744 0 : Word16 get_BWE_max_num_indices(
745 : const Word32 extl_brate /* i : extensiona layer bitrate */
746 : )
747 : {
748 : /* set the maximum number of indices in the BWE */
749 0 : if ( extl_brate < SWB_BWE_16k )
750 : {
751 0 : return 30;
752 : }
753 : else
754 : {
755 0 : return 150;
756 : }
757 : }
758 :
759 :
760 : /*-----------------------------------------------------------------------*
761 : * get_ivas_max_num_indices_metadata()
762 : *
763 : * Set the maximum allowed number of metadata indices in the list
764 : *-----------------------------------------------------------------------*/
765 :
766 : /*! r: maximum number of indices */
767 0 : Word16 get_ivas_max_num_indices_metadata_fx(
768 : const IVAS_FORMAT ivas_format, /* i : IVAS format */
769 : const Word32 ivas_total_brate /* i : IVAS total bitrate */
770 : )
771 : {
772 : /* set the maximum required number of metadata indices */
773 0 : test();
774 0 : IF( EQ_16( ivas_format, MONO_FORMAT ) )
775 : {
776 0 : return 0;
777 : }
778 0 : ELSE IF( EQ_16( ivas_format, STEREO_FORMAT ) )
779 : {
780 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
781 : {
782 0 : return 60;
783 : }
784 : ELSE
785 : {
786 0 : return 80;
787 : }
788 : }
789 0 : ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) )
790 : {
791 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
792 : {
793 0 : return 20;
794 : }
795 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
796 : {
797 0 : return 65;
798 : }
799 : ELSE
800 : {
801 0 : return 80;
802 : }
803 : }
804 0 : ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
805 : {
806 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
807 : {
808 0 : return 100;
809 : }
810 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
811 : {
812 0 : return 200;
813 : }
814 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
815 : {
816 0 : return 300;
817 : }
818 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
819 : {
820 0 : return 500;
821 : }
822 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
823 : {
824 0 : return 1050;
825 : }
826 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
827 : {
828 0 : return 2000;
829 : }
830 : ELSE
831 : {
832 0 : return 2500;
833 : }
834 : }
835 0 : ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
836 : {
837 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
838 : {
839 0 : return 80;
840 : }
841 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
842 : {
843 0 : return 125;
844 : }
845 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
846 : {
847 0 : return 205;
848 : }
849 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
850 : {
851 0 : return 240;
852 : }
853 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
854 : {
855 0 : return 305;
856 : }
857 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
858 : {
859 0 : return 425;
860 : }
861 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
862 : {
863 0 : return 630;
864 : }
865 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
866 : {
867 0 : return 850;
868 : }
869 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
870 : {
871 0 : return 1000;
872 : }
873 : ELSE
874 : {
875 0 : return 1750;
876 : }
877 : }
878 0 : ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
879 : {
880 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
881 : {
882 0 : return 80;
883 : }
884 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
885 : {
886 0 : return 125 + 100;
887 : }
888 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
889 : {
890 0 : return 205 + 100;
891 : }
892 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
893 : {
894 0 : return 240 + 150;
895 : }
896 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
897 : {
898 0 : return 305 + 30;
899 : }
900 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
901 : {
902 0 : return 425 + 30;
903 : }
904 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
905 : {
906 0 : return 630 + 30;
907 : }
908 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
909 : {
910 0 : return 850 + 30;
911 : }
912 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
913 : {
914 0 : return 1000 + 30;
915 : }
916 : ELSE
917 : {
918 0 : return 1750 + 30;
919 : }
920 : }
921 0 : ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
922 : {
923 0 : IF( LE_32( ivas_total_brate, IVAS_13k2 ) )
924 : {
925 0 : return 80;
926 : }
927 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
928 : {
929 0 : return 100;
930 : }
931 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
932 : {
933 0 : return 210;
934 : }
935 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
936 : {
937 0 : return 220;
938 : }
939 : ELSE
940 : {
941 0 : return 300;
942 : }
943 : }
944 :
945 0 : return 50;
946 : }
947 :
948 :
949 : /*-------------------------------------------------------------------*
950 : * move_indices()
951 : *
952 : * Move indices inside the buffer or among two buffers
953 : *-------------------------------------------------------------------*/
954 :
955 0 : void move_indices(
956 : INDICE_HANDLE old_ind_list, /* i/o: old location of indices */
957 : INDICE_HANDLE new_ind_list, /* i/o: new location of indices */
958 : const Word16 nb_indices /* i : number of moved indices */
959 : )
960 : {
961 : Word16 i;
962 :
963 0 : IF( new_ind_list < old_ind_list )
964 : {
965 0 : FOR( i = 0; i < nb_indices; i++ )
966 : {
967 0 : new_ind_list[i].id = old_ind_list[i].id;
968 0 : new_ind_list[i].value = old_ind_list[i].value;
969 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
970 0 : move16();
971 0 : move16();
972 0 : move16();
973 :
974 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
975 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
976 : #endif
977 0 : old_ind_list[i].nb_bits = -1;
978 0 : move16();
979 : }
980 : }
981 0 : ELSE IF( new_ind_list > old_ind_list )
982 : {
983 0 : FOR( i = nb_indices - 1; i >= 0; i-- )
984 : {
985 0 : new_ind_list[i].id = old_ind_list[i].id;
986 0 : new_ind_list[i].value = old_ind_list[i].value;
987 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
988 0 : move16();
989 0 : move16();
990 0 : move16();
991 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
992 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
993 : #endif
994 :
995 0 : old_ind_list[i].nb_bits = -1;
996 0 : move16();
997 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
998 : sprintf( old_ind_list[i].function_name, "RESET in move_indices" );
999 : #endif
1000 : }
1001 : }
1002 :
1003 0 : return;
1004 : }
1005 :
1006 :
1007 : /*-------------------------------------------------------------------*
1008 : * check_ind_list_limits()
1009 : *
1010 : * Check, if the maximum number of indices has been reached -> reallocate
1011 : * Check, if we will not overwrite an existing indice -> adjust the location
1012 : *-------------------------------------------------------------------*/
1013 :
1014 0 : ivas_error check_ind_list_limits(
1015 : BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */
1016 : )
1017 : {
1018 : Indice *ivas_ind_list_zero, *ivas_ind_list_last;
1019 : ivas_error error;
1020 :
1021 0 : error = IVAS_ERR_OK;
1022 0 : move32();
1023 0 : ivas_ind_list_zero = *( hBstr->ivas_ind_list_zero );
1024 :
1025 : /* check, if the maximum number of indices has been reached and re-allocate the buffer */
1026 : /* the re-allocation can be avoided by increasing the limits in get_ivas_max_num_indices() or get_ivas_max_num_indices_metadata() */
1027 0 : IF( GE_16( (Word16) ( &hBstr->ind_list[hBstr->nb_ind_tot] - ivas_ind_list_zero ), *( hBstr->ivas_max_num_indices ) ) )
1028 : {
1029 :
1030 : /* reallocate the buffer of indices with increased limit */
1031 0 : IF( NE_32( ( error = ind_list_realloc( *hBstr->ivas_ind_list_zero, *( hBstr->ivas_max_num_indices ) + STEP_MAX_NUM_INDICES, hBstr->st_ivas ) ), IVAS_ERR_OK ) )
1032 : {
1033 0 : return error;
1034 : }
1035 : }
1036 :
1037 : /* check, if we will not overwrite an existing indice */
1038 0 : IF( hBstr->ind_list[hBstr->nb_ind_tot].nb_bits > 0 )
1039 : {
1040 0 : IF( hBstr->nb_ind_tot == 0 )
1041 : {
1042 : /* move the pointer to the next available empty slot */
1043 0 : ivas_ind_list_last = &ivas_ind_list_zero[*( hBstr->ivas_max_num_indices )];
1044 0 : WHILE( hBstr->ind_list[0].nb_bits > 0 && hBstr->ind_list < ivas_ind_list_last )
1045 : {
1046 0 : hBstr->ind_list++;
1047 : }
1048 :
1049 0 : IF( hBstr->ind_list >= ivas_ind_list_last )
1050 : {
1051 :
1052 : /* no available empty slot -> need to re-allocate the buffer */
1053 0 : IF( NE_32( ( error = ind_list_realloc( *hBstr->ivas_ind_list_zero, *( hBstr->ivas_max_num_indices ) + STEP_MAX_NUM_INDICES, hBstr->st_ivas ) ), IVAS_ERR_OK ) )
1054 : {
1055 0 : return error;
1056 : }
1057 : }
1058 : }
1059 : ELSE
1060 : {
1061 : #ifdef DEBUGGING
1062 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Buffer of indices corrupted in frame %d! Attempt to overwrite indice ID = %d (value: %d, bits: %d)!\n", frame, hBstr->ind_list[hBstr->nb_ind_tot].id, hBstr->ind_list[hBstr->nb_ind_tot].value, hBstr->ind_list[hBstr->nb_ind_tot].nb_bits );
1063 : #else
1064 0 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Buffer of indices corrupted! Attempt to overwrite indice ID = %d (value: %d, bits: %d)!\n", hBstr->ind_list[hBstr->nb_ind_tot].id, hBstr->ind_list[hBstr->nb_ind_tot].value, hBstr->ind_list[hBstr->nb_ind_tot].nb_bits );
1065 : #endif
1066 : }
1067 : }
1068 :
1069 0 : return error;
1070 : }
1071 :
1072 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
1073 : const char *named_indices_table[] = {
1074 : "IND_IVAS_FORMAT",
1075 : "IND_SMODE_OMASA",
1076 : "IND_SMODE",
1077 : "IND_SID_TYPE",
1078 : "IND_BWIDTH",
1079 : "IND_CORE",
1080 : "IND_PPP_NELP_MODE",
1081 : "IND_ACELP_16KHZ",
1082 : "IND_ACELP_SIGNALLING",
1083 : "IND_SHARP_FLAG",
1084 : "IND_MDCT_CORE",
1085 : "IND_TCX_CORE",
1086 : "IND_BWE_FLAG",
1087 : "IND_HQ_SWITCHING_FLG",
1088 : "IND_LAST_L_FRAME",
1089 : "IND_VAD_FLAG",
1090 : "IND_HQ_BWIDTH",
1091 : "IND_TC_SUBFR",
1092 : "IND_TC_SUBFR",
1093 : "IND_TC_SUBFR",
1094 : "IND_TC_SUBFR",
1095 : "IND_GSC_IVAS_SP",
1096 : "IND_LSF_PREDICTOR_SELECT_BIT",
1097 : "IND_LSF",
1098 : "IND_LSF",
1099 : "IND_LSF",
1100 : "IND_LSF",
1101 : "IND_LSF",
1102 : "IND_LSF",
1103 : "IND_LSF",
1104 : "IND_LSF",
1105 : "IND_LSF",
1106 : "IND_LSF",
1107 : "IND_LSF",
1108 : "IND_LSF",
1109 : "IND_LSF",
1110 : "IND_LSF",
1111 : "IND_LSF",
1112 : "IND_LSF",
1113 : "IND_LSF",
1114 : "IND_MID_FRAME_LSF_INDEX",
1115 : "IND_ISF_0_0",
1116 : "IND_ISF_0_1",
1117 : "IND_ISF_0_2",
1118 : "IND_ISF_0_3",
1119 : "IND_ISF_0_4",
1120 : "IND_ISF_1_0",
1121 : "IND_ISF_1_1",
1122 : "IND_ISF_1_2",
1123 : "IND_ISF_1_3",
1124 : "IND_ISF_1_4",
1125 : "IND_IC_LSF_PRED",
1126 : "IND_GSC_ATTACK",
1127 : "IND_GSC_SWB_SPEECH",
1128 : "IND_NOISE_LEVEL",
1129 : "IND_HF_NOISE",
1130 : "IND_PIT_CONTR_IDX",
1131 : "IND_FEC_CLAS",
1132 : "IND_FEC_ENR",
1133 : "IND_FEC_POS",
1134 : "IND_ES_PRED",
1135 : "IND_HARM_FLAG_ACELP",
1136 : "IND_ALG_CDBK_4T64_2_24KBIT",
1137 : "IND_ALG_CDBK_4T64_2_24KBIT",
1138 : "IND_ALG_CDBK_4T64_2_24KBIT",
1139 : "IND_ALG_CDBK_4T64_2_24KBIT",
1140 : "IND_ALG_CDBK_4T64_2_24KBIT",
1141 : "IND_ALG_CDBK_4T64_2_24KBIT",
1142 : "IND_ALG_CDBK_4T64_2_24KBIT",
1143 : "IND_ALG_CDBK_4T64_2_24KBIT",
1144 : "IND_ALG_CDBK_4T64_2_24KBIT",
1145 : "IND_ALG_CDBK_4T64_2_24KBIT",
1146 : "IND_ALG_CDBK_4T64_2_24KBIT",
1147 : "IND_ALG_CDBK_4T64_2_24KBIT",
1148 : "IND_ALG_CDBK_4T64_2_24KBIT",
1149 : "IND_ALG_CDBK_4T64_2_24KBIT",
1150 : "IND_ALG_CDBK_4T64_2_24KBIT",
1151 : "IND_ALG_CDBK_4T64_2_24KBIT",
1152 : "IND_ALG_CDBK_4T64_2_24KBIT",
1153 : "IND_ALG_CDBK_4T64_2_24KBIT",
1154 : "IND_ALG_CDBK_4T64_2_24KBIT",
1155 : "IND_ALG_CDBK_4T64_2_24KBIT",
1156 : "IND_ALG_CDBK_4T64_2_24KBIT",
1157 : "IND_ALG_CDBK_4T64_2_24KBIT",
1158 : "IND_ALG_CDBK_4T64_2_24KBIT",
1159 : "IND_ALG_CDBK_4T64_2_24KBIT",
1160 : "IND_ALG_CDBK_4T64_2_24KBIT",
1161 : "IND_ALG_CDBK_4T64_2_24KBIT",
1162 : "IND_ALG_CDBK_4T64_2_24KBIT",
1163 : "IND_ALG_CDBK_4T64_2_24KBIT",
1164 : "IND_ALG_CDBK_4T64_2_24KBIT",
1165 : "IND_ALG_CDBK_4T64_2_24KBIT",
1166 : "IND_ALG_CDBK_4T64_2_24KBIT",
1167 : "IND_ALG_CDBK_4T64_2_24KBIT",
1168 : "IND_ALG_CDBK_4T64_2_24KBIT",
1169 : "IND_ALG_CDBK_4T64_2_24KBIT",
1170 : "IND_ALG_CDBK_4T64_2_24KBIT",
1171 : "IND_ALG_CDBK_4T64_2_24KBIT",
1172 : "IND_ALG_CDBK_4T64_2_24KBIT",
1173 : "IND_ALG_CDBK_4T64_2_24KBIT",
1174 : "IND_ALG_CDBK_4T64_2_24KBIT",
1175 : "IND_ALG_CDBK_4T64_2_24KBIT",
1176 : "TAG_ALG_CDBK_4T64_24KBIT_END",
1177 : "IND_HF_GAIN_MODIFICATION",
1178 : "IND_HF_GAIN_MODIFICATION",
1179 : "IND_HF_GAIN_MODIFICATION",
1180 : "IND_HF_GAIN_MODIFICATION",
1181 : "IND_HF_GAIN_MODIFICATION",
1182 : "IND_HF_GAIN_MODIFICATION",
1183 : "IND_HF_GAIN_MODIFICATION",
1184 : "IND_HF_GAIN_MODIFICATION",
1185 : "IND_HF_GAIN_MODIFICATION",
1186 : "IND_HF_GAIN_MODIFICATION",
1187 : "IND_HF_GAIN_MODIFICATION",
1188 : "IND_HF_GAIN_MODIFICATION",
1189 : "IND_HF_GAIN_MODIFICATION",
1190 : "IND_HF_GAIN_MODIFICATION",
1191 : "IND_HF_GAIN_MODIFICATION",
1192 : "IND_HF_GAIN_MODIFICATION",
1193 : "IND_HF_GAIN_MODIFICATION",
1194 : "IND_HF_GAIN_MODIFICATION",
1195 : "IND_HF_GAIN_MODIFICATION",
1196 : "IND_HF_GAIN_MODIFICATION",
1197 : "IND_HF_GAIN_MODIFICATION",
1198 : "IND_HF_GAIN_MODIFICATION",
1199 : "IND_HF_GAIN_MODIFICATION",
1200 : "IND_HF_GAIN_MODIFICATION",
1201 : "IND_HF_GAIN_MODIFICATION",
1202 : "IND_HF_GAIN_MODIFICATION",
1203 : "IND_HF_GAIN_MODIFICATION",
1204 : "IND_HF_GAIN_MODIFICATION",
1205 : "IND_HF_GAIN_MODIFICATION",
1206 : "IND_HF_GAIN_MODIFICATION",
1207 : "IND_HF_GAIN_MODIFICATION",
1208 : "IND_HF_GAIN_MODIFICATION",
1209 : "IND_HF_GAIN_MODIFICATION",
1210 : "IND_HF_GAIN_MODIFICATION",
1211 : "IND_HF_GAIN_MODIFICATION",
1212 : "IND_HF_GAIN_MODIFICATION",
1213 : "IND_HF_GAIN_MODIFICATION",
1214 : "IND_HF_GAIN_MODIFICATION",
1215 : "IND_HF_GAIN_MODIFICATION",
1216 : "IND_HF_GAIN_MODIFICATION",
1217 : "IND_HF_GAIN_MODIFICATION",
1218 : "IND_HF_GAIN_MODIFICATION",
1219 : "IND_HF_GAIN_MODIFICATION",
1220 : "IND_HF_GAIN_MODIFICATION",
1221 : "IND_HF_GAIN_MODIFICATION",
1222 : "IND_HF_GAIN_MODIFICATION",
1223 : "IND_HF_GAIN_MODIFICATION",
1224 : "IND_HF_GAIN_MODIFICATION",
1225 : "IND_HF_GAIN_MODIFICATION",
1226 : "IND_HF_GAIN_MODIFICATION",
1227 : "IND_HF_GAIN_MODIFICATION",
1228 : "IND_HF_GAIN_MODIFICATION",
1229 : "IND_HF_GAIN_MODIFICATION",
1230 : "IND_HF_GAIN_MODIFICATION",
1231 : "IND_HF_GAIN_MODIFICATION",
1232 : "IND_HF_GAIN_MODIFICATION",
1233 : "IND_HF_GAIN_MODIFICATION",
1234 : "IND_HF_GAIN_MODIFICATION",
1235 : "IND_HF_GAIN_MODIFICATION",
1236 : "IND_HF_GAIN_MODIFICATION",
1237 : "IND_HF_GAIN_MODIFICATION",
1238 : "IND_HF_GAIN_MODIFICATION",
1239 : "IND_HF_GAIN_MODIFICATION",
1240 : "IND_HF_GAIN_MODIFICATION",
1241 : "IND_HF_GAIN_MODIFICATION",
1242 : "IND_HF_GAIN_MODIFICATION",
1243 : "IND_HF_GAIN_MODIFICATION",
1244 : "IND_HF_GAIN_MODIFICATION",
1245 : "IND_HF_GAIN_MODIFICATION",
1246 : "IND_HF_GAIN_MODIFICATION",
1247 : "IND_HF_GAIN_MODIFICATION",
1248 : "IND_HF_GAIN_MODIFICATION",
1249 : "IND_HF_GAIN_MODIFICATION",
1250 : "IND_HF_GAIN_MODIFICATION",
1251 : "IND_HF_GAIN_MODIFICATION",
1252 : "IND_HF_GAIN_MODIFICATION",
1253 : "IND_HF_GAIN_MODIFICATION",
1254 : "IND_HF_GAIN_MODIFICATION",
1255 : "IND_HF_GAIN_MODIFICATION",
1256 : "IND_HF_GAIN_MODIFICATION",
1257 : "IND_HF_GAIN_MODIFICATION",
1258 : "IND_HF_GAIN_MODIFICATION",
1259 : "IND_HF_GAIN_MODIFICATION",
1260 : "IND_HF_GAIN_MODIFICATION",
1261 : "IND_HF_GAIN_MODIFICATION",
1262 : "IND_HF_GAIN_MODIFICATION",
1263 : "IND_HF_GAIN_MODIFICATION",
1264 : "IND_HF_GAIN_MODIFICATION",
1265 : "IND_HF_GAIN_MODIFICATION",
1266 : "IND_HF_GAIN_MODIFICATION",
1267 : "IND_HF_GAIN_MODIFICATION",
1268 : "IND_HF_GAIN_MODIFICATION",
1269 : "IND_HF_GAIN_MODIFICATION",
1270 : "IND_HF_GAIN_MODIFICATION",
1271 : "IND_HF_GAIN_MODIFICATION",
1272 : "IND_HF_GAIN_MODIFICATION",
1273 : "IND_HF_GAIN_MODIFICATION",
1274 : "IND_HF_GAIN_MODIFICATION",
1275 : "IND_HF_GAIN_MODIFICATION",
1276 : "IND_HF_GAIN_MODIFICATION",
1277 : "IND_HF_GAIN_MODIFICATION",
1278 : "IND_HF_GAIN_MODIFICATION",
1279 : "IND_HF_GAIN_MODIFICATION",
1280 : "IND_HF_GAIN_MODIFICATION",
1281 : "IND_HF_GAIN_MODIFICATION",
1282 : "IND_HF_GAIN_MODIFICATION",
1283 : "IND_HF_GAIN_MODIFICATION",
1284 : "IND_HF_GAIN_MODIFICATION",
1285 : "IND_HF_GAIN_MODIFICATION",
1286 : "IND_HF_GAIN_MODIFICATION",
1287 : "IND_HF_GAIN_MODIFICATION",
1288 : "IND_HF_GAIN_MODIFICATION",
1289 : "IND_HF_GAIN_MODIFICATION",
1290 : "IND_HF_GAIN_MODIFICATION",
1291 : "IND_HF_GAIN_MODIFICATION",
1292 : "IND_HF_GAIN_MODIFICATION",
1293 : "IND_HF_GAIN_MODIFICATION",
1294 : "IND_HF_GAIN_MODIFICATION",
1295 : "IND_HF_GAIN_MODIFICATION",
1296 : "IND_HF_GAIN_MODIFICATION",
1297 : "IND_HF_GAIN_MODIFICATION",
1298 : "IND_HF_GAIN_MODIFICATION",
1299 : "IND_HF_GAIN_MODIFICATION",
1300 : "IND_HF_GAIN_MODIFICATION",
1301 : "IND_HF_GAIN_MODIFICATION",
1302 : "IND_HF_GAIN_MODIFICATION",
1303 : "IND_HF_GAIN_MODIFICATION",
1304 : "IND_HF_GAIN_MODIFICATION",
1305 : "IND_HF_GAIN_MODIFICATION",
1306 : "IND_HF_GAIN_MODIFICATION",
1307 : "IND_HF_GAIN_MODIFICATION",
1308 : "IND_HF_GAIN_MODIFICATION",
1309 : "IND_HF_GAIN_MODIFICATION",
1310 : "IND_HF_GAIN_MODIFICATION",
1311 : "IND_HF_GAIN_MODIFICATION",
1312 : "IND_HF_GAIN_MODIFICATION",
1313 : "IND_HF_GAIN_MODIFICATION",
1314 : "IND_HF_GAIN_MODIFICATION",
1315 : "IND_HF_GAIN_MODIFICATION",
1316 : "IND_HF_GAIN_MODIFICATION",
1317 : "IND_HF_GAIN_MODIFICATION",
1318 : "IND_HF_GAIN_MODIFICATION",
1319 : "IND_HF_GAIN_MODIFICATION",
1320 : "IND_HF_GAIN_MODIFICATION",
1321 : "IND_HF_GAIN_MODIFICATION",
1322 : "IND_HF_GAIN_MODIFICATION",
1323 : "IND_HF_GAIN_MODIFICATION",
1324 : "IND_HF_GAIN_MODIFICATION",
1325 : "IND_HF_GAIN_MODIFICATION",
1326 : "IND_HF_GAIN_MODIFICATION",
1327 : "IND_HF_GAIN_MODIFICATION",
1328 : "IND_HF_GAIN_MODIFICATION",
1329 : "IND_HF_GAIN_MODIFICATION",
1330 : "IND_HF_GAIN_MODIFICATION",
1331 : "IND_HF_GAIN_MODIFICATION",
1332 : "IND_HF_GAIN_MODIFICATION",
1333 : "IND_HF_GAIN_MODIFICATION",
1334 : "IND_HF_GAIN_MODIFICATION",
1335 : "IND_HF_GAIN_MODIFICATION",
1336 : "IND_HF_GAIN_MODIFICATION",
1337 : "IND_HF_GAIN_MODIFICATION",
1338 : "IND_HF_GAIN_MODIFICATION",
1339 : "IND_HF_GAIN_MODIFICATION",
1340 : "IND_HF_GAIN_MODIFICATION",
1341 : "IND_HF_GAIN_MODIFICATION",
1342 : "IND_HF_GAIN_MODIFICATION",
1343 : "IND_HF_GAIN_MODIFICATION",
1344 : "IND_HF_GAIN_MODIFICATION",
1345 : "IND_HF_GAIN_MODIFICATION",
1346 : "IND_HF_GAIN_MODIFICATION",
1347 : "IND_HF_GAIN_MODIFICATION",
1348 : "IND_HF_GAIN_MODIFICATION",
1349 : "IND_HF_GAIN_MODIFICATION",
1350 : "IND_HF_GAIN_MODIFICATION",
1351 : "IND_HF_GAIN_MODIFICATION",
1352 : "IND_HF_GAIN_MODIFICATION",
1353 : "IND_HF_GAIN_MODIFICATION",
1354 : "IND_HF_GAIN_MODIFICATION",
1355 : "IND_HF_GAIN_MODIFICATION",
1356 : "IND_HF_GAIN_MODIFICATION",
1357 : "IND_HF_GAIN_MODIFICATION",
1358 : "IND_HF_GAIN_MODIFICATION",
1359 : "IND_HF_GAIN_MODIFICATION",
1360 : "IND_HF_GAIN_MODIFICATION",
1361 : "IND_HF_GAIN_MODIFICATION",
1362 : "IND_HF_GAIN_MODIFICATION",
1363 : "IND_HF_GAIN_MODIFICATION",
1364 : "IND_HF_GAIN_MODIFICATION",
1365 : "IND_HF_GAIN_MODIFICATION",
1366 : "IND_HF_GAIN_MODIFICATION",
1367 : "IND_HF_GAIN_MODIFICATION",
1368 : "IND_HF_GAIN_MODIFICATION",
1369 : "IND_HF_GAIN_MODIFICATION",
1370 : "IND_HF_GAIN_MODIFICATION",
1371 : "IND_HF_GAIN_MODIFICATION",
1372 : "IND_HF_GAIN_MODIFICATION",
1373 : "IND_HF_GAIN_MODIFICATION",
1374 : "IND_HF_GAIN_MODIFICATION",
1375 : "IND_HF_GAIN_MODIFICATION",
1376 : "IND_HF_GAIN_MODIFICATION",
1377 : "IND_HF_GAIN_MODIFICATION",
1378 : "IND_HF_GAIN_MODIFICATION",
1379 : "IND_HF_GAIN_MODIFICATION",
1380 : "IND_HF_GAIN_MODIFICATION",
1381 : "IND_HF_GAIN_MODIFICATION",
1382 : "IND_HF_GAIN_MODIFICATION",
1383 : "IND_HF_GAIN_MODIFICATION",
1384 : "IND_HF_GAIN_MODIFICATION",
1385 : "IND_HF_GAIN_MODIFICATION",
1386 : "IND_HF_GAIN_MODIFICATION",
1387 : "IND_HF_GAIN_MODIFICATION",
1388 : "IND_HF_GAIN_MODIFICATION",
1389 : "IND_HF_GAIN_MODIFICATION",
1390 : "IND_HF_GAIN_MODIFICATION",
1391 : "IND_HF_GAIN_MODIFICATION",
1392 : "IND_HF_GAIN_MODIFICATION",
1393 : "IND_HF_GAIN_MODIFICATION",
1394 : "IND_HF_GAIN_MODIFICATION",
1395 : "IND_HF_GAIN_MODIFICATION",
1396 : "IND_HF_GAIN_MODIFICATION",
1397 : "IND_HF_GAIN_MODIFICATION",
1398 : "IND_HF_GAIN_MODIFICATION",
1399 : "IND_HF_GAIN_MODIFICATION",
1400 : "IND_HF_GAIN_MODIFICATION",
1401 : "IND_HF_GAIN_MODIFICATION",
1402 : "IND_HF_GAIN_MODIFICATION",
1403 : "IND_HF_GAIN_MODIFICATION",
1404 : "IND_HF_GAIN_MODIFICATION",
1405 : "IND_HF_GAIN_MODIFICATION",
1406 : "IND_HF_GAIN_MODIFICATION",
1407 : "IND_HF_GAIN_MODIFICATION",
1408 : "IND_HF_GAIN_MODIFICATION",
1409 : "IND_HF_GAIN_MODIFICATION",
1410 : "IND_HF_GAIN_MODIFICATION",
1411 : "IND_HF_GAIN_MODIFICATION",
1412 : "IND_HF_GAIN_MODIFICATION",
1413 : "IND_HF_GAIN_MODIFICATION",
1414 : "IND_HF_GAIN_MODIFICATION",
1415 : "IND_HF_GAIN_MODIFICATION",
1416 : "IND_HF_GAIN_MODIFICATION",
1417 : "IND_HF_GAIN_MODIFICATION",
1418 : "IND_HF_GAIN_MODIFICATION",
1419 : "IND_HF_GAIN_MODIFICATION",
1420 : "IND_HF_GAIN_MODIFICATION",
1421 : "IND_HF_GAIN_MODIFICATION",
1422 : "IND_HF_GAIN_MODIFICATION",
1423 : "IND_HF_GAIN_MODIFICATION",
1424 : "IND_HF_GAIN_MODIFICATION",
1425 : "IND_HF_GAIN_MODIFICATION",
1426 : "IND_HF_GAIN_MODIFICATION",
1427 : "IND_HF_GAIN_MODIFICATION",
1428 : "IND_HF_GAIN_MODIFICATION",
1429 : "IND_HF_GAIN_MODIFICATION",
1430 : "IND_HF_GAIN_MODIFICATION",
1431 : "IND_HF_GAIN_MODIFICATION",
1432 : "IND_HF_GAIN_MODIFICATION",
1433 : "IND_HF_GAIN_MODIFICATION",
1434 : "IND_HF_GAIN_MODIFICATION",
1435 : "IND_HF_GAIN_MODIFICATION",
1436 : "IND_HF_GAIN_MODIFICATION",
1437 : "IND_HF_GAIN_MODIFICATION",
1438 : "IND_HF_GAIN_MODIFICATION",
1439 : "IND_HF_GAIN_MODIFICATION",
1440 : "IND_HF_GAIN_MODIFICATION",
1441 : "IND_HF_GAIN_MODIFICATION",
1442 : "IND_HF_GAIN_MODIFICATION",
1443 : "IND_HF_GAIN_MODIFICATION",
1444 : "IND_HF_GAIN_MODIFICATION",
1445 : "IND_HF_GAIN_MODIFICATION",
1446 : "IND_HF_GAIN_MODIFICATION",
1447 : "IND_HF_GAIN_MODIFICATION",
1448 : "IND_HF_GAIN_MODIFICATION",
1449 : "IND_HF_GAIN_MODIFICATION",
1450 : "IND_HF_GAIN_MODIFICATION",
1451 : "IND_HF_GAIN_MODIFICATION",
1452 : "IND_HF_GAIN_MODIFICATION",
1453 : "IND_HF_GAIN_MODIFICATION",
1454 : "IND_HF_GAIN_MODIFICATION",
1455 : "IND_HF_GAIN_MODIFICATION",
1456 : "IND_HF_GAIN_MODIFICATION",
1457 : "IND_HF_GAIN_MODIFICATION",
1458 : "IND_HF_GAIN_MODIFICATION",
1459 : "IND_HF_GAIN_MODIFICATION",
1460 : "IND_HF_GAIN_MODIFICATION",
1461 : "IND_HF_GAIN_MODIFICATION",
1462 : "IND_HF_GAIN_MODIFICATION",
1463 : "IND_HF_GAIN_MODIFICATION",
1464 : "IND_HF_GAIN_MODIFICATION",
1465 : "IND_HF_GAIN_MODIFICATION",
1466 : "IND_HF_GAIN_MODIFICATION",
1467 : "IND_HF_GAIN_MODIFICATION",
1468 : "IND_HF_GAIN_MODIFICATION",
1469 : "IND_HF_GAIN_MODIFICATION",
1470 : "IND_HF_GAIN_MODIFICATION",
1471 : "IND_HF_GAIN_MODIFICATION",
1472 : "IND_HF_GAIN_MODIFICATION",
1473 : "IND_HF_GAIN_MODIFICATION",
1474 : "IND_HF_GAIN_MODIFICATION",
1475 : "IND_HF_GAIN_MODIFICATION",
1476 : "IND_HF_GAIN_MODIFICATION",
1477 : "TAG_ACELP_SUBFR_LOOP_END",
1478 : "IND_MEAN_GAIN2",
1479 : "IND_MEAN_GAIN2",
1480 : "IND_MEAN_GAIN2",
1481 : "IND_MEAN_GAIN2",
1482 : "IND_MEAN_GAIN2",
1483 : "IND_MEAN_GAIN2",
1484 : "IND_MEAN_GAIN2",
1485 : "IND_MEAN_GAIN2",
1486 : "IND_MEAN_GAIN2",
1487 : "IND_MEAN_GAIN2",
1488 : "IND_MEAN_GAIN2",
1489 : "IND_MEAN_GAIN2",
1490 : "IND_MEAN_GAIN2",
1491 : "IND_MEAN_GAIN2",
1492 : "IND_MEAN_GAIN2",
1493 : "IND_MEAN_GAIN2",
1494 : "IND_MEAN_GAIN2",
1495 : "IND_MEAN_GAIN2",
1496 : "IND_MEAN_GAIN2",
1497 : "IND_MEAN_GAIN2",
1498 : "IND_MEAN_GAIN2",
1499 : "IND_MEAN_GAIN2",
1500 : "IND_MEAN_GAIN2",
1501 : "IND_MEAN_GAIN2",
1502 : "IND_MEAN_GAIN2",
1503 : "IND_MEAN_GAIN2",
1504 : "IND_MEAN_GAIN2",
1505 : "IND_MEAN_GAIN2",
1506 : "IND_MEAN_GAIN2",
1507 : "IND_MEAN_GAIN2",
1508 : "IND_MEAN_GAIN2",
1509 : "IND_MEAN_GAIN2",
1510 : "IND_Y_GAIN_TMP",
1511 : "IND_Y_GAIN_TMP",
1512 : "IND_Y_GAIN_TMP",
1513 : "IND_Y_GAIN_TMP",
1514 : "IND_Y_GAIN_TMP",
1515 : "IND_Y_GAIN_TMP",
1516 : "IND_Y_GAIN_TMP",
1517 : "IND_Y_GAIN_TMP",
1518 : "IND_Y_GAIN_TMP",
1519 : "IND_Y_GAIN_TMP",
1520 : "IND_Y_GAIN_TMP",
1521 : "IND_Y_GAIN_TMP",
1522 : "IND_Y_GAIN_TMP",
1523 : "IND_Y_GAIN_TMP",
1524 : "IND_Y_GAIN_TMP",
1525 : "IND_Y_GAIN_TMP",
1526 : "IND_Y_GAIN_TMP",
1527 : "IND_Y_GAIN_TMP",
1528 : "IND_Y_GAIN_TMP",
1529 : "IND_Y_GAIN_TMP",
1530 : "IND_Y_GAIN_TMP",
1531 : "IND_Y_GAIN_TMP",
1532 : "IND_Y_GAIN_TMP",
1533 : "IND_Y_GAIN_TMP",
1534 : "IND_Y_GAIN_TMP",
1535 : "IND_Y_GAIN_TMP",
1536 : "IND_Y_GAIN_TMP",
1537 : "IND_Y_GAIN_TMP",
1538 : "IND_Y_GAIN_TMP",
1539 : "IND_Y_GAIN_TMP",
1540 : "IND_Y_GAIN_TMP",
1541 : "IND_Y_GAIN_TMP",
1542 : "IND_Y_GAIN_HF",
1543 : "IND_HQ_VOICING_FLAG",
1544 : "IND_HQ_SWB_CLAS",
1545 : "IND_NF_IDX",
1546 : "IND_LC_MODE",
1547 : "IND_YNRM",
1548 : "IND_YNRM",
1549 : "IND_YNRM",
1550 : "IND_YNRM",
1551 : "IND_YNRM",
1552 : "IND_YNRM",
1553 : "IND_YNRM",
1554 : "IND_YNRM",
1555 : "IND_YNRM",
1556 : "IND_YNRM",
1557 : "IND_YNRM",
1558 : "IND_YNRM",
1559 : "IND_YNRM",
1560 : "IND_YNRM",
1561 : "IND_YNRM",
1562 : "IND_YNRM",
1563 : "IND_YNRM",
1564 : "IND_YNRM",
1565 : "IND_YNRM",
1566 : "IND_YNRM",
1567 : "IND_YNRM",
1568 : "IND_YNRM",
1569 : "IND_YNRM",
1570 : "IND_YNRM",
1571 : "IND_YNRM",
1572 : "IND_YNRM",
1573 : "IND_YNRM",
1574 : "IND_YNRM",
1575 : "IND_YNRM",
1576 : "IND_YNRM",
1577 : "IND_YNRM",
1578 : "IND_YNRM",
1579 : "IND_YNRM",
1580 : "IND_YNRM",
1581 : "IND_YNRM",
1582 : "IND_YNRM",
1583 : "IND_YNRM",
1584 : "IND_YNRM",
1585 : "IND_YNRM",
1586 : "IND_YNRM",
1587 : "IND_YNRM",
1588 : "IND_YNRM",
1589 : "IND_YNRM",
1590 : "IND_YNRM",
1591 : "IND_SWB_FENV_HQ",
1592 : "IND_SWB_FENV_HQ",
1593 : "IND_SWB_FENV_HQ",
1594 : "IND_SWB_FENV_HQ",
1595 : "IND_SWB_FENV_HQ",
1596 : "IND_FB_FENV_HQ",
1597 : "IND_FB_FENV_HQ",
1598 : "IND_FB_FENV_HQ",
1599 : "IND_FB_FENV_HQ",
1600 : "IND_FB_FENV_HQ",
1601 : "IND_DELTA_ENV_HQ",
1602 : "IND_HVQ_BWE_NL",
1603 : "IND_HVQ_BWE_NL",
1604 : "IND_NUM_PEAKS",
1605 : "IND_POS_IDX",
1606 : "IND_POS_IDX",
1607 : "IND_POS_IDX",
1608 : "IND_POS_IDX",
1609 : "IND_POS_IDX",
1610 : "IND_POS_IDX",
1611 : "IND_POS_IDX",
1612 : "IND_POS_IDX",
1613 : "IND_POS_IDX",
1614 : "IND_POS_IDX",
1615 : "IND_POS_IDX",
1616 : "IND_POS_IDX",
1617 : "IND_POS_IDX",
1618 : "IND_POS_IDX",
1619 : "IND_POS_IDX",
1620 : "IND_POS_IDX",
1621 : "IND_POS_IDX",
1622 : "IND_POS_IDX",
1623 : "IND_POS_IDX",
1624 : "IND_POS_IDX",
1625 : "IND_POS_IDX",
1626 : "IND_POS_IDX",
1627 : "IND_POS_IDX",
1628 : "IND_POS_IDX",
1629 : "IND_POS_IDX",
1630 : "IND_POS_IDX",
1631 : "IND_POS_IDX",
1632 : "IND_POS_IDX",
1633 : "IND_POS_IDX",
1634 : "IND_POS_IDX",
1635 : "IND_POS_IDX",
1636 : "IND_POS_IDX",
1637 : "IND_POS_IDX",
1638 : "IND_POS_IDX",
1639 : "IND_POS_IDX",
1640 : "IND_POS_IDX",
1641 : "IND_POS_IDX",
1642 : "IND_POS_IDX",
1643 : "IND_POS_IDX",
1644 : "IND_POS_IDX",
1645 : "IND_POS_IDX",
1646 : "IND_POS_IDX",
1647 : "IND_POS_IDX",
1648 : "IND_POS_IDX",
1649 : "IND_POS_IDX",
1650 : "IND_POS_IDX",
1651 : "IND_POS_IDX",
1652 : "IND_POS_IDX",
1653 : "IND_POS_IDX",
1654 : "IND_POS_IDX",
1655 : "IND_POS_IDX",
1656 : "IND_POS_IDX",
1657 : "IND_POS_IDX",
1658 : "IND_POS_IDX",
1659 : "IND_POS_IDX",
1660 : "IND_POS_IDX",
1661 : "IND_POS_IDX",
1662 : "IND_POS_IDX",
1663 : "IND_POS_IDX",
1664 : "IND_POS_IDX",
1665 : "IND_POS_IDX",
1666 : "IND_POS_IDX",
1667 : "IND_POS_IDX",
1668 : "IND_POS_IDX",
1669 : "IND_POS_IDX",
1670 : "IND_POS_IDX",
1671 : "IND_POS_IDX",
1672 : "IND_POS_IDX",
1673 : "IND_POS_IDX",
1674 : "IND_POS_IDX",
1675 : "IND_POS_IDX",
1676 : "IND_POS_IDX",
1677 : "IND_POS_IDX",
1678 : "IND_POS_IDX",
1679 : "IND_POS_IDX",
1680 : "IND_POS_IDX",
1681 : "IND_POS_IDX",
1682 : "IND_POS_IDX",
1683 : "IND_POS_IDX",
1684 : "IND_POS_IDX",
1685 : "IND_POS_IDX",
1686 : "IND_POS_IDX",
1687 : "IND_POS_IDX",
1688 : "IND_POS_IDX",
1689 : "IND_POS_IDX",
1690 : "IND_POS_IDX",
1691 : "IND_POS_IDX",
1692 : "IND_POS_IDX",
1693 : "IND_POS_IDX",
1694 : "IND_POS_IDX",
1695 : "IND_POS_IDX",
1696 : "IND_POS_IDX",
1697 : "IND_POS_IDX",
1698 : "IND_POS_IDX",
1699 : "IND_POS_IDX",
1700 : "IND_POS_IDX",
1701 : "IND_POS_IDX",
1702 : "IND_POS_IDX",
1703 : "IND_POS_IDX",
1704 : "IND_POS_IDX",
1705 : "IND_POS_IDX",
1706 : "IND_POS_IDX",
1707 : "IND_POS_IDX",
1708 : "IND_POS_IDX",
1709 : "IND_POS_IDX",
1710 : "IND_POS_IDX",
1711 : "IND_POS_IDX",
1712 : "IND_POS_IDX",
1713 : "IND_POS_IDX",
1714 : "IND_POS_IDX",
1715 : "IND_POS_IDX",
1716 : "IND_POS_IDX",
1717 : "IND_POS_IDX",
1718 : "IND_POS_IDX",
1719 : "IND_POS_IDX",
1720 : "IND_POS_IDX",
1721 : "IND_POS_IDX",
1722 : "IND_POS_IDX",
1723 : "IND_POS_IDX",
1724 : "IND_POS_IDX",
1725 : "IND_POS_IDX",
1726 : "IND_POS_IDX",
1727 : "IND_POS_IDX",
1728 : "IND_POS_IDX",
1729 : "IND_POS_IDX",
1730 : "IND_POS_IDX",
1731 : "IND_POS_IDX",
1732 : "IND_POS_IDX",
1733 : "IND_POS_IDX",
1734 : "IND_POS_IDX",
1735 : "IND_POS_IDX",
1736 : "IND_POS_IDX",
1737 : "IND_POS_IDX",
1738 : "IND_POS_IDX",
1739 : "IND_POS_IDX",
1740 : "IND_POS_IDX",
1741 : "IND_POS_IDX",
1742 : "IND_POS_IDX",
1743 : "IND_POS_IDX",
1744 : "IND_POS_IDX",
1745 : "IND_POS_IDX",
1746 : "IND_POS_IDX",
1747 : "IND_POS_IDX",
1748 : "IND_POS_IDX",
1749 : "IND_POS_IDX",
1750 : "IND_POS_IDX",
1751 : "IND_POS_IDX",
1752 : "IND_POS_IDX",
1753 : "IND_POS_IDX",
1754 : "IND_POS_IDX",
1755 : "IND_POS_IDX",
1756 : "IND_POS_IDX",
1757 : "IND_POS_IDX",
1758 : "IND_POS_IDX",
1759 : "IND_POS_IDX",
1760 : "IND_POS_IDX",
1761 : "IND_POS_IDX",
1762 : "IND_POS_IDX",
1763 : "IND_POS_IDX",
1764 : "IND_POS_IDX",
1765 : "IND_POS_IDX",
1766 : "IND_POS_IDX",
1767 : "IND_POS_IDX",
1768 : "IND_POS_IDX",
1769 : "IND_POS_IDX",
1770 : "IND_POS_IDX",
1771 : "IND_POS_IDX",
1772 : "IND_POS_IDX",
1773 : "IND_POS_IDX",
1774 : "IND_POS_IDX",
1775 : "IND_POS_IDX",
1776 : "IND_POS_IDX",
1777 : "IND_POS_IDX",
1778 : "IND_POS_IDX",
1779 : "IND_POS_IDX",
1780 : "IND_POS_IDX",
1781 : "IND_POS_IDX",
1782 : "IND_POS_IDX",
1783 : "IND_POS_IDX",
1784 : "IND_POS_IDX",
1785 : "IND_POS_IDX",
1786 : "IND_POS_IDX",
1787 : "IND_POS_IDX",
1788 : "IND_POS_IDX",
1789 : "IND_POS_IDX",
1790 : "IND_POS_IDX",
1791 : "IND_POS_IDX",
1792 : "IND_POS_IDX",
1793 : "IND_POS_IDX",
1794 : "IND_POS_IDX",
1795 : "IND_POS_IDX",
1796 : "IND_POS_IDX",
1797 : "IND_POS_IDX",
1798 : "IND_POS_IDX",
1799 : "IND_POS_IDX",
1800 : "IND_POS_IDX",
1801 : "IND_POS_IDX",
1802 : "IND_POS_IDX",
1803 : "IND_POS_IDX",
1804 : "IND_POS_IDX",
1805 : "IND_POS_IDX",
1806 : "IND_POS_IDX",
1807 : "IND_POS_IDX",
1808 : "IND_POS_IDX",
1809 : "IND_POS_IDX",
1810 : "IND_POS_IDX",
1811 : "IND_POS_IDX",
1812 : "IND_POS_IDX",
1813 : "IND_POS_IDX",
1814 : "IND_POS_IDX",
1815 : "IND_POS_IDX",
1816 : "IND_POS_IDX",
1817 : "IND_POS_IDX",
1818 : "IND_POS_IDX",
1819 : "IND_POS_IDX",
1820 : "IND_POS_IDX",
1821 : "IND_POS_IDX",
1822 : "IND_POS_IDX",
1823 : "IND_POS_IDX",
1824 : "IND_POS_IDX",
1825 : "IND_POS_IDX",
1826 : "IND_POS_IDX",
1827 : "IND_POS_IDX",
1828 : "IND_POS_IDX",
1829 : "IND_POS_IDX",
1830 : "IND_POS_IDX",
1831 : "IND_POS_IDX",
1832 : "IND_POS_IDX",
1833 : "IND_POS_IDX",
1834 : "IND_POS_IDX",
1835 : "IND_POS_IDX",
1836 : "IND_POS_IDX",
1837 : "IND_POS_IDX",
1838 : "IND_POS_IDX",
1839 : "IND_POS_IDX",
1840 : "IND_POS_IDX",
1841 : "IND_POS_IDX",
1842 : "IND_POS_IDX",
1843 : "IND_POS_IDX",
1844 : "IND_POS_IDX",
1845 : "IND_POS_IDX",
1846 : "IND_POS_IDX",
1847 : "IND_POS_IDX",
1848 : "IND_POS_IDX",
1849 : "IND_POS_IDX",
1850 : "IND_POS_IDX",
1851 : "IND_POS_IDX",
1852 : "IND_POS_IDX",
1853 : "IND_POS_IDX",
1854 : "IND_POS_IDX",
1855 : "IND_POS_IDX",
1856 : "IND_POS_IDX",
1857 : "IND_POS_IDX",
1858 : "IND_POS_IDX",
1859 : "IND_POS_IDX",
1860 : "IND_POS_IDX",
1861 : "IND_POS_IDX",
1862 : "IND_POS_IDX",
1863 : "IND_POS_IDX",
1864 : "IND_POS_IDX",
1865 : "IND_POS_IDX",
1866 : "IND_POS_IDX",
1867 : "IND_POS_IDX",
1868 : "IND_POS_IDX",
1869 : "IND_POS_IDX",
1870 : "IND_POS_IDX",
1871 : "IND_POS_IDX",
1872 : "IND_POS_IDX",
1873 : "IND_POS_IDX",
1874 : "IND_POS_IDX",
1875 : "IND_POS_IDX",
1876 : "IND_POS_IDX",
1877 : "IND_POS_IDX",
1878 : "IND_POS_IDX",
1879 : "IND_POS_IDX",
1880 : "IND_POS_IDX",
1881 : "IND_POS_IDX",
1882 : "IND_POS_IDX",
1883 : "IND_POS_IDX",
1884 : "IND_POS_IDX",
1885 : "IND_FLAGN",
1886 : "IND_PG_IDX",
1887 : "IND_PG_IDX",
1888 : "IND_PG_IDX",
1889 : "IND_PG_IDX",
1890 : "IND_PG_IDX",
1891 : "IND_PG_IDX",
1892 : "IND_PG_IDX",
1893 : "IND_PG_IDX",
1894 : "IND_PG_IDX",
1895 : "IND_PG_IDX",
1896 : "IND_PG_IDX",
1897 : "IND_PG_IDX",
1898 : "IND_PG_IDX",
1899 : "IND_PG_IDX",
1900 : "IND_PG_IDX",
1901 : "IND_PG_IDX",
1902 : "IND_PG_IDX",
1903 : "IND_PG_IDX",
1904 : "IND_PG_IDX",
1905 : "IND_PG_IDX",
1906 : "IND_PG_IDX",
1907 : "IND_PG_IDX",
1908 : "IND_PG_IDX",
1909 : "IND_PG_IDX",
1910 : "IND_PG_IDX",
1911 : "IND_PG_IDX",
1912 : "IND_PG_IDX",
1913 : "IND_PG_IDX",
1914 : "IND_PG_IDX",
1915 : "IND_PG_IDX",
1916 : "IND_PG_IDX",
1917 : "IND_PG_IDX",
1918 : "IND_PG_IDX",
1919 : "IND_PG_IDX",
1920 : "IND_PG_IDX",
1921 : "IND_HVQ_PEAKS",
1922 : "IND_HVQ_PEAKS",
1923 : "IND_HVQ_PEAKS",
1924 : "IND_HVQ_PEAKS",
1925 : "IND_HVQ_PEAKS",
1926 : "IND_HVQ_PEAKS",
1927 : "IND_HVQ_PEAKS",
1928 : "IND_HVQ_PEAKS",
1929 : "IND_HVQ_PEAKS",
1930 : "IND_HVQ_PEAKS",
1931 : "IND_HVQ_PEAKS",
1932 : "IND_HVQ_PEAKS",
1933 : "IND_HVQ_PEAKS",
1934 : "IND_HVQ_PEAKS",
1935 : "IND_HVQ_PEAKS",
1936 : "IND_HVQ_PEAKS",
1937 : "IND_HVQ_PEAKS",
1938 : "IND_HVQ_PEAKS",
1939 : "IND_HVQ_PEAKS",
1940 : "IND_HVQ_PEAKS",
1941 : "IND_HVQ_PEAKS",
1942 : "IND_HVQ_PEAKS",
1943 : "IND_HVQ_PEAKS",
1944 : "IND_HVQ_PEAKS",
1945 : "IND_HVQ_PEAKS",
1946 : "IND_HVQ_PEAKS",
1947 : "IND_HVQ_PEAKS",
1948 : "IND_HVQ_PEAKS",
1949 : "IND_HVQ_PEAKS",
1950 : "IND_HVQ_PEAKS",
1951 : "IND_HVQ_PEAKS",
1952 : "IND_HVQ_PEAKS",
1953 : "IND_HVQ_PEAKS",
1954 : "IND_HVQ_PEAKS",
1955 : "IND_HVQ_PEAKS",
1956 : "IND_HVQ_PEAKS",
1957 : "IND_HVQ_PEAKS",
1958 : "IND_HVQ_PEAKS",
1959 : "IND_HVQ_PEAKS",
1960 : "IND_HVQ_PEAKS",
1961 : "IND_HVQ_PEAKS",
1962 : "IND_HVQ_PEAKS",
1963 : "IND_HVQ_PEAKS",
1964 : "IND_HVQ_PEAKS",
1965 : "IND_HVQ_PEAKS",
1966 : "IND_HVQ_PEAKS",
1967 : "IND_HVQ_PEAKS",
1968 : "IND_HVQ_PEAKS",
1969 : "IND_HVQ_PEAKS",
1970 : "IND_HVQ_PEAKS",
1971 : "IND_HVQ_PEAKS",
1972 : "IND_HVQ_PEAKS",
1973 : "IND_HVQ_PEAKS",
1974 : "IND_HVQ_PEAKS",
1975 : "IND_HVQ_PEAKS",
1976 : "IND_HVQ_PEAKS",
1977 : "IND_HVQ_PEAKS",
1978 : "IND_HVQ_PEAKS",
1979 : "IND_HVQ_PEAKS",
1980 : "IND_HVQ_PEAKS",
1981 : "IND_HVQ_PEAKS",
1982 : "IND_HVQ_PEAKS",
1983 : "IND_HVQ_PEAKS",
1984 : "IND_HVQ_PEAKS",
1985 : "IND_HVQ_PEAKS",
1986 : "IND_HVQ_PEAKS",
1987 : "IND_HVQ_PEAKS",
1988 : "IND_HVQ_PEAKS",
1989 : "IND_HVQ_PEAKS",
1990 : "IND_HVQ_PEAKS",
1991 : "IND_HVQ_NF_GAIN",
1992 : "IND_HVQ_NF_GAIN",
1993 : "IND_HQ2_SWB_CLAS",
1994 : "IND_HQ2_DENG_MODE",
1995 : "IND_HQ2_DENG_8SMODE",
1996 : "IND_HQ2_DENG_8SMODE_N0",
1997 : "IND_HQ2_DENG_8SMODE_N1",
1998 : "IND_HQ2_DENG_8SPOS",
1999 : "IND_HQ2_DENG_8SDEPTH",
2000 : "IND_HQ2_DENG_HMODE",
2001 : "IND_HQ2_DIFF_ENERGY",
2002 : "IND_HQ2_DIFF_ENERGY",
2003 : "IND_HQ2_DIFF_ENERGY",
2004 : "IND_HQ2_DIFF_ENERGY",
2005 : "IND_HQ2_DIFF_ENERGY",
2006 : "IND_HQ2_DIFF_ENERGY",
2007 : "IND_HQ2_DIFF_ENERGY",
2008 : "IND_HQ2_DIFF_ENERGY",
2009 : "IND_HQ2_DIFF_ENERGY",
2010 : "IND_HQ2_DIFF_ENERGY",
2011 : "IND_HQ2_DIFF_ENERGY",
2012 : "IND_HQ2_DIFF_ENERGY",
2013 : "IND_HQ2_DIFF_ENERGY",
2014 : "IND_HQ2_DIFF_ENERGY",
2015 : "IND_HQ2_DIFF_ENERGY",
2016 : "IND_HQ2_DIFF_ENERGY",
2017 : "IND_HQ2_DIFF_ENERGY",
2018 : "IND_HQ2_DIFF_ENERGY",
2019 : "IND_HQ2_DIFF_ENERGY",
2020 : "IND_HQ2_DIFF_ENERGY",
2021 : "IND_HQ2_DIFF_ENERGY",
2022 : "IND_HQ2_DIFF_ENERGY",
2023 : "IND_HQ2_DIFF_ENERGY",
2024 : "IND_HQ2_DIFF_ENERGY",
2025 : "IND_HQ2_DIFF_ENERGY",
2026 : "IND_HQ2_DIFF_ENERGY",
2027 : "IND_HQ2_DIFF_ENERGY",
2028 : "IND_HQ2_DIFF_ENERGY",
2029 : "IND_HQ2_DIFF_ENERGY",
2030 : "IND_HQ2_DIFF_ENERGY",
2031 : "IND_HQ2_DIFF_ENERGY",
2032 : "IND_HQ2_DIFF_ENERGY",
2033 : "IND_HQ2_DIFF_ENERGY",
2034 : "IND_HQ2_DIFF_ENERGY",
2035 : "IND_HQ2_DIFF_ENERGY",
2036 : "IND_HQ2_DIFF_ENERGY",
2037 : "IND_HQ2_DIFF_ENERGY",
2038 : "IND_HQ2_DIFF_ENERGY",
2039 : "IND_HQ2_DIFF_ENERGY",
2040 : "IND_HQ2_DIFF_ENERGY",
2041 : "IND_HQ2_DIFF_ENERGY",
2042 : "IND_HQ2_DIFF_ENERGY",
2043 : "IND_HQ2_DIFF_ENERGY",
2044 : "IND_HQ2_DIFF_ENERGY",
2045 : "IND_HQ2_DIFF_ENERGY",
2046 : "IND_HQ2_DIFF_ENERGY",
2047 : "IND_HQ2_DIFF_ENERGY",
2048 : "IND_HQ2_DIFF_ENERGY",
2049 : "IND_HQ2_DIFF_ENERGY",
2050 : "IND_HQ2_DIFF_ENERGY",
2051 : "IND_HQ2_DIFF_ENERGY",
2052 : "IND_HQ2_DIFF_ENERGY",
2053 : "IND_HQ2_DIFF_ENERGY",
2054 : "IND_HQ2_DIFF_ENERGY",
2055 : "IND_HQ2_DIFF_ENERGY",
2056 : "IND_HQ2_DIFF_ENERGY",
2057 : "IND_HQ2_DIFF_ENERGY",
2058 : "IND_HQ2_DIFF_ENERGY",
2059 : "IND_HQ2_DIFF_ENERGY",
2060 : "IND_HQ2_DIFF_ENERGY",
2061 : "IND_HQ2_DIFF_ENERGY",
2062 : "IND_HQ2_DIFF_ENERGY",
2063 : "IND_HQ2_DIFF_ENERGY",
2064 : "IND_HQ2_DIFF_ENERGY",
2065 : "IND_HQ2_DIFF_ENERGY",
2066 : "IND_HQ2_DIFF_ENERGY",
2067 : "IND_HQ2_DIFF_ENERGY",
2068 : "IND_HQ2_DIFF_ENERGY",
2069 : "IND_HQ2_DIFF_ENERGY",
2070 : "IND_HQ2_DIFF_ENERGY",
2071 : "IND_HQ2_DIFF_ENERGY",
2072 : "IND_HQ2_DIFF_ENERGY",
2073 : "IND_HQ2_DIFF_ENERGY",
2074 : "IND_HQ2_DIFF_ENERGY",
2075 : "IND_HQ2_DIFF_ENERGY",
2076 : "IND_HQ2_DIFF_ENERGY",
2077 : "IND_HQ2_DIFF_ENERGY",
2078 : "IND_HQ2_DIFF_ENERGY",
2079 : "IND_HQ2_DIFF_ENERGY",
2080 : "IND_HQ2_DIFF_ENERGY",
2081 : "IND_HQ2_DIFF_ENERGY",
2082 : "IND_HQ2_DIFF_ENERGY",
2083 : "IND_HQ2_DIFF_ENERGY",
2084 : "IND_HQ2_DIFF_ENERGY",
2085 : "IND_HQ2_DIFF_ENERGY",
2086 : "IND_HQ2_DIFF_ENERGY",
2087 : "IND_HQ2_DIFF_ENERGY",
2088 : "IND_HQ2_DIFF_ENERGY",
2089 : "IND_HQ2_DIFF_ENERGY",
2090 : "IND_HQ2_DIFF_ENERGY",
2091 : "IND_HQ2_DIFF_ENERGY",
2092 : "IND_HQ2_DIFF_ENERGY",
2093 : "IND_HQ2_DIFF_ENERGY",
2094 : "IND_HQ2_DIFF_ENERGY",
2095 : "IND_HQ2_DIFF_ENERGY",
2096 : "IND_HQ2_DIFF_ENERGY",
2097 : "IND_HQ2_DIFF_ENERGY",
2098 : "IND_HQ2_DIFF_ENERGY",
2099 : "IND_HQ2_DIFF_ENERGY",
2100 : "IND_HQ2_DIFF_ENERGY",
2101 : "IND_HQ2_P2A_FLAGS",
2102 : "IND_HQ2_P2A_FLAGS",
2103 : "IND_HQ2_P2A_FLAGS",
2104 : "IND_HQ2_P2A_FLAGS",
2105 : "IND_HQ2_P2A_FLAGS",
2106 : "IND_HQ2_P2A_FLAGS",
2107 : "IND_HQ2_P2A_FLAGS",
2108 : "IND_HQ2_P2A_FLAGS",
2109 : "IND_HQ2_P2A_FLAGS",
2110 : "IND_HQ2_P2A_FLAGS",
2111 : "IND_HQ2_P2A_FLAGS",
2112 : "IND_HQ2_P2A_FLAGS",
2113 : "IND_HQ2_P2A_FLAGS",
2114 : "IND_HQ2_P2A_FLAGS",
2115 : "IND_HQ2_P2A_FLAGS",
2116 : "IND_HQ2_P2A_FLAGS",
2117 : "IND_HQ2_P2A_FLAGS",
2118 : "IND_HQ2_P2A_FLAGS",
2119 : "IND_HQ2_P2A_FLAGS",
2120 : "IND_HQ2_P2A_FLAGS",
2121 : "IND_HQ2_P2A_FLAGS",
2122 : "IND_HQ2_P2A_FLAGS",
2123 : "IND_HQ2_P2A_FLAGS",
2124 : "IND_HQ2_P2A_FLAGS",
2125 : "IND_HQ2_P2A_FLAGS",
2126 : "IND_HQ2_P2A_FLAGS",
2127 : "IND_HQ2_P2A_FLAGS",
2128 : "IND_HQ2_P2A_FLAGS",
2129 : "IND_HQ2_P2A_FLAGS",
2130 : "IND_HQ2_P2A_FLAGS",
2131 : "IND_HQ2_P2A_FLAGS",
2132 : "IND_HQ2_P2A_FLAGS",
2133 : "IND_HQ2_P2A_FLAGS",
2134 : "IND_HQ2_P2A_FLAGS",
2135 : "IND_HQ2_P2A_FLAGS",
2136 : "IND_HQ2_P2A_FLAGS",
2137 : "IND_HQ2_P2A_FLAGS",
2138 : "IND_HQ2_P2A_FLAGS",
2139 : "IND_HQ2_P2A_FLAGS",
2140 : "IND_HQ2_P2A_FLAGS",
2141 : "IND_HQ2_P2A_FLAGS",
2142 : "IND_HQ2_P2A_FLAGS",
2143 : "IND_HQ2_P2A_FLAGS",
2144 : "IND_HQ2_P2A_FLAGS",
2145 : "IND_HQ2_P2A_FLAGS",
2146 : "IND_HQ2_P2A_FLAGS",
2147 : "IND_HQ2_P2A_FLAGS",
2148 : "IND_HQ2_P2A_FLAGS",
2149 : "IND_HQ2_P2A_FLAGS",
2150 : "IND_HQ2_P2A_FLAGS",
2151 : "IND_HQ2_P2A_FLAGS",
2152 : "IND_HQ2_P2A_FLAGS",
2153 : "IND_HQ2_P2A_FLAGS",
2154 : "IND_HQ2_P2A_FLAGS",
2155 : "IND_HQ2_P2A_FLAGS",
2156 : "IND_HQ2_P2A_FLAGS",
2157 : "IND_HQ2_P2A_FLAGS",
2158 : "IND_HQ2_P2A_FLAGS",
2159 : "IND_HQ2_P2A_FLAGS",
2160 : "IND_HQ2_P2A_FLAGS",
2161 : "IND_HQ2_LAST_BA_MAX_BAND",
2162 : "IND_HQ2_LAST_BA_MAX_BAND",
2163 : "IND_RC_START",
2164 : "IND_RC_START",
2165 : "IND_RC_START",
2166 : "IND_RC_START",
2167 : "IND_RC_START",
2168 : "IND_RC_START",
2169 : "IND_RC_START",
2170 : "IND_RC_START",
2171 : "IND_RC_START",
2172 : "IND_RC_START",
2173 : "IND_RC_START",
2174 : "IND_RC_START",
2175 : "IND_RC_START",
2176 : "IND_RC_START",
2177 : "IND_RC_START",
2178 : "IND_RC_START",
2179 : "IND_RC_START",
2180 : "IND_RC_START",
2181 : "IND_RC_START",
2182 : "IND_RC_START",
2183 : "IND_RC_START",
2184 : "IND_RC_START",
2185 : "IND_RC_START",
2186 : "IND_RC_START",
2187 : "IND_RC_START",
2188 : "IND_RC_START",
2189 : "IND_RC_START",
2190 : "IND_RC_START",
2191 : "IND_RC_START",
2192 : "IND_RC_START",
2193 : "IND_RC_START",
2194 : "IND_RC_START",
2195 : "IND_RC_START",
2196 : "IND_RC_START",
2197 : "IND_RC_START",
2198 : "IND_RC_START",
2199 : "IND_RC_START",
2200 : "IND_RC_START",
2201 : "IND_RC_START",
2202 : "IND_RC_START",
2203 : "IND_RC_START",
2204 : "IND_RC_START",
2205 : "IND_RC_START",
2206 : "IND_RC_START",
2207 : "IND_RC_START",
2208 : "IND_RC_START",
2209 : "IND_RC_START",
2210 : "IND_RC_START",
2211 : "IND_RC_START",
2212 : "IND_RC_START",
2213 : "IND_RC_START",
2214 : "IND_RC_START",
2215 : "IND_RC_START",
2216 : "IND_RC_START",
2217 : "IND_RC_START",
2218 : "IND_RC_START",
2219 : "IND_RC_START",
2220 : "IND_RC_START",
2221 : "IND_RC_START",
2222 : "IND_RC_START",
2223 : "IND_RC_START",
2224 : "IND_RC_START",
2225 : "IND_RC_START",
2226 : "IND_RC_START",
2227 : "IND_RC_START",
2228 : "IND_RC_START",
2229 : "IND_RC_START",
2230 : "IND_RC_START",
2231 : "IND_RC_START",
2232 : "IND_RC_START",
2233 : "IND_RC_START",
2234 : "IND_RC_START",
2235 : "IND_RC_START",
2236 : "IND_RC_START",
2237 : "IND_RC_START",
2238 : "IND_RC_START",
2239 : "IND_RC_START",
2240 : "IND_RC_START",
2241 : "IND_RC_START",
2242 : "IND_RC_START",
2243 : "IND_RC_START",
2244 : "IND_RC_START",
2245 : "IND_RC_START",
2246 : "IND_RC_START",
2247 : "IND_RC_START",
2248 : "IND_RC_START",
2249 : "IND_RC_START",
2250 : "IND_RC_START",
2251 : "IND_RC_START",
2252 : "IND_RC_START",
2253 : "IND_RC_START",
2254 : "IND_RC_START",
2255 : "IND_RC_START",
2256 : "IND_RC_START",
2257 : "IND_RC_START",
2258 : "IND_RC_START",
2259 : "IND_RC_START",
2260 : "IND_RC_START",
2261 : "IND_RC_START",
2262 : "IND_RC_START",
2263 : "IND_RC_START",
2264 : "IND_RC_START",
2265 : "IND_RC_START",
2266 : "IND_RC_START",
2267 : "IND_RC_START",
2268 : "IND_RC_START",
2269 : "IND_RC_START",
2270 : "IND_RC_START",
2271 : "IND_RC_START",
2272 : "IND_RC_START",
2273 : "IND_RC_START",
2274 : "IND_RC_START",
2275 : "IND_RC_START",
2276 : "IND_RC_START",
2277 : "IND_RC_START",
2278 : "IND_RC_START",
2279 : "IND_RC_START",
2280 : "IND_RC_START",
2281 : "IND_RC_START",
2282 : "IND_RC_START",
2283 : "IND_RC_START",
2284 : "IND_RC_START",
2285 : "IND_RC_START",
2286 : "IND_RC_START",
2287 : "IND_RC_START",
2288 : "IND_RC_START",
2289 : "IND_RC_START",
2290 : "IND_RC_START",
2291 : "IND_RC_START",
2292 : "IND_RC_START",
2293 : "IND_RC_START",
2294 : "IND_RC_START",
2295 : "IND_RC_START",
2296 : "IND_RC_START",
2297 : "IND_RC_START",
2298 : "IND_RC_START",
2299 : "IND_RC_START",
2300 : "IND_RC_START",
2301 : "IND_RC_START",
2302 : "IND_RC_START",
2303 : "IND_RC_START",
2304 : "IND_RC_START",
2305 : "IND_RC_START",
2306 : "IND_RC_START",
2307 : "IND_RC_START",
2308 : "IND_RC_START",
2309 : "IND_RC_START",
2310 : "IND_RC_START",
2311 : "IND_RC_START",
2312 : "IND_RC_START",
2313 : "IND_RC_START",
2314 : "IND_RC_START",
2315 : "IND_RC_START",
2316 : "IND_RC_START",
2317 : "IND_RC_START",
2318 : "IND_RC_START",
2319 : "IND_RC_START",
2320 : "IND_RC_START",
2321 : "IND_RC_START",
2322 : "IND_RC_START",
2323 : "IND_RC_START",
2324 : "IND_RC_START",
2325 : "IND_RC_START",
2326 : "IND_RC_START",
2327 : "IND_RC_START",
2328 : "IND_RC_START",
2329 : "IND_RC_START",
2330 : "IND_RC_START",
2331 : "IND_RC_START",
2332 : "IND_RC_START",
2333 : "IND_RC_START",
2334 : "IND_RC_START",
2335 : "IND_RC_START",
2336 : "IND_RC_START",
2337 : "IND_RC_START",
2338 : "IND_RC_START",
2339 : "IND_RC_START",
2340 : "IND_RC_START",
2341 : "IND_RC_START",
2342 : "IND_RC_START",
2343 : "IND_RC_START",
2344 : "IND_RC_START",
2345 : "IND_RC_START",
2346 : "IND_RC_START",
2347 : "IND_RC_START",
2348 : "IND_RC_START",
2349 : "IND_RC_START",
2350 : "IND_RC_START",
2351 : "IND_RC_START",
2352 : "IND_RC_START",
2353 : "IND_RC_START",
2354 : "IND_RC_START",
2355 : "IND_RC_START",
2356 : "IND_RC_START",
2357 : "IND_RC_START",
2358 : "IND_RC_START",
2359 : "IND_RC_START",
2360 : "IND_RC_START",
2361 : "IND_RC_START",
2362 : "IND_RC_START",
2363 : "IND_RC_START",
2364 : "IND_RC_START",
2365 : "IND_RC_START",
2366 : "IND_RC_START",
2367 : "IND_RC_START",
2368 : "IND_RC_START",
2369 : "IND_RC_START",
2370 : "IND_RC_START",
2371 : "IND_RC_START",
2372 : "IND_RC_START",
2373 : "IND_RC_START",
2374 : "IND_RC_START",
2375 : "IND_RC_START",
2376 : "IND_RC_START",
2377 : "IND_RC_START",
2378 : "IND_RC_START",
2379 : "IND_RC_START",
2380 : "IND_RC_START",
2381 : "IND_RC_START",
2382 : "IND_RC_START",
2383 : "IND_RC_START",
2384 : "IND_RC_START",
2385 : "IND_RC_START",
2386 : "IND_RC_START",
2387 : "IND_RC_START",
2388 : "IND_RC_START",
2389 : "IND_RC_START",
2390 : "IND_RC_START",
2391 : "IND_RC_START",
2392 : "IND_RC_START",
2393 : "IND_RC_START",
2394 : "IND_RC_START",
2395 : "IND_RC_START",
2396 : "IND_RC_START",
2397 : "IND_RC_START",
2398 : "IND_RC_START",
2399 : "IND_RC_START",
2400 : "IND_RC_START",
2401 : "IND_RC_START",
2402 : "IND_RC_START",
2403 : "IND_RC_START",
2404 : "IND_RC_START",
2405 : "IND_RC_START",
2406 : "IND_RC_START",
2407 : "IND_RC_START",
2408 : "IND_RC_START",
2409 : "IND_RC_START",
2410 : "IND_RC_START",
2411 : "IND_RC_START",
2412 : "IND_RC_START",
2413 : "IND_RC_START",
2414 : "IND_RC_START",
2415 : "IND_RC_START",
2416 : "IND_RC_START",
2417 : "IND_RC_START",
2418 : "IND_RC_START",
2419 : "IND_RC_START",
2420 : "IND_RC_START",
2421 : "IND_RC_START",
2422 : "IND_RC_START",
2423 : "IND_RC_START",
2424 : "IND_RC_START",
2425 : "IND_RC_START",
2426 : "IND_RC_START",
2427 : "IND_RC_START",
2428 : "IND_RC_START",
2429 : "IND_RC_START",
2430 : "IND_RC_START",
2431 : "IND_RC_START",
2432 : "IND_RC_START",
2433 : "IND_RC_START",
2434 : "IND_RC_START",
2435 : "IND_RC_START",
2436 : "IND_RC_START",
2437 : "IND_RC_START",
2438 : "IND_RC_START",
2439 : "IND_RC_START",
2440 : "IND_RC_START",
2441 : "IND_RC_START",
2442 : "IND_RC_START",
2443 : "IND_RC_START",
2444 : "IND_RC_START",
2445 : "IND_RC_START",
2446 : "IND_RC_START",
2447 : "IND_RC_START",
2448 : "IND_RC_START",
2449 : "IND_RC_START",
2450 : "IND_RC_START",
2451 : "IND_RC_START",
2452 : "IND_RC_START",
2453 : "IND_RC_START",
2454 : "IND_RC_START",
2455 : "IND_RC_START",
2456 : "IND_RC_START",
2457 : "IND_RC_START",
2458 : "IND_RC_START",
2459 : "IND_RC_START",
2460 : "IND_RC_START",
2461 : "IND_RC_START",
2462 : "IND_RC_START",
2463 : "IND_RC_START",
2464 : "IND_RC_START",
2465 : "IND_RC_START",
2466 : "IND_RC_START",
2467 : "IND_RC_START",
2468 : "IND_RC_START",
2469 : "IND_RC_START",
2470 : "IND_RC_START",
2471 : "IND_RC_START",
2472 : "IND_RC_START",
2473 : "IND_RC_START",
2474 : "IND_RC_START",
2475 : "IND_RC_START",
2476 : "IND_RC_START",
2477 : "IND_RC_START",
2478 : "IND_RC_START",
2479 : "IND_RC_START",
2480 : "IND_RC_START",
2481 : "IND_RC_START",
2482 : "IND_RC_START",
2483 : "IND_RC_END",
2484 : "IND_HVQ_PVQ_GAIN",
2485 : "IND_HVQ_PVQ_GAIN",
2486 : "IND_HVQ_PVQ_GAIN",
2487 : "IND_HVQ_PVQ_GAIN",
2488 : "IND_HVQ_PVQ_GAIN",
2489 : "IND_HVQ_PVQ_GAIN",
2490 : "IND_HVQ_PVQ_GAIN",
2491 : "IND_HVQ_PVQ_GAIN",
2492 : "IND_NOISINESS",
2493 : "IND_ENERGY",
2494 : "IND_CNG_HO",
2495 : "IND_SID_BW",
2496 : "IND_CNG_ENV1",
2497 : "IND_WB_FENV",
2498 : "IND_WB_CLASS",
2499 : "IND_IG1",
2500 : "IND_IG2A",
2501 : "IND_IG2B",
2502 : "IND_NELP_FID",
2503 : "IND_DELTALAG",
2504 : "IND_POWER",
2505 : "IND_AMP0",
2506 : "IND_AMP1",
2507 : "IND_GLOBAL_ALIGNMENT",
2508 : "IND_PVQ_FINE_GAIN",
2509 : "IND_UV_FLAG",
2510 : "IND_UV_FLAG",
2511 : "IND_UV_FLAG",
2512 : "IND_UV_FLAG",
2513 : "IND_UV_FLAG",
2514 : "IND_UV_FLAG",
2515 : "IND_UV_FLAG",
2516 : "IND_UV_FLAG",
2517 : "IND_UV_FLAG",
2518 : "IND_UV_FLAG",
2519 : "IND_UV_FLAG",
2520 : "IND_UV_FLAG",
2521 : "IND_UV_FLAG",
2522 : "IND_UV_FLAG",
2523 : "IND_UV_FLAG",
2524 : "IND_UV_FLAG",
2525 : "IND_UV_FLAG",
2526 : "IND_UV_FLAG",
2527 : "IND_UV_FLAG",
2528 : "IND_UV_FLAG",
2529 : "IND_UV_FLAG",
2530 : "IND_UV_FLAG",
2531 : "IND_UV_FLAG",
2532 : "IND_UV_FLAG",
2533 : "IND_UV_FLAG",
2534 : "IND_UV_FLAG",
2535 : "IND_UV_FLAG",
2536 : "IND_UV_FLAG",
2537 : "IND_UV_FLAG",
2538 : "IND_UV_FLAG",
2539 : "IND_UV_FLAG",
2540 : "IND_UV_FLAG",
2541 : "IND_UV_FLAG",
2542 : "IND_UV_FLAG",
2543 : "IND_UV_FLAG",
2544 : "IND_UV_FLAG",
2545 : "IND_UV_FLAG",
2546 : "IND_UV_FLAG",
2547 : "IND_UV_FLAG",
2548 : "IND_UV_FLAG",
2549 : "IND_UV_FLAG",
2550 : "IND_UV_FLAG",
2551 : "IND_UV_FLAG",
2552 : "IND_SHB_SUBGAIN",
2553 : "IND_SHB_FRAMEGAIN",
2554 : "IND_STEREO_ICBWE_MSFLAG",
2555 : "IND_SHB_ENER_SF",
2556 : "IND_SHB_RES_GS",
2557 : "IND_SHB_RES_GS",
2558 : "IND_SHB_RES_GS",
2559 : "IND_SHB_RES_GS",
2560 : "IND_SHB_RES_GS",
2561 : "IND_SHB_VF",
2562 : "IND_SHB_LSF",
2563 : "IND_SHB_LSF",
2564 : "IND_SHB_LSF",
2565 : "IND_SHB_LSF",
2566 : "IND_SHB_LSF",
2567 : "IND_SHB_MIRROR",
2568 : "IND_SHB_GRID",
2569 : "IND_SWB_CLASS",
2570 : "IND_SWB_TENV",
2571 : "IND_SWB_TENV",
2572 : "IND_SWB_TENV",
2573 : "IND_SWB_TENV",
2574 : "IND_SWB_FENV",
2575 : "IND_SWB_FENV",
2576 : "IND_SWB_FENV",
2577 : "IND_SWB_FENV",
2578 : "IND_SHB_CNG_GAIN",
2579 : "IND_DITHERING",
2580 : "IND_FB_SLOPE",
2581 : "IND_HQ2_SPT_SHORTEN",
2582 : "IND_HQ2_SUBBAND_TCQ",
2583 : "IND_HQ2_SUBBAND_TCQ",
2584 : "IND_HQ2_SUBBAND_TCQ",
2585 : "IND_HQ2_SUBBAND_TCQ",
2586 : "IND_HQ2_SUBBAND_TCQ",
2587 : "IND_HQ2_SUBBAND_TCQ",
2588 : "IND_HQ2_SUBBAND_TCQ",
2589 : "IND_HQ2_SUBBAND_TCQ",
2590 : "IND_HQ2_SUBBAND_TCQ",
2591 : "IND_HQ2_SUBBAND_TCQ",
2592 : "IND_HQ2_SUBBAND_TCQ",
2593 : "IND_HQ2_SUBBAND_TCQ",
2594 : "IND_HQ2_SUBBAND_TCQ",
2595 : "IND_HQ2_SUBBAND_TCQ",
2596 : "IND_HQ2_SUBBAND_TCQ",
2597 : "IND_HQ2_SUBBAND_TCQ",
2598 : "IND_HQ2_SUBBAND_TCQ",
2599 : "IND_HQ2_SUBBAND_TCQ",
2600 : "IND_HQ2_SUBBAND_TCQ",
2601 : "IND_HQ2_SUBBAND_TCQ",
2602 : "IND_HQ2_SUBBAND_TCQ",
2603 : "IND_HQ2_SUBBAND_TCQ",
2604 : "IND_HQ2_SUBBAND_TCQ",
2605 : "IND_HQ2_SUBBAND_TCQ",
2606 : "IND_HQ2_SUBBAND_TCQ",
2607 : "IND_HQ2_SUBBAND_TCQ",
2608 : "IND_HQ2_SUBBAND_TCQ",
2609 : "IND_HQ2_SUBBAND_TCQ",
2610 : "IND_HQ2_SUBBAND_TCQ",
2611 : "IND_HQ2_SUBBAND_TCQ",
2612 : "IND_HQ2_SUBBAND_TCQ",
2613 : "IND_HQ2_SUBBAND_TCQ",
2614 : "IND_HQ2_SUBBAND_TCQ",
2615 : "IND_HQ2_SUBBAND_TCQ",
2616 : "IND_HQ2_SUBBAND_TCQ",
2617 : "IND_HQ2_SUBBAND_TCQ",
2618 : "IND_HQ2_SUBBAND_TCQ",
2619 : "IND_HQ2_SUBBAND_TCQ",
2620 : "IND_HQ2_SUBBAND_TCQ",
2621 : "IND_HQ2_SUBBAND_TCQ",
2622 : "IND_HQ2_SUBBAND_TCQ",
2623 : "IND_HQ2_SUBBAND_TCQ",
2624 : "IND_HQ2_SUBBAND_TCQ",
2625 : "IND_HQ2_SUBBAND_TCQ",
2626 : "IND_HQ2_SUBBAND_TCQ",
2627 : "IND_HQ2_SUBBAND_TCQ",
2628 : "IND_HQ2_SUBBAND_TCQ",
2629 : "IND_HQ2_SUBBAND_TCQ",
2630 : "IND_HQ2_SUBBAND_TCQ",
2631 : "IND_HQ2_SUBBAND_TCQ",
2632 : "IND_HQ2_SUBBAND_TCQ",
2633 : "IND_HQ2_SUBBAND_TCQ",
2634 : "IND_HQ2_SUBBAND_TCQ",
2635 : "IND_HQ2_SUBBAND_TCQ",
2636 : "IND_HQ2_SUBBAND_TCQ",
2637 : "IND_HQ2_SUBBAND_TCQ",
2638 : "IND_HQ2_SUBBAND_TCQ",
2639 : "IND_HQ2_SUBBAND_TCQ",
2640 : "IND_HQ2_SUBBAND_TCQ",
2641 : "IND_HQ2_SUBBAND_TCQ",
2642 : "IND_HQ2_SUBBAND_TCQ",
2643 : "IND_HQ2_SUBBAND_TCQ",
2644 : "IND_HQ2_SUBBAND_TCQ",
2645 : "IND_HQ2_SUBBAND_TCQ",
2646 : "IND_HQ2_SUBBAND_TCQ",
2647 : "IND_HQ2_SUBBAND_TCQ",
2648 : "IND_HQ2_SUBBAND_TCQ",
2649 : "IND_HQ2_SUBBAND_TCQ",
2650 : "IND_HQ2_SUBBAND_TCQ",
2651 : "IND_HQ2_SUBBAND_TCQ",
2652 : "IND_HQ2_SUBBAND_TCQ",
2653 : "IND_HQ2_SUBBAND_TCQ",
2654 : "IND_HQ2_SUBBAND_TCQ",
2655 : "IND_HQ2_SUBBAND_TCQ",
2656 : "IND_HQ2_SUBBAND_TCQ",
2657 : "IND_HQ2_SUBBAND_TCQ",
2658 : "IND_HQ2_SUBBAND_TCQ",
2659 : "IND_HQ2_SUBBAND_TCQ",
2660 : "IND_HQ2_SUBBAND_TCQ",
2661 : "IND_HQ2_SUBBAND_TCQ",
2662 : "IND_HQ2_SUBBAND_TCQ",
2663 : "IND_HQ2_SUBBAND_TCQ",
2664 : "IND_HQ2_SUBBAND_TCQ",
2665 : "IND_HQ2_SUBBAND_TCQ",
2666 : "IND_HQ2_SUBBAND_TCQ",
2667 : "IND_HQ2_SUBBAND_TCQ",
2668 : "IND_HQ2_SUBBAND_TCQ",
2669 : "IND_HQ2_SUBBAND_TCQ",
2670 : "IND_HQ2_SUBBAND_TCQ",
2671 : "IND_HQ2_SUBBAND_TCQ",
2672 : "IND_HQ2_SUBBAND_TCQ",
2673 : "IND_HQ2_SUBBAND_TCQ",
2674 : "IND_HQ2_SUBBAND_TCQ",
2675 : "IND_HQ2_SUBBAND_TCQ",
2676 : "IND_HQ2_SUBBAND_TCQ",
2677 : "IND_HQ2_SUBBAND_TCQ",
2678 : "IND_HQ2_SUBBAND_TCQ",
2679 : "IND_HQ2_SUBBAND_TCQ",
2680 : "IND_HQ2_SUBBAND_TCQ",
2681 : "IND_HQ2_SUBBAND_TCQ",
2682 : "IND_HQ2_SUBBAND_GAIN",
2683 : "IND_HQ2_SUBBAND_GAIN",
2684 : "IND_HQ2_SUBBAND_GAIN",
2685 : "IND_HQ2_SUBBAND_GAIN",
2686 : "IND_HQ2_SUBBAND_GAIN",
2687 : "IND_HQ2_SUBBAND_GAIN",
2688 : "IND_HQ2_SUBBAND_GAIN",
2689 : "IND_HQ2_SUBBAND_GAIN",
2690 : "IND_HQ2_SUBBAND_GAIN",
2691 : "IND_HQ2_SUBBAND_GAIN",
2692 : "IND_HQ2_SUBBAND_GAIN",
2693 : "IND_HQ2_SUBBAND_GAIN",
2694 : "IND_HQ2_SUBBAND_GAIN",
2695 : "IND_HQ2_SUBBAND_GAIN",
2696 : "IND_HQ2_SUBBAND_GAIN",
2697 : "IND_HQ2_SUBBAND_GAIN",
2698 : "IND_HQ2_SUBBAND_GAIN",
2699 : "IND_HQ2_SUBBAND_GAIN",
2700 : "IND_HQ2_SUBBAND_GAIN",
2701 : "IND_HQ2_SUBBAND_GAIN",
2702 : "IND_HQ2_DUMMY",
2703 : "IND_LAGINDICES",
2704 : "IND_NOISEG",
2705 : "IND_AUDIO_GAIN",
2706 : "IND_AUDIO_DELAY",
2707 : "IND_AUDIO_DELAY",
2708 : "IND_AUDIO_DELAY",
2709 : "IND_AUDIO_DELAY",
2710 : "IND_NQ2",
2711 : "IND_NQ2",
2712 : "IND_NQ2",
2713 : "IND_NQ2",
2714 : "IND_NQ2",
2715 : "IND_NQ2",
2716 : "IND_NQ2",
2717 : "IND_NQ2",
2718 : "IND_NQ2",
2719 : "IND_NQ2",
2720 : "IND_NQ2",
2721 : "IND_NQ2",
2722 : "IND_NQ2",
2723 : "IND_NQ2",
2724 : "IND_NQ2",
2725 : "IND_NQ2",
2726 : "IND_NQ2",
2727 : "IND_NQ2",
2728 : "IND_NQ2",
2729 : "IND_NQ2",
2730 : "IND_NQ2",
2731 : "IND_NQ2",
2732 : "IND_NQ2",
2733 : "IND_NQ2",
2734 : "IND_NQ2",
2735 : "IND_NQ2",
2736 : "IND_NQ2",
2737 : "IND_NQ2",
2738 : "IND_NQ2",
2739 : "IND_NQ2",
2740 : "IND_NQ2",
2741 : "IND_NQ2",
2742 : "IND_NQ2",
2743 : "IND_NQ2",
2744 : "IND_NQ2",
2745 : "IND_NQ2",
2746 : "IND_NQ2",
2747 : "IND_NQ2",
2748 : "IND_NQ2",
2749 : "IND_NQ2",
2750 : "IND_NQ2",
2751 : "IND_NQ2",
2752 : "IND_NQ2",
2753 : "IND_NQ2",
2754 : "IND_NQ2",
2755 : "IND_NQ2",
2756 : "IND_NQ2",
2757 : "IND_NQ2",
2758 : "IND_NQ2",
2759 : "IND_NQ2",
2760 : "IND_NQ2",
2761 : "IND_NQ2",
2762 : "IND_NQ2",
2763 : "IND_NQ2",
2764 : "IND_NQ2",
2765 : "IND_NQ2",
2766 : "IND_NQ2",
2767 : "IND_NQ2",
2768 : "IND_NQ2",
2769 : "IND_NQ2",
2770 : "IND_NQ2",
2771 : "IND_NQ2",
2772 : "IND_NQ2",
2773 : "IND_NQ2",
2774 : "IND_NQ2",
2775 : "IND_NQ2",
2776 : "IND_NQ2",
2777 : "IND_NQ2",
2778 : "IND_NQ2",
2779 : "IND_NQ2",
2780 : "IND_NQ2",
2781 : "IND_NQ2",
2782 : "IND_NQ2",
2783 : "IND_NQ2",
2784 : "IND_NQ2",
2785 : "IND_NQ2",
2786 : "IND_NQ2",
2787 : "IND_NQ2",
2788 : "IND_NQ2",
2789 : "IND_NQ2",
2790 : "IND_NQ2",
2791 : "IND_NQ2",
2792 : "IND_NQ2",
2793 : "IND_NQ2",
2794 : "IND_NQ2",
2795 : "IND_NQ2",
2796 : "IND_NQ2",
2797 : "IND_NQ2",
2798 : "IND_NQ2",
2799 : "IND_NQ2",
2800 : "IND_NQ2",
2801 : "IND_NQ2",
2802 : "IND_NQ2",
2803 : "IND_NQ2",
2804 : "IND_NQ2",
2805 : "IND_NQ2",
2806 : "IND_NQ2",
2807 : "IND_NQ2",
2808 : "IND_NQ2",
2809 : "IND_NQ2",
2810 : "IND_NQ2",
2811 : "IND_NQ2",
2812 : "IND_NQ2",
2813 : "IND_NQ2",
2814 : "IND_NQ2",
2815 : "IND_NQ2",
2816 : "IND_NQ2",
2817 : "IND_NQ2",
2818 : "IND_NQ2",
2819 : "IND_NQ2",
2820 : "IND_NQ2",
2821 : "IND_NQ2",
2822 : "IND_NQ2",
2823 : "IND_NQ2",
2824 : "IND_NQ2",
2825 : "IND_NQ2",
2826 : "IND_NQ2",
2827 : "IND_NQ2",
2828 : "IND_NQ2",
2829 : "IND_NQ2",
2830 : "IND_NQ2",
2831 : "IND_NQ2",
2832 : "IND_NQ2",
2833 : "IND_NQ2",
2834 : "IND_NQ2",
2835 : "IND_NQ2",
2836 : "IND_NQ2",
2837 : "IND_NQ2",
2838 : "IND_NQ2",
2839 : "IND_NQ2",
2840 : "IND_NQ2",
2841 : "IND_NQ2",
2842 : "IND_NQ2",
2843 : "IND_NQ2",
2844 : "IND_NQ2",
2845 : "IND_NQ2",
2846 : "IND_NQ2",
2847 : "IND_NQ2",
2848 : "IND_NQ2",
2849 : "IND_NQ2",
2850 : "IND_NQ2",
2851 : "IND_NQ2",
2852 : "IND_NQ2",
2853 : "IND_NQ2",
2854 : "IND_NQ2",
2855 : "IND_NQ2",
2856 : "IND_NQ2",
2857 : "IND_NQ2",
2858 : "IND_NQ2",
2859 : "IND_NQ2",
2860 : "IND_NQ2",
2861 : "IND_NQ2",
2862 : "IND_NQ2",
2863 : "IND_NQ2",
2864 : "IND_NQ2",
2865 : "IND_NQ2",
2866 : "IND_NQ2",
2867 : "IND_NQ2",
2868 : "IND_NQ2",
2869 : "IND_NQ2",
2870 : "IND_NQ2",
2871 : "IND_NQ2",
2872 : "IND_NQ2",
2873 : "IND_NQ2",
2874 : "IND_NQ2",
2875 : "IND_NQ2",
2876 : "IND_NQ2",
2877 : "IND_NQ2",
2878 : "IND_NQ2",
2879 : "IND_NQ2",
2880 : "IND_NQ2",
2881 : "IND_NQ2",
2882 : "IND_NQ2",
2883 : "IND_NQ2",
2884 : "IND_NQ2",
2885 : "IND_NQ2",
2886 : "IND_NQ2",
2887 : "IND_NQ2",
2888 : "IND_NQ2",
2889 : "IND_NQ2",
2890 : "IND_NQ2",
2891 : "IND_NQ2",
2892 : "IND_NQ2",
2893 : "IND_NQ2",
2894 : "IND_NQ2",
2895 : "IND_NQ2",
2896 : "IND_NQ2",
2897 : "IND_NQ2",
2898 : "IND_NQ2",
2899 : "IND_NQ2",
2900 : "IND_NQ2",
2901 : "IND_NQ2",
2902 : "IND_NQ2",
2903 : "IND_NQ2",
2904 : "IND_NQ2",
2905 : "IND_NQ2",
2906 : "IND_NQ2",
2907 : "IND_NQ2",
2908 : "IND_NQ2",
2909 : "IND_NQ2",
2910 : "TAG_HR_BWE_LOOP_END",
2911 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2912 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2913 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2914 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2915 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2916 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2917 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2918 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2919 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2920 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2921 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2922 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2923 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2924 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2925 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2926 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2927 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2928 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2929 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2930 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2931 : "IND_CORE_SWITCHING_AUDIO_DELAY",
2932 : "IND_CORE_SWITCHING_AUDIO_GAIN",
2933 : "IND_STEREO_ICBWE_REF",
2934 : "IND_STEREO_ICBWE_SP",
2935 : "IND_STEREO_ICBWE_GS",
2936 : "IND_STEREO_REFCHAN",
2937 : "IND_STEREO_CORRSTATS",
2938 : "IND_STEREO_GD",
2939 : "IND_STEREO_LRTD_FLAG",
2940 : "IND_STEREO_LPC_REUSE",
2941 : "IND_STEREO_TD_ALPHA",
2942 : "IND_STEREO_2ND_CODER_T",
2943 : "IND_UNUSED"
2944 : };
2945 : #endif
2946 :
2947 :
2948 : /*-------------------------------------------------------------------*
2949 : * push_indice()
2950 : *
2951 : * Push a new indice into the buffer
2952 : *-------------------------------------------------------------------*/
2953 :
2954 0 : ivas_error push_indice(
2955 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
2956 : Word16 id, /* i : ID of the indice */
2957 : UWord16 value, /* i : value of the quantized indice */
2958 : Word16 nb_bits /* i : number of bits used to quantize the indice */
2959 : )
2960 : {
2961 : Word16 i;
2962 : Word16 j;
2963 : ivas_error error;
2964 :
2965 0 : error = IVAS_ERR_OK;
2966 0 : move32();
2967 :
2968 : /* check the limits of the list of indices */
2969 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
2970 : {
2971 : #ifdef DEBUGGING
2972 : return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices (frame %d) !\n", frame );
2973 : #else
2974 0 : return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices!\n" );
2975 : #endif
2976 : }
2977 :
2978 : /* find the location in the list of indices based on ID */
2979 0 : i = hBstr->nb_ind_tot;
2980 0 : move16();
2981 0 : test();
2982 0 : WHILE( i > 0 && ( id < hBstr->ind_list[i - 1].id ) )
2983 : {
2984 0 : test();
2985 0 : i = sub( i, 1 );
2986 : }
2987 :
2988 : /* shift indices, if the new ID is to be written somewhere inside the list */
2989 0 : IF( i < hBstr->nb_ind_tot )
2990 : {
2991 0 : FOR( j = hBstr->nb_ind_tot; j > i; j-- )
2992 : {
2993 0 : hBstr->ind_list[j].id = hBstr->ind_list[j - 1].id;
2994 0 : hBstr->ind_list[j].nb_bits = hBstr->ind_list[j - 1].nb_bits;
2995 0 : hBstr->ind_list[j].value = hBstr->ind_list[j - 1].value;
2996 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
2997 : strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[j - 1].function_name, 100 );
2998 : #endif
2999 0 : move16();
3000 0 : move16();
3001 0 : move16();
3002 : }
3003 : }
3004 :
3005 :
3006 : /* store the new indice in the list */
3007 0 : hBstr->ind_list[i].id = id;
3008 0 : hBstr->ind_list[i].value = value;
3009 0 : hBstr->ind_list[i].nb_bits = nb_bits;
3010 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3011 : strncpy( hBstr->ind_list[i].function_name, named_indices_table[id], 100 );
3012 : #endif
3013 0 : move16();
3014 0 : move16();
3015 0 : move16();
3016 :
3017 : /* updates */
3018 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
3019 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
3020 0 : move16();
3021 0 : move16();
3022 :
3023 0 : return error;
3024 : }
3025 :
3026 : /*-------------------------------------------------------------------*
3027 : * push_next_indice()
3028 : *
3029 : * Push a new indice into the buffer at the next position
3030 : *-------------------------------------------------------------------*/
3031 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3032 : ivas_error push_next_indice_(
3033 : const char *caller,
3034 : #else
3035 0 : ivas_error push_next_indice(
3036 : #endif
3037 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
3038 : UWord16 value, /* i : value of the quantized indice */
3039 : Word16 nb_bits /* i : number of bits used to quantize the indice */
3040 : )
3041 : {
3042 : Word16 prev_id;
3043 : ivas_error error;
3044 :
3045 0 : error = IVAS_ERR_OK;
3046 0 : move32();
3047 :
3048 :
3049 : /* check the limits of the list of indices */
3050 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
3051 : {
3052 0 : return error;
3053 : }
3054 :
3055 : /* get the id of the previous indice -> it will be re-used */
3056 0 : IF( hBstr->nb_ind_tot > 0 )
3057 : {
3058 0 : prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
3059 : }
3060 : ELSE
3061 : {
3062 0 : prev_id = 0;
3063 : }
3064 0 : move16();
3065 :
3066 : /* store the values in the list */
3067 0 : hBstr->ind_list[hBstr->nb_ind_tot].id = prev_id;
3068 0 : hBstr->ind_list[hBstr->nb_ind_tot].value = value;
3069 0 : hBstr->ind_list[hBstr->nb_ind_tot].nb_bits = nb_bits;
3070 0 : move16();
3071 0 : move16();
3072 0 : move16();
3073 :
3074 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3075 : strncpy( hBstr->ind_list[hBstr->nb_ind_tot].function_name, caller, 100 );
3076 : #endif
3077 :
3078 : /* updates */
3079 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
3080 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
3081 0 : move16();
3082 0 : move16();
3083 :
3084 0 : return error;
3085 : }
3086 :
3087 :
3088 : /*-------------------------------------------------------------------*
3089 : * push_next_bits()
3090 : * Push a bit buffer into the buffer at the next position
3091 : *-------------------------------------------------------------------*/
3092 :
3093 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3094 : ivas_error push_next_bits_(
3095 : const char *caller,
3096 : #else
3097 0 : ivas_error push_next_bits(
3098 : #endif
3099 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
3100 : const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */
3101 : const Word16 nb_bits /* i : number of bits to pack */
3102 : )
3103 : {
3104 : UWord16 code;
3105 : Word16 i, nb_bits_m15;
3106 : Indice *ptr;
3107 : Word16 prev_id;
3108 : ivas_error error;
3109 :
3110 0 : error = IVAS_ERR_OK;
3111 0 : move32();
3112 :
3113 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
3114 :
3115 : /* get the id of the previous indice -> will be re-used */
3116 0 : IF( hBstr->nb_ind_tot > 0 )
3117 : {
3118 0 : prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
3119 0 : move16();
3120 : }
3121 : ELSE
3122 : {
3123 0 : prev_id = 0;
3124 0 : move16();
3125 : }
3126 0 : nb_bits_m15 = sub( nb_bits, 15 );
3127 :
3128 0 : FOR( i = 0; i < nb_bits_m15; i += 16 )
3129 : {
3130 0 : code = (UWord16) L_or( L_shl( bits[i], 15 ), L_or( L_shl( bits[i + 1], 14 ), L_or( L_shl( bits[i + 2], 13 ), L_or( L_shl( bits[i + 3], 12 ), L_or( L_shl( bits[i + 4], 11 ), L_or( L_shl( bits[i + 5], 10 ), L_or( L_shl( bits[i + 6], 9 ), L_or( L_shl( bits[i + 7], 8 ), L_or( L_shl( bits[i + 8], 7 ), L_or( L_shl( bits[i + 9], 6 ), L_or( L_shl( bits[i + 10], 5 ), L_or( L_shl( bits[i + 11], 4 ), L_or( L_shl( bits[i + 12], 3 ), L_or( L_shl( bits[i + 13], 2 ), L_or( L_shl( bits[i + 14], 1 ), bits[i + 15] ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
3131 :
3132 : /* check the limits of the list of indices */
3133 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
3134 : {
3135 : #ifdef DEBUGGING
3136 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
3137 : #else
3138 0 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
3139 : #endif
3140 : }
3141 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
3142 :
3143 0 : ptr->value = code;
3144 0 : ptr->nb_bits = 16;
3145 0 : ptr->id = prev_id;
3146 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3147 : strncpy( ptr->function_name, caller, 100 );
3148 : #endif
3149 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
3150 0 : move16();
3151 0 : move16();
3152 0 : move16();
3153 0 : move16();
3154 :
3155 0 : ++ptr;
3156 : }
3157 :
3158 0 : FOR( ; i < nb_bits; ++i )
3159 : {
3160 : /* check the limits of the list of indices */
3161 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
3162 : {
3163 : #ifdef DEBUGGING
3164 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
3165 : #else
3166 0 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
3167 : #endif
3168 : }
3169 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
3170 :
3171 0 : ptr->value = bits[i];
3172 0 : ptr->nb_bits = 1;
3173 0 : ptr->id = prev_id;
3174 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3175 : strncpy( ptr->function_name, caller, 100 );
3176 : #endif
3177 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
3178 0 : move16();
3179 0 : move16();
3180 0 : move16();
3181 0 : move16();
3182 :
3183 0 : ++ptr;
3184 : }
3185 :
3186 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
3187 0 : move16();
3188 :
3189 0 : return error;
3190 : }
3191 :
3192 :
3193 : /*-------------------------------------------------------------------*
3194 : * find_indice()
3195 : *
3196 : * Find indice based on its id
3197 : *-------------------------------------------------------------------*/
3198 :
3199 : /*! r: result: index of the indice in the list, -1 if not found */
3200 0 : Word16 find_indice(
3201 : BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
3202 : const Word16 id, /* i : ID of the indice */
3203 : UWord16 *value, /* o : value of the quantized indice */
3204 : Word16 *nb_bits /* o : number of bits used to quantize the indice */
3205 : )
3206 : {
3207 : Word16 i;
3208 :
3209 0 : for ( i = 0; i < hBstr->nb_ind_tot; i++ )
3210 : {
3211 0 : if ( hBstr->ind_list[i].id == id && hBstr->ind_list[i].nb_bits > 0 )
3212 : {
3213 0 : *value = hBstr->ind_list[i].value;
3214 0 : *nb_bits = hBstr->ind_list[i].nb_bits;
3215 0 : return i;
3216 : }
3217 : }
3218 :
3219 0 : return -1;
3220 : }
3221 :
3222 :
3223 : /*-------------------------------------------------------------------*
3224 : * delete_indice()
3225 : *
3226 : * Delete indice based on its id (note, that nb_ind_tot and nb_bits_tot are updated)
3227 : *-------------------------------------------------------------------*/
3228 :
3229 : /*! r: number of deleted indices */
3230 0 : UWord16 delete_indice(
3231 : BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
3232 : const Word16 id /* i : ID of the indice */
3233 : )
3234 : {
3235 : Word16 i, j;
3236 :
3237 0 : j = 0;
3238 0 : FOR( i = 0; i < hBstr->nb_ind_tot; i++ )
3239 : {
3240 0 : IF( EQ_16( hBstr->ind_list[i].id, id ) )
3241 : {
3242 0 : hBstr->nb_bits_tot -= hBstr->ind_list[i].nb_bits;
3243 0 : move16();
3244 0 : continue;
3245 : }
3246 :
3247 0 : IF( LT_16( j, i ) )
3248 : {
3249 : /* shift the indice left */
3250 0 : hBstr->ind_list[j].id = hBstr->ind_list[i].id;
3251 0 : hBstr->ind_list[j].value = hBstr->ind_list[i].value;
3252 0 : hBstr->ind_list[j].nb_bits = hBstr->ind_list[i].nb_bits;
3253 0 : move16();
3254 0 : move16();
3255 0 : move16();
3256 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3257 : strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[i].function_name, 100 );
3258 : #endif
3259 : }
3260 :
3261 0 : j++;
3262 : }
3263 :
3264 0 : hBstr->nb_ind_tot = j;
3265 :
3266 0 : FOR( ; j < i; j++ )
3267 : {
3268 : /* reset the shifted indices at the end of the list */
3269 0 : hBstr->ind_list[j].nb_bits = -1;
3270 0 : move16();
3271 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3272 : sprintf( hBstr->ind_list[j].function_name, "RESET in delete_indice" );
3273 : #endif
3274 : }
3275 :
3276 0 : return i - j;
3277 : }
3278 :
3279 :
3280 : /*-------------------------------------------------------------------*
3281 : * get_next_indice()
3282 : *
3283 : * Get the next indice from the buffer
3284 : *-------------------------------------------------------------------*/
3285 :
3286 : /*! r: value of the indice */
3287 40940868 : UWord16 get_next_indice_fx(
3288 : Decoder_State *st_fx, /* i/o: decoder state structure */
3289 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3290 : )
3291 : {
3292 : UWord16 value;
3293 : Word16 i;
3294 : Word16 nbits_total;
3295 :
3296 40940868 : assert( nb_bits <= 16 );
3297 40940868 : value = 0;
3298 40940868 : move16();
3299 :
3300 40940868 : nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
3301 :
3302 : /* detect corrupted bitstream */
3303 40940868 : IF( GT_16( add( st_fx->next_bit_pos, nb_bits ), nbits_total ) )
3304 : {
3305 0 : st_fx->BER_detect = 1;
3306 0 : move16();
3307 0 : return ( 0 );
3308 : }
3309 :
3310 189929369 : FOR( i = 0; i < nb_bits; i++ )
3311 : {
3312 148988501 : value = (UWord16) L_shl( value, 1 );
3313 148988501 : value = (UWord16) L_add( value, st_fx->bit_stream[add( st_fx->next_bit_pos, i )] );
3314 : }
3315 :
3316 : /* update the position in the bitstream */
3317 40940868 : st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
3318 40940868 : move16();
3319 :
3320 40940868 : return value;
3321 : }
3322 :
3323 :
3324 : /*-------------------------------------------------------------------*
3325 : * get_next_indice_1()
3326 : *
3327 : * Get the next 1-bit indice from the buffer
3328 : *-------------------------------------------------------------------*/
3329 :
3330 : /*! r: value of the indice */
3331 181563129 : UWord16 get_next_indice_1_fx(
3332 : Decoder_State *st_fx /* i/o: decoder state structure */
3333 : )
3334 : {
3335 : Word16 nbits_total;
3336 181563129 : nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
3337 :
3338 : /* detect corrupted bitstream */
3339 181563129 : test();
3340 181563129 : test();
3341 181563129 : test();
3342 181563129 : IF( ( GT_16( add( st_fx->next_bit_pos, 1 ), nbits_total ) && EQ_16( st_fx->codec_mode, MODE1 ) ) ||
3343 : ( GT_16( add( st_fx->next_bit_pos, 1 ), add( nbits_total, 2 * 8 ) ) && EQ_16( st_fx->codec_mode, MODE2 ) ) /* add two zero bytes for arithmetic coder flush */
3344 : )
3345 : {
3346 0 : st_fx->BER_detect = 1;
3347 0 : move16();
3348 0 : return ( 0 );
3349 : }
3350 :
3351 181563129 : return st_fx->bit_stream[st_fx->next_bit_pos++];
3352 : }
3353 :
3354 :
3355 : /*-------------------------------------------------------------------*
3356 : * get_next_indice_tmp()
3357 : *
3358 : * update the total number of bits and the position in the bitstream
3359 : *-------------------------------------------------------------------*/
3360 :
3361 1975986 : void get_next_indice_tmp_fx(
3362 : Decoder_State *st_fx, /* o : decoder state structure */
3363 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3364 : )
3365 : {
3366 : /* update the position in the bitstream */
3367 1975986 : st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
3368 1975986 : move16();
3369 :
3370 1975986 : return;
3371 : }
3372 :
3373 :
3374 : /*-------------------------------------------------------------------*
3375 : * get_indice()
3376 : *
3377 : * Get indice at specific position in the buffer
3378 : *-------------------------------------------------------------------*/
3379 :
3380 : /*! r: value of the indice */
3381 541458 : UWord16 get_indice_fx(
3382 : Decoder_State *st_fx, /* i/o: decoder state structure */
3383 : Word16 pos, /* i : absolute position in the bitstream (update after the read) */
3384 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3385 : )
3386 : {
3387 : UWord16 value;
3388 : Word16 i;
3389 : Word32 nbits_total;
3390 :
3391 541458 : assert( nb_bits <= 16 );
3392 :
3393 541458 : nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
3394 :
3395 : /* detect corrupted bitstream */
3396 541458 : IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), nbits_total ) )
3397 : {
3398 0 : st_fx->BER_detect = 1;
3399 0 : move16();
3400 0 : return ( 0 );
3401 : }
3402 :
3403 541458 : value = 0;
3404 541458 : move16();
3405 3425114 : FOR( i = 0; i < nb_bits; i++ )
3406 : {
3407 2883656 : value = lshl( value, 1 );
3408 2883656 : value = add( value, st_fx->bit_stream[pos + i] );
3409 : }
3410 :
3411 541458 : return value;
3412 : }
3413 :
3414 :
3415 : /*-------------------------------------------------------------------*
3416 : * get_indice_st()
3417 : *
3418 : * Get indice at specific position in the buffer
3419 : *-------------------------------------------------------------------*/
3420 :
3421 : /*! r: value of the indice */
3422 18899 : UWord16 get_indice_st(
3423 : Decoder_State *st, /* i/o: decoder state structure */
3424 : const Word32 element_brate, /* i : element bitrate */
3425 : const Word16 pos, /* i : absolute position in the bitstream */
3426 : const Word16 nb_bits /* i : number of bits to quantize the indice */
3427 : )
3428 : {
3429 : UWord16 value;
3430 : Word16 i;
3431 :
3432 18899 : assert( nb_bits <= 16 );
3433 :
3434 : /* detect corrupted bitstream */
3435 18899 : IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), Mpy_32_32( element_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ) )
3436 : {
3437 0 : st->BER_detect = 1;
3438 0 : move16();
3439 0 : return ( 0 );
3440 : }
3441 :
3442 18899 : value = 0;
3443 18899 : move16();
3444 61238 : FOR( i = 0; i < nb_bits; i++ )
3445 : {
3446 42339 : value = shl( value, 1 );
3447 42339 : value = add( value, st->bit_stream[pos + i] );
3448 : }
3449 :
3450 18899 : return value;
3451 : }
3452 :
3453 :
3454 : /*-------------------------------------------------------------------*
3455 : * get_indice_1_fx( )
3456 : *
3457 : * Get a 1-bit indice at specific position in the buffer
3458 : *-------------------------------------------------------------------*/
3459 :
3460 : /*! r: value of the indice */
3461 67557777 : UWord16 get_indice_1_fx(
3462 : Decoder_State *st_fx, /* i/o: decoder state structure */
3463 : Word16 pos /* i : absolute position in the bitstream (update after the read) */
3464 : )
3465 : {
3466 : Word16 nbits_total;
3467 :
3468 67557777 : nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
3469 :
3470 : /* detect corrupted bitstream */
3471 67557777 : IF( GT_16( add( pos, 1 ), nbits_total ) )
3472 : {
3473 0 : st_fx->BER_detect = 1;
3474 0 : move16();
3475 0 : return ( 0 );
3476 : }
3477 :
3478 67557777 : return st_fx->bit_stream[pos];
3479 : }
3480 :
3481 :
3482 : /*-------------------------------------------------------------------*
3483 : * reset_indices_enc_fx()
3484 : *
3485 : * Reset the buffer of indices
3486 : *-------------------------------------------------------------------*/
3487 :
3488 0 : void reset_indices_enc_fx(
3489 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder state structure */
3490 : const Word16 max_num_indices /* i : max number of indices */
3491 : )
3492 : {
3493 : Word16 i;
3494 :
3495 0 : hBstr->nb_ind_tot = 0;
3496 0 : move16();
3497 0 : hBstr->nb_bits_tot = 0;
3498 0 : move16();
3499 0 : FOR( i = 0; i < max_num_indices; i++ )
3500 : {
3501 0 : hBstr->ind_list[i].nb_bits = -1;
3502 0 : move16();
3503 : }
3504 :
3505 0 : return;
3506 : }
3507 :
3508 :
3509 : /*-------------------------------------------------------------------*
3510 : * reset_indices_dec()
3511 : *
3512 : * Reset the buffer of decoder indices
3513 : *-------------------------------------------------------------------*/
3514 :
3515 2271275 : void reset_indices_dec(
3516 : Decoder_State *st )
3517 : {
3518 2271275 : st->next_bit_pos = 0;
3519 2271275 : move16();
3520 :
3521 2271275 : return;
3522 : }
3523 :
3524 :
3525 : /*-------------------------------------------------------------------*
3526 : * write_indices_to_stream()
3527 : *
3528 : * writing forward or backward to a serial stream
3529 : *-------------------------------------------------------------------*/
3530 :
3531 0 : static Word16 write_indices_to_stream_fx(
3532 : Indice *ind_list,
3533 : UWord16 **pt_stream,
3534 : const Word16 inc,
3535 : const Word16 num_indices )
3536 : {
3537 : Word16 i, k;
3538 : Word16 value, nb_bits;
3539 : UWord16 mask;
3540 :
3541 0 : FOR( i = 0; i < num_indices; i++ )
3542 : {
3543 0 : value = ind_list[i].value;
3544 0 : nb_bits = ind_list[i].nb_bits;
3545 0 : move16();
3546 0 : move16();
3547 :
3548 0 : IF( nb_bits > 0 )
3549 : {
3550 : /* mask from MSB to LSB */
3551 0 : mask = (UWord16) L_shl( 1, sub( nb_bits, 1 ) );
3552 :
3553 : /* write bit by bit */
3554 0 : FOR( k = 0; k < nb_bits; k++ )
3555 : {
3556 0 : IF( L_and( value, mask ) )
3557 : {
3558 0 : **pt_stream = 1;
3559 0 : move16();
3560 0 : *pt_stream += inc;
3561 : }
3562 : ELSE
3563 : {
3564 0 : **pt_stream = 0;
3565 0 : move16();
3566 0 : *pt_stream += inc;
3567 : }
3568 :
3569 0 : mask = (UWord16) L_shr( mask, 1 );
3570 : }
3571 : }
3572 : }
3573 :
3574 0 : return 0;
3575 : }
3576 :
3577 :
3578 : /*-------------------------------------------------------------------*
3579 : * write_indices_element()
3580 : *
3581 : * Bitstream writing function of one element (one SCE or one CPE)
3582 : *-------------------------------------------------------------------*/
3583 :
3584 0 : static ivas_error write_indices_element_fx(
3585 : Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */
3586 : UWord16 **pt_stream, /* i : pointer to bitstream buffer */
3587 : const Word16 is_SCE, /* i : flag to distingusih SCE and CPE */
3588 : const Word16 element_id /* i : id of the SCE or CPE */
3589 : )
3590 : {
3591 : Word16 ch;
3592 0 : Encoder_State **sts = NULL;
3593 : UWord16 *pt_stream_loc;
3594 : UWord16 *pt_stream_backup;
3595 : UWord16 *pt_stream_end;
3596 : Word16 nb_bits_tot_metadata;
3597 : Word16 nb_ind_tot_metadata;
3598 :
3599 : Indice *ind_list_metadata;
3600 : Word16 n, n_channels;
3601 : ivas_error error;
3602 :
3603 0 : error = IVAS_ERR_OK;
3604 0 : move32();
3605 :
3606 0 : ind_list_metadata = NULL;
3607 0 : nb_ind_tot_metadata = 0;
3608 0 : move16();
3609 :
3610 0 : IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MONO_FORMAT ) )
3611 : {
3612 0 : sts = st_ivas->hSCE[0]->hCoreCoder;
3613 0 : nb_bits_tot_metadata = 0;
3614 0 : move16();
3615 : }
3616 : ELSE
3617 : {
3618 0 : nb_bits_tot_metadata = 0;
3619 0 : move16();
3620 0 : test();
3621 0 : test();
3622 0 : IF( is_SCE && st_ivas->hSCE[element_id] != NULL )
3623 : {
3624 0 : sts = st_ivas->hSCE[element_id]->hCoreCoder;
3625 :
3626 0 : IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
3627 : {
3628 0 : nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot;
3629 0 : ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list;
3630 0 : nb_ind_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot;
3631 0 : move16();
3632 0 : move16();
3633 : }
3634 : }
3635 0 : ELSE IF( !is_SCE && st_ivas->hCPE[element_id] != NULL )
3636 : {
3637 0 : sts = st_ivas->hCPE[element_id]->hCoreCoder;
3638 :
3639 0 : IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
3640 : {
3641 0 : nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot;
3642 0 : ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list;
3643 0 : nb_ind_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot;
3644 0 : move16();
3645 0 : move16();
3646 : }
3647 : }
3648 : }
3649 :
3650 0 : n_channels = 1;
3651 0 : move16();
3652 0 : if ( GT_16( sts[0]->element_mode, IVAS_CPE_DFT ) )
3653 : {
3654 0 : n_channels = CPE_CHANNELS;
3655 0 : move16();
3656 : }
3657 :
3658 : /*----------------------------------------------------------------*
3659 : * Bitstream packing (conversion of individual indices into a serial stream)
3660 : *----------------------------------------------------------------*/
3661 :
3662 0 : pt_stream_loc = *pt_stream;
3663 0 : pt_stream_end = pt_stream_loc;
3664 :
3665 0 : FOR( n = 0; n < n_channels; n++ )
3666 : {
3667 : /* write the metadata buffer */
3668 0 : test();
3669 0 : IF( n == 0 && nb_bits_tot_metadata != 0 )
3670 : {
3671 0 : pt_stream_backup = pt_stream_loc;
3672 :
3673 0 : FOR( ch = 0; ch < n_channels; ch++ )
3674 : {
3675 0 : pt_stream_loc += sts[ch]->hBstr->nb_bits_tot;
3676 : }
3677 0 : pt_stream_loc += nb_bits_tot_metadata - 1;
3678 0 : pt_stream_end = pt_stream_loc + 1;
3679 :
3680 0 : write_indices_to_stream_fx( ind_list_metadata, &pt_stream_loc, -1,
3681 : nb_ind_tot_metadata );
3682 :
3683 : /* restore previous pointer position */
3684 0 : pt_stream_loc = pt_stream_backup;
3685 : }
3686 0 : write_indices_to_stream_fx( sts[n]->hBstr->ind_list, &pt_stream_loc, 1,
3687 0 : sts[n]->hBstr->nb_ind_tot );
3688 :
3689 0 : if ( pt_stream_loc > pt_stream_end )
3690 : {
3691 0 : pt_stream_end = pt_stream_loc;
3692 : }
3693 : }
3694 :
3695 : #if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
3696 : if ( is_SCE ) /* EVS and SCE */
3697 : {
3698 : static FILE *f1 = 0;
3699 :
3700 : if ( f1 == 0 )
3701 : f1 = fopen( "bitstream_text", "w" );
3702 :
3703 : for ( int16_t i = 0; i < sts[0]->hBstr->nb_ind_tot; i++ )
3704 : {
3705 : Indice *ind_list = sts[0]->hBstr->ind_list;
3706 : int16_t value = ind_list[i].value;
3707 : int16_t nb_bits = ind_list[i].nb_bits;
3708 : char *function_name = ind_list[i].function_name;
3709 :
3710 : fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
3711 : }
3712 :
3713 : if ( st_ivas->hSCE[element_id]->hMetaData != NULL )
3714 : {
3715 : for ( int16_t i = 0; i < st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot; i++ )
3716 : {
3717 : Indice *ind_list = st_ivas->hSCE[element_id]->hMetaData->ind_list;
3718 : int16_t value = ind_list[i].value;
3719 : int16_t nb_bits = ind_list[i].nb_bits;
3720 : char *function_name = ind_list[i].function_name;
3721 :
3722 : fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
3723 : }
3724 : }
3725 : }
3726 : else
3727 : {
3728 : static FILE *f1 = 0;
3729 :
3730 : if ( f1 == 0 )
3731 : f1 = fopen( "bitstream_text", "w" );
3732 :
3733 :
3734 : for ( n = 0; n < n_channels; n++ )
3735 : {
3736 : for ( int16_t i = 0; i < sts[n]->hBstr->nb_ind_tot; i++ )
3737 : {
3738 : Indice *ind_list = sts[n]->hBstr->ind_list;
3739 : int16_t value = ind_list[i].value;
3740 : int16_t nb_bits = ind_list[i].nb_bits;
3741 : char *function_name = ind_list[i].function_name;
3742 :
3743 : fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, n, i, function_name, nb_bits, value );
3744 : }
3745 : }
3746 :
3747 : if ( st_ivas->hCPE[element_id]->hMetaData != NULL )
3748 : {
3749 : for ( int16_t i = 0; i < st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot; i++ )
3750 : {
3751 : Indice *ind_list = st_ivas->hCPE[element_id]->hMetaData->ind_list;
3752 : int16_t value = ind_list[i].value;
3753 : int16_t nb_bits = ind_list[i].nb_bits;
3754 : char *function_name = ind_list[i].function_name;
3755 :
3756 : fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, -1, i, function_name, nb_bits, value );
3757 : }
3758 : }
3759 : }
3760 : #endif
3761 :
3762 : /*----------------------------------------------------------------*
3763 : * Clearing of indices
3764 : * Reset index pointers
3765 : *----------------------------------------------------------------*/
3766 :
3767 0 : IF( is_SCE ) /* EVS and SCE */
3768 : {
3769 0 : IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
3770 : {
3771 0 : reset_indices_enc_fx( st_ivas->hSCE[element_id]->hMetaData, st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot );
3772 : }
3773 :
3774 0 : reset_indices_enc_fx( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot );
3775 : }
3776 : ELSE
3777 : {
3778 0 : IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
3779 : {
3780 0 : reset_indices_enc_fx( st_ivas->hCPE[element_id]->hMetaData, st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot );
3781 : }
3782 :
3783 0 : FOR( n = 0; n < n_channels; n++ )
3784 : {
3785 0 : reset_indices_enc_fx( sts[n]->hBstr, sts[n]->hBstr->nb_ind_tot );
3786 : }
3787 : }
3788 :
3789 : /* update pointer */
3790 0 : *pt_stream = pt_stream_end;
3791 :
3792 0 : return error;
3793 : }
3794 :
3795 :
3796 : /*-------------------------------------------------------------------*
3797 : * write_indices_ivas()
3798 : *
3799 : * Write the buffer of indices to a serial bitstream buffer,
3800 : * each bit represented as a uint16_t of value 0 or 1
3801 : *-------------------------------------------------------------------*/
3802 :
3803 0 : ivas_error write_indices_ivas_fx(
3804 : Encoder_Struct *st_ivas, /* i/o: encoder state structure */
3805 : UWord16 *bit_stream, /* i/o: output bitstream */
3806 : UWord16 *num_bits /* i : number of indices written to output */
3807 : )
3808 : {
3809 : Word16 i, n;
3810 : UWord16 *pt_stream;
3811 : ivas_error error;
3812 :
3813 0 : error = IVAS_ERR_OK;
3814 0 : move32();
3815 :
3816 0 : pt_stream = bit_stream;
3817 0 : FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i )
3818 : {
3819 0 : bit_stream[i] = 0;
3820 0 : move16();
3821 : }
3822 :
3823 : /*-----------------------------------------------------------------*
3824 : * Encode Payload
3825 : *-----------------------------------------------------------------*/
3826 :
3827 0 : FOR( n = 0; n < st_ivas->nSCE; n++ )
3828 : {
3829 0 : write_indices_element_fx( st_ivas, &pt_stream, 1, n );
3830 : }
3831 :
3832 0 : FOR( n = 0; n < st_ivas->nCPE; n++ )
3833 : {
3834 0 : write_indices_element_fx( st_ivas, &pt_stream, 0, n );
3835 : }
3836 :
3837 0 : *num_bits = (UWord16) ( pt_stream - bit_stream );
3838 0 : move16();
3839 :
3840 0 : return error;
3841 : }
3842 :
3843 :
3844 : /*-------------------------------------------------------------------*
3845 : * decoder_selectCodec()
3846 : *
3847 : *
3848 : *-------------------------------------------------------------------*/
3849 :
3850 3100 : static void decoder_selectCodec(
3851 : Decoder_State *st, /* i/o: decoder state structure */
3852 : const Word32 total_brate, /* i : total bitrate */
3853 : const Word16 bit0 /* i : first bit */
3854 : )
3855 : {
3856 : /* set the AMR-WB IO flag */
3857 3100 : IF( rate2AMRWB_IOmode( total_brate ) != -1 )
3858 : {
3859 0 : st->Opt_AMR_WB = 1;
3860 0 : move16();
3861 : }
3862 3100 : ELSE IF( total_brate != FRAME_NO_DATA )
3863 : {
3864 3100 : st->Opt_AMR_WB = 0;
3865 3100 : move16();
3866 : }
3867 :
3868 3100 : IF( st->Opt_AMR_WB )
3869 : {
3870 0 : st->codec_mode = MODE1;
3871 0 : move16();
3872 : }
3873 : else
3874 : {
3875 3100 : st->codec_mode = get_codec_mode( total_brate );
3876 :
3877 3100 : IF( st->codec_mode == -1 )
3878 : {
3879 0 : SWITCH( total_brate )
3880 : {
3881 0 : case 0:
3882 0 : st->codec_mode = st->last_codec_mode;
3883 0 : move16();
3884 0 : BREAK;
3885 0 : case 2400:
3886 0 : st->codec_mode = st->last_codec_mode;
3887 0 : move16();
3888 0 : BREAK;
3889 0 : case 2800:
3890 0 : st->codec_mode = MODE1;
3891 0 : move16();
3892 0 : break;
3893 0 : default: /* validate that total_brate (derived from RTP packet or a file header) is one of the defined bitrates */
3894 0 : st->codec_mode = st->last_codec_mode;
3895 0 : move16();
3896 0 : st->bfi = 1;
3897 0 : move16();
3898 0 : break;
3899 : }
3900 3100 : }
3901 : }
3902 :
3903 3100 : IF( st->ini_frame == 0 )
3904 : {
3905 3 : if ( st->codec_mode == -1 )
3906 : {
3907 0 : st->codec_mode = MODE1;
3908 0 : move16();
3909 : }
3910 3 : st->last_codec_mode = st->codec_mode;
3911 3 : move16();
3912 : }
3913 :
3914 : /* set SID/CNG type */
3915 3100 : IF( total_brate == SID_2k40 )
3916 : {
3917 0 : IF( bit0 == 0 )
3918 : {
3919 0 : st->cng_type = LP_CNG;
3920 0 : move16();
3921 :
3922 : /* force MODE1 when selecting LP_CNG */
3923 0 : st->codec_mode = MODE1;
3924 0 : move16();
3925 : }
3926 0 : ELSE IF( bit0 == 1 )
3927 : {
3928 0 : st->cng_type = FD_CNG;
3929 0 : move16();
3930 :
3931 0 : test();
3932 0 : if ( st->last_codec_mode == MODE2 && st->last_total_brate == ACELP_13k20 )
3933 : {
3934 0 : st->codec_mode = MODE1;
3935 0 : move16();
3936 : }
3937 : }
3938 : }
3939 :
3940 3100 : return;
3941 : }
3942 :
3943 :
3944 : /*-------------------------------------------------------------------*
3945 : * dec_prm_core()
3946 : *
3947 : *
3948 : *-------------------------------------------------------------------*/
3949 :
3950 1050 : static void dec_prm_core( Decoder_State *st )
3951 : {
3952 : Word16 n, frame_size_index, num_bits;
3953 : UWord16 lsb;
3954 : Word32 L_tmp;
3955 :
3956 1050 : frame_size_index = -1;
3957 1050 : move16();
3958 1050 : st->core = -1;
3959 1050 : move16();
3960 :
3961 1050 : IF( st->total_brate == FRAME_NO_DATA )
3962 : {
3963 0 : st->m_frame_type = ZERO_FRAME;
3964 0 : move16();
3965 : }
3966 1050 : ELSE IF( EQ_32( st->total_brate, SID_2k40 ) )
3967 : {
3968 0 : st->m_frame_type = SID_FRAME;
3969 0 : move16();
3970 : }
3971 : ELSE
3972 : {
3973 1050 : st->m_frame_type = ACTIVE_FRAME;
3974 1050 : move16();
3975 1050 : Mpy_32_16_ss( st->total_brate, 5243, &L_tmp, &lsb ); /* 5243 is 1/50 in Q18. (0+18-15=3) */
3976 1050 : num_bits = extract_l( L_shr( L_tmp, 3 ) ); /* Q0 */
3977 1050 : assert( num_bits == st->total_brate / 50 );
3978 8400 : FOR( n = 0; n < FRAME_SIZE_NB; ++n )
3979 : {
3980 8400 : IF( EQ_16( FrameSizeConfig[n].frame_bits, num_bits ) )
3981 : {
3982 1050 : frame_size_index = n;
3983 1050 : move16();
3984 1050 : BREAK;
3985 : }
3986 : }
3987 :
3988 : /* Get bandwidth mode */
3989 1050 : st->bwidth = get_next_indice_fx( st, FrameSizeConfig[frame_size_index].bandwidth_bits );
3990 1050 : move16();
3991 :
3992 1050 : st->bwidth = add( st->bwidth, FrameSizeConfig[frame_size_index].bandwidth_min );
3993 1050 : move16();
3994 :
3995 1050 : IF( GT_16( st->bwidth, FB ) )
3996 : {
3997 0 : st->bwidth = FB;
3998 0 : move16();
3999 0 : st->BER_detect = 1;
4000 0 : move16();
4001 : }
4002 :
4003 1050 : test();
4004 1050 : IF( GT_16( st->bwidth, SWB ) && LT_32( st->total_brate, ACELP_16k40 ) )
4005 : {
4006 0 : st->bwidth = SWB;
4007 0 : move16();
4008 0 : st->BER_detect = 1;
4009 0 : move16();
4010 : }
4011 :
4012 : /* Skip reserved bit */
4013 1050 : get_next_indice_tmp_fx( st, FrameSizeConfig[frame_size_index].reserved_bits );
4014 :
4015 1050 : IF( get_next_indice_1_fx( st ) != 0 ) /* TCX */
4016 : {
4017 446 : st->core = TCX_20_CORE;
4018 446 : move16();
4019 446 : if ( get_next_indice_1_fx( st ) != 0 )
4020 : {
4021 75 : st->core = HQ_CORE;
4022 75 : move16();
4023 : }
4024 : }
4025 : ELSE /* ACELP */
4026 : {
4027 604 : st->core = ACELP_CORE;
4028 604 : move16();
4029 : }
4030 : }
4031 :
4032 1050 : return;
4033 : }
4034 :
4035 :
4036 : /*-----------------------------------------------------------------*
4037 : * decision_matrix_core_dec()
4038 : *
4039 : * Read core mode signalling bits from the bitstream
4040 : * Set st->core, and st->bwidth if signalled together with the core.
4041 : *-----------------------------------------------------------------*/
4042 :
4043 1050 : static void decision_matrix_core_dec(
4044 : Decoder_State *st /* i/o: decoder state structure */
4045 : )
4046 : {
4047 : Word16 start_idx;
4048 : Word32 ind;
4049 : Word16 nBits;
4050 :
4051 1050 : assert( st->bfi != 1 );
4052 :
4053 1050 : st->core = -1;
4054 1050 : move16();
4055 1050 : st->bwidth = -1;
4056 1050 : move16();
4057 :
4058 1050 : test();
4059 1050 : IF( ( st->total_brate == FRAME_NO_DATA ) || EQ_32( st->total_brate, SID_2k40 ) )
4060 : {
4061 0 : st->core = ACELP_CORE;
4062 0 : move16();
4063 : }
4064 : /* SC-VBR */
4065 1050 : ELSE IF( EQ_32( st->total_brate, PPP_NELP_2k80 ) )
4066 : {
4067 0 : st->core = ACELP_CORE;
4068 0 : move16();
4069 0 : return;
4070 : }
4071 :
4072 : /*---------------------------------------------------------------------*
4073 : * ACELP/HQ core selection
4074 : *---------------------------------------------------------------------*/
4075 :
4076 1050 : test();
4077 1050 : IF( LT_32( st->total_brate, ACELP_24k40 ) )
4078 : {
4079 1050 : st->core = ACELP_CORE;
4080 1050 : move16();
4081 : }
4082 0 : ELSE IF( GE_32( st->total_brate, ACELP_24k40 ) && LE_32( st->total_brate, ACELP_64k ) )
4083 : {
4084 : /* read the ACELP/HQ core selection bit */
4085 0 : st->core = imult1616( get_next_indice_fx( st, 1 ), HQ_CORE );
4086 0 : move16();
4087 : }
4088 : ELSE
4089 : {
4090 0 : st->core = HQ_CORE;
4091 0 : move16();
4092 : }
4093 :
4094 : /*-----------------------------------------------------------------*
4095 : * Read ACELP signalling bits from the bitstream
4096 : *-----------------------------------------------------------------*/
4097 :
4098 1050 : IF( st->core == ACELP_CORE )
4099 : {
4100 : /* find the section in the ACELP signalling table corresponding to bitrate */
4101 1050 : start_idx = 0;
4102 1050 : move16();
4103 36750 : WHILE( acelp_sig_tbl[start_idx] != st->total_brate )
4104 : {
4105 35700 : start_idx = add( start_idx, 1 );
4106 : }
4107 :
4108 : /* skip the bitrate */
4109 1050 : start_idx = add( start_idx, 1 );
4110 :
4111 : /* retrieve the number of bits */
4112 1050 : nBits = extract_l( acelp_sig_tbl[start_idx] );
4113 1050 : start_idx = add( start_idx, 1 );
4114 :
4115 : /* retrieve the signalling indice */
4116 1050 : ind = acelp_sig_tbl[start_idx + get_next_indice_fx( st, nBits )];
4117 1050 : st->bwidth = extract_l( L_and( L_shr( ind, 3 ), 0x7 ) );
4118 1050 : move16();
4119 :
4120 : /* convert signalling indice into signalling information */
4121 1050 : if ( EQ_32( L_and( ind, 0x7 ), LR_MDCT ) )
4122 : {
4123 309 : st->core = HQ_CORE;
4124 309 : move16();
4125 : }
4126 : }
4127 :
4128 : /*-----------------------------------------------------------------*
4129 : * Read HQ signalling bits from the bitstream
4130 : * Set HQ core type
4131 : *-----------------------------------------------------------------*/
4132 :
4133 1050 : IF( EQ_16( st->core, HQ_CORE ) )
4134 : {
4135 : /* read the HQ/TCX core switching flag */
4136 309 : if ( get_next_indice_fx( st, 1 ) != 0 )
4137 : {
4138 275 : st->core = TCX_20_CORE;
4139 275 : move16();
4140 : }
4141 :
4142 : /* For TCX: read/set band-width (needed for different I/O sampling rate support) */
4143 309 : test();
4144 309 : IF( EQ_16( st->core, TCX_20_CORE ) && GT_32( st->total_brate, ACELP_16k40 ) )
4145 : {
4146 0 : ind = get_next_indice_fx( st, 2 );
4147 :
4148 0 : IF( ind == 0 )
4149 : {
4150 0 : st->bwidth = NB;
4151 0 : move16();
4152 : }
4153 0 : ELSE IF( EQ_32( ind, 1 ) )
4154 : {
4155 0 : st->bwidth = WB;
4156 0 : move16();
4157 : }
4158 0 : ELSE IF( EQ_32( ind, 2 ) )
4159 : {
4160 0 : st->bwidth = SWB;
4161 0 : move16();
4162 : }
4163 : ELSE
4164 : {
4165 0 : st->bwidth = FB;
4166 0 : move16();
4167 : }
4168 : }
4169 : }
4170 :
4171 1050 : return;
4172 : }
4173 :
4174 :
4175 : /*-------------------------------------------------------------------*
4176 : * mdct_switching_dec()
4177 : *
4178 : * Set up MDCT core switching if indicated in the bit stream
4179 : *-------------------------------------------------------------------*/
4180 :
4181 3100 : void mdct_switching_dec_fx(
4182 : Decoder_State *st /* i/o: decoder state structure */
4183 : )
4184 : {
4185 3100 : if ( !st->bfi )
4186 : {
4187 3100 : IF( st->Opt_AMR_WB != 0 )
4188 : {
4189 0 : return;
4190 : }
4191 :
4192 3100 : test();
4193 3100 : test();
4194 3100 : IF( EQ_32( st->total_brate, ACELP_13k20 ) || EQ_32( st->total_brate, ACELP_32k ) )
4195 : {
4196 1050 : st->mdct_sw_enable = MODE1;
4197 1050 : move16();
4198 : }
4199 2050 : ELSE IF( LE_32( ACELP_16k40, st->total_brate ) && LE_32( st->total_brate, ACELP_24k40 ) )
4200 : {
4201 1050 : st->mdct_sw_enable = MODE2;
4202 1050 : move16();
4203 : }
4204 :
4205 3100 : test();
4206 3100 : test();
4207 3100 : IF( EQ_16( st->codec_mode, MODE1 ) && EQ_16( st->mdct_sw_enable, MODE1 ) )
4208 1050 : {
4209 : /* Read ahead core mode signaling */
4210 : Word16 next_bit_pos_save;
4211 : Word16 core_save;
4212 : Word16 bwidth_save;
4213 :
4214 1050 : next_bit_pos_save = st->next_bit_pos;
4215 1050 : move16();
4216 1050 : core_save = st->core;
4217 1050 : move16();
4218 1050 : bwidth_save = st->bwidth;
4219 1050 : move16();
4220 :
4221 1050 : decision_matrix_core_dec( st ); /* sets st->core */
4222 :
4223 1050 : IF( EQ_16( st->core, TCX_20_CORE ) )
4224 : {
4225 : /* Trigger TCX */
4226 275 : st->codec_mode = MODE2;
4227 275 : move16();
4228 275 : st->mdct_sw = MODE1;
4229 275 : move16();
4230 : }
4231 : ELSE
4232 : {
4233 : /* Rewind bitstream */
4234 775 : st->next_bit_pos = next_bit_pos_save;
4235 775 : move16();
4236 775 : IF( st->bfi != 0 )
4237 : {
4238 0 : st->core = core_save;
4239 0 : move16();
4240 0 : st->bwidth = bwidth_save;
4241 0 : move16();
4242 : }
4243 : }
4244 : }
4245 2050 : ELSE IF( EQ_16( st->codec_mode, MODE2 ) && EQ_16( st->mdct_sw_enable, MODE2 ) )
4246 : {
4247 : /* Read ahead core mode signaling */
4248 : Word16 next_bit_pos_save;
4249 : Word16 core_save;
4250 : Word16 bwidth_save;
4251 :
4252 1050 : next_bit_pos_save = st->next_bit_pos;
4253 1050 : move16();
4254 1050 : core_save = st->core;
4255 1050 : move16();
4256 1050 : bwidth_save = st->bwidth;
4257 1050 : move16();
4258 :
4259 1050 : dec_prm_core( st ); /* sets st->core */
4260 :
4261 1050 : IF( EQ_16( st->core, HQ_CORE ) )
4262 : {
4263 : /* Trigger HQ_CORE */
4264 75 : st->codec_mode = MODE1;
4265 75 : move16();
4266 75 : st->mdct_sw = MODE2;
4267 75 : move16();
4268 : }
4269 : ELSE
4270 : {
4271 : /* Rewind bitstream */
4272 975 : st->next_bit_pos = next_bit_pos_save;
4273 975 : move16();
4274 975 : if ( st->bfi != 0 )
4275 : {
4276 0 : st->core = core_save;
4277 0 : move16();
4278 : }
4279 : /* always reset bwidth, to not interfere with BER logic */
4280 975 : st->bwidth = bwidth_save;
4281 975 : move16();
4282 : }
4283 : }
4284 : }
4285 :
4286 3100 : return;
4287 : }
4288 :
4289 :
4290 : /*-------------------------------------------------------------------*
4291 : * reset_elements()
4292 : *
4293 : * Simulate packet losses by reading FEC pattern from external file
4294 : *-------------------------------------------------------------------*/
4295 :
4296 812688 : Decoder_State **reset_elements(
4297 : Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
4298 : )
4299 : {
4300 : Word16 k, n;
4301 812688 : Decoder_State **sts = NULL; /* to avoid compilation warning */
4302 :
4303 1454171 : FOR( k = 0; k < st_ivas->nSCE; k++ )
4304 : {
4305 641483 : sts = st_ivas->hSCE[k]->hCoreCoder;
4306 :
4307 641483 : sts[0]->bfi = 0;
4308 641483 : sts[0]->BER_detect = 0;
4309 641483 : sts[0]->mdct_sw_enable = 0;
4310 641483 : sts[0]->mdct_sw = 0;
4311 :
4312 641483 : move16();
4313 641483 : move16();
4314 641483 : move16();
4315 641483 : move16();
4316 :
4317 641483 : reset_indices_dec( sts[0] );
4318 : }
4319 :
4320 1626757 : FOR( k = 0; k < st_ivas->nCPE; k++ )
4321 : {
4322 814069 : sts = st_ivas->hCPE[k]->hCoreCoder;
4323 :
4324 2442207 : FOR( n = 0; n < CPE_CHANNELS; n++ )
4325 : {
4326 1628138 : sts[n]->bfi = 0;
4327 1628138 : sts[n]->BER_detect = 0;
4328 1628138 : sts[n]->mdct_sw_enable = 0;
4329 1628138 : sts[n]->mdct_sw = 0;
4330 :
4331 1628138 : move16();
4332 1628138 : move16();
4333 1628138 : move16();
4334 1628138 : move16();
4335 :
4336 1628138 : reset_indices_dec( sts[n] );
4337 : }
4338 : }
4339 :
4340 812688 : return sts; /* return last decoder state */
4341 : }
4342 :
4343 :
4344 : /*-------------------------------------------------------------------*
4345 : * ivas_set_bitstream_pointers()
4346 : *
4347 : * Set bitstream pointers for every SCE/CPE Core-Decoder
4348 : *-------------------------------------------------------------------*/
4349 :
4350 403561 : void ivas_set_bitstream_pointers(
4351 : Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
4352 : )
4353 : {
4354 : Word16 k, num_bits;
4355 : Decoder_State **sts;
4356 :
4357 403561 : num_bits = 0;
4358 :
4359 : /* set bitstream pointers for SCEs */
4360 723535 : for ( k = 0; k < st_ivas->nSCE; k++ )
4361 : {
4362 319974 : sts = st_ivas->hSCE[k]->hCoreCoder;
4363 319974 : sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
4364 319974 : num_bits += (Word16) ( st_ivas->hSCE[k]->element_brate / FRAMES_PER_SEC );
4365 : }
4366 :
4367 : /* set bitstream pointers for CPEs */
4368 807635 : for ( k = 0; k < st_ivas->nCPE; k++ )
4369 : {
4370 404074 : sts = st_ivas->hCPE[k]->hCoreCoder;
4371 404074 : sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
4372 404074 : num_bits += (Word16) ( st_ivas->hCPE[k]->element_brate / FRAMES_PER_SEC );
4373 : }
4374 :
4375 403561 : return;
4376 : }
4377 :
4378 : #ifdef DEBUGGING
4379 :
4380 : /*-------------------------------------------------------------------*
4381 : * file_read_FECpattern()
4382 : *
4383 : * Simulate packet losses by reading FEC pattern from external file
4384 : *-------------------------------------------------------------------*/
4385 :
4386 : static ivas_error file_read_FECpattern(
4387 : Word16 *bfi )
4388 : {
4389 : ivas_error error;
4390 :
4391 : error = IVAS_ERR_OK;
4392 : *bfi = 0;
4393 :
4394 : /* FEC pattern file provided */
4395 : if ( FEC_pattern != NULL )
4396 : {
4397 : Word16 tmp = 0;
4398 : if ( fread( &tmp, sizeof( Word16 ), 1, FEC_pattern ) != 1 )
4399 : {
4400 : if ( feof( FEC_pattern ) != 0 )
4401 : {
4402 : #ifdef WRAP_AS_EIDXOR
4403 : fseek( FEC_pattern, 0L, SEEK_SET );
4404 : fread( &tmp, sizeof( Word16 ), 1, FEC_pattern );
4405 : #else
4406 : tmp = 0;
4407 : fseek( FEC_pattern, 0L, SEEK_SET );
4408 : #endif
4409 : }
4410 : else
4411 : {
4412 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern file !" );
4413 : }
4414 : }
4415 :
4416 : if ( tmp == 2609 || tmp == 1 || tmp == (UWord16) 0x6B20 /* == G192_SYNC_BAD_FRAME */ )
4417 : {
4418 : *bfi = 1;
4419 : }
4420 : else
4421 : {
4422 : *bfi = 0;
4423 : }
4424 : }
4425 :
4426 : return error;
4427 : }
4428 :
4429 : #endif
4430 :
4431 : /*-------------------------------------------------------------------*
4432 : * read_indices()
4433 : *
4434 : * Detect SID, NO_DATA, BFI, etc. and set bitstream pointers
4435 : * Set ivas_total_brate
4436 : * Note: each bit is represented in bitsream buffer as a uint16_t of value 0 or 1
4437 : *-------------------------------------------------------------------*/
4438 :
4439 : /*! r: 1 = reading OK, 0 = problem */
4440 412227 : ivas_error read_indices_fx(
4441 : Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
4442 : UWord16 bit_stream[], /* i : bitstream buffer */
4443 : UWord16 num_bits, /* i : number of bits in bitstream */
4444 : Word16 *prev_ft_speech,
4445 : Word16 *CNG,
4446 : Word16 bfi /* i : bad frame indicator */
4447 : )
4448 : {
4449 : Word16 k;
4450 : Decoder_State **sts;
4451 412227 : Word32 total_brate = 0;
4452 412227 : move32();
4453 : Word16 curr_ft_good_sp, curr_ft_bad_sp;
4454 : Word16 g192_sid_first, sid_upd_bad, sid_update;
4455 : Word16 speech_bad, speech_lost;
4456 : Word16 n;
4457 : ivas_error error;
4458 :
4459 412227 : error = IVAS_ERR_OK;
4460 412227 : move32();
4461 :
4462 412227 : st_ivas->BER_detect = 0;
4463 412227 : move16();
4464 412227 : sts = reset_elements( st_ivas );
4465 :
4466 : #ifdef DEBUGGING
4467 : file_read_FECpattern( &st_ivas->bfi );
4468 : st_ivas->bfi |= bfi;
4469 :
4470 : if ( bfi == FRAMEMODE_MISSING )
4471 : {
4472 : for ( k = 0; k < num_bits; k++ )
4473 : {
4474 : bit_stream[k] = 0;
4475 : }
4476 : }
4477 : #else
4478 412227 : st_ivas->bfi = bfi;
4479 412227 : move16();
4480 : #endif
4481 :
4482 : /* convert the frame length to total bitrate */
4483 412227 : total_brate = imult3216( num_bits, FRAMES_PER_SEC );
4484 412227 : move32();
4485 :
4486 : /* verify that a valid num bits value is present */
4487 : /* only AMRWB, EVS or IVAS bitrates or 0 (NO DATA) are allowed */
4488 412227 : IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) )
4489 : {
4490 409127 : k = 0;
4491 409127 : move16();
4492 :
4493 409127 : test();
4494 3466497 : WHILE( LT_16( k, SIZE_IVAS_BRATE_TBL ) && NE_32( total_brate, ivas_brate_tbl[k] ) )
4495 : {
4496 3057370 : k = add( k, 1 );
4497 : }
4498 :
4499 409127 : test();
4500 409127 : test();
4501 409127 : test();
4502 409127 : test();
4503 409127 : IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && ( LT_16( k, SIZE_IVAS_BRATE_TBL ) || LE_32( total_brate, SID_2k40 ) ) )
4504 : {
4505 94769 : st_ivas->element_mode_init = IVAS_SCE;
4506 94769 : move16();
4507 : }
4508 314358 : ELSE IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) && LE_32( total_brate, SID_2k40 ) )
4509 : {
4510 3937 : st_ivas->element_mode_init = IVAS_SCE;
4511 3937 : move16();
4512 : }
4513 310421 : ELSE IF( EQ_16( k, SIZE_IVAS_BRATE_TBL ) )
4514 : {
4515 0 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) detected! Exiting ! \n", total_brate );
4516 : }
4517 : ELSE
4518 : {
4519 310421 : st_ivas->element_mode_init = -1;
4520 310421 : move16();
4521 : }
4522 : }
4523 : ELSE /* AMRWB or EVS */
4524 : {
4525 3100 : st_ivas->element_mode_init = EVS_MONO;
4526 3100 : move16();
4527 :
4528 3100 : IF( rate2EVSmode( total_brate, NULL ) < 0 ) /* negative value means that a valid rate was not found */
4529 : {
4530 0 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) detected! Exiting ! \n", total_brate );
4531 : }
4532 : }
4533 :
4534 : /* G.RX DTX handler*/
4535 : /* handle SID_FIRST, SID_BAD, SPEECH_LOST, NO_DATA */
4536 : /* (total_brate, bfi , st_CNG) = rx_handler(received frame type, [previous frame type], past CNG state, past core) */
4537 412227 : curr_ft_good_sp = 0;
4538 412227 : move16();
4539 412227 : curr_ft_bad_sp = 0;
4540 412227 : move16();
4541 :
4542 412227 : IF( is_DTXrate( total_brate ) == 0 )
4543 : {
4544 392375 : IF( st_ivas->bfi == 0 )
4545 : {
4546 384810 : curr_ft_good_sp = 1;
4547 384810 : move16();
4548 : }
4549 : ELSE
4550 : {
4551 7565 : curr_ft_bad_sp = 1;
4552 7565 : move16();
4553 : }
4554 : }
4555 :
4556 412227 : sid_update = 0;
4557 412227 : move16();
4558 412227 : sid_upd_bad = 0;
4559 412227 : move16();
4560 412227 : IF( EQ_16( is_SIDrate( total_brate ), 1 ) )
4561 : {
4562 2980 : IF( st_ivas->bfi == 0 )
4563 : {
4564 2907 : sid_update = 1;
4565 2907 : move16();
4566 : }
4567 : ELSE
4568 : {
4569 73 : sid_upd_bad = 1; /* this frame type may happen in ETSI/3GPP CS cases, a corrupt SID frames */
4570 73 : move16();
4571 : }
4572 : }
4573 :
4574 : /* all zero indices/bits iSP AMRWB SID_update results in a valid LP filter with extremely high LP-filter-gain */
4575 : /* all zero indices/bits may be a result of CS bit errors and/or erroneously injected by gateways or by a bad dejitter handlers */
4576 412227 : test();
4577 412227 : IF( EQ_32( total_brate, SID_1k75 ) && EQ_16( sid_update, 1 ) )
4578 : {
4579 : /* valid sid_update received, check for very risky but formally valid content */
4580 0 : Word16 sum = 0;
4581 0 : move16();
4582 0 : FOR( k = 0; k < num_bits; ++k )
4583 : {
4584 0 : sum = add( sum, extract_l( EQ_32( bit_stream[k], 1 ) ) ); /* check of 35 zeroes */
4585 : }
4586 0 : if ( sum == 0 )
4587 : { /* all zeros */
4588 0 : sid_upd_bad = 1; /* initial signal as corrupt (BER likely) */
4589 0 : move16();
4590 : }
4591 : }
4592 :
4593 : /* AMRWB 26.173 G.192 file reader (read_serial) does not declare/use SID_BAD ft,
4594 : it declares every bad synch marked frame initially as a lost_speech frame,
4595 : and then the RXDTX handler CNG state decides the decoding mode CNG/SPEECH.
4596 : While In the AMRWB ETSI/3GPP format eid a CRC error in a detected SID_UPDATE frames triggers SID_BAD.
4597 : Here we inhibit use of the SID-length info, even though it is available in the G.192 file format after STL/EID-XOR .
4598 : */
4599 412227 : IF( sid_upd_bad )
4600 : {
4601 73 : sid_upd_bad = 0;
4602 73 : move16();
4603 73 : total_brate = FRAME_NO_DATA; /* treat SID_BAD as a stolen signaling frame --> SPEECH LOST */
4604 73 : move32();
4605 : }
4606 :
4607 412227 : g192_sid_first = 0;
4608 412227 : move16();
4609 :
4610 412227 : test();
4611 412227 : test();
4612 412227 : test();
4613 412227 : test();
4614 412227 : if ( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) && EQ_16( sts[0]->core, AMR_WB_CORE ) && *prev_ft_speech && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 )
4615 : {
4616 0 : g192_sid_first = 1; /* SID_FIRST detected for previous AMRWB/AMRWBIO active frames only */
4617 : /* It is not possible to perfectly simulate rate switching conditions EVS->AMRWBIO where:
4618 : the very first SID_FIRST detection is based on a past EVS active frame
4619 : and a good length 0 "SID_FIRST"(NO_DATA) frame is sent in AMRWBIO,
4620 : due to the one frame state memory in the AMRWB legacy G.192 SID_FIRST encoding
4621 : */
4622 0 : move16();
4623 : }
4624 :
4625 412227 : speech_bad = 0;
4626 412227 : move16();
4627 :
4628 412227 : test();
4629 412227 : if ( st_ivas->bfi != 0 && ( is_DTXrate( total_brate ) == 0 ) )
4630 : {
4631 7565 : speech_bad = 1; /* initial ft assumption, CNG_state decides what to do */
4632 7565 : move16();
4633 : }
4634 :
4635 412227 : speech_lost = 0;
4636 412227 : move16();
4637 :
4638 412227 : test();
4639 412227 : if ( total_brate == FRAME_NO_DATA && st_ivas->bfi != 0 ) /* unsent NO_DATA or stolen NO_DATA/signaling frame */
4640 : {
4641 2500 : speech_lost = 1; /* initial ft assumption, CNG_state decides what to do */
4642 2500 : move16();
4643 : }
4644 :
4645 : /* Do not allow decoder to enter CNG-synthesis for any instantly received GOOD+LENGTH==0 frame
4646 : as this frame was never transmitted, one can not know it is good and has a a length of zero ) */
4647 412227 : IF( *CNG != 0 )
4648 : {
4649 : /* We were in CNG synthesis */
4650 18675 : if ( curr_ft_good_sp != 0 )
4651 : {
4652 : /* only a good speech frame makes you leave CNG synthesis */
4653 934 : *CNG = 0;
4654 934 : move16();
4655 : }
4656 : }
4657 : ELSE
4658 : {
4659 : /* We were in SPEECH synthesis */
4660 : /* only a received/detected SID frame can make the decoder enter into CNG synthsis */
4661 393552 : test();
4662 393552 : test();
4663 393552 : if ( g192_sid_first || sid_update || sid_upd_bad )
4664 : {
4665 1010 : *CNG = 1;
4666 1010 : move16();
4667 : }
4668 : }
4669 :
4670 : /* set bfi, total_brate pair for proper decoding */
4671 : /* handle the G.192 _simulated_ untransmitted NO_DATA frame, setting for decoder SPEECH synthesis */
4672 412227 : test();
4673 412227 : test();
4674 412227 : if ( *CNG == 0 && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 )
4675 : {
4676 80 : st_ivas->bfi = 1; /* SPEECH PLC code will now become active as in a real system */
4677 : /* total_brate= 0 */
4678 80 : move16();
4679 : }
4680 :
4681 : /* handle bad/lost speech frame(and CS bad SID frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */
4682 412227 : test();
4683 412227 : test();
4684 412227 : test();
4685 412227 : test();
4686 412227 : IF( (
4687 : NE_16( bfi, FRAMEMODE_FUTURE ) &&
4688 : ( *CNG != 0 ) && ( ( speech_bad != 0 ) || ( speech_lost != 0 ) ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */
4689 : ( sid_upd_bad != 0 ) ) /* SID_UPD_BAD --> start CNG */
4690 : {
4691 1479 : st_ivas->bfi = 0; /* bfi=0 needed to activate CNG code */
4692 1479 : move16();
4693 1479 : total_brate = FRAME_NO_DATA;
4694 1479 : move32();
4695 : }
4696 :
4697 : /* update for next frame's G.192 file format's odd SID_FIRST detection (primarily for AMRWBIO) */
4698 412227 : test();
4699 412227 : *prev_ft_speech = ( ( curr_ft_good_sp != 0 ) || ( curr_ft_bad_sp != 0 ) );
4700 412227 : move16();
4701 :
4702 : /* st->total brate= total_brate; updated in a good frame below */
4703 :
4704 822222 : FOR( k = 0; k < st_ivas->nCPE; k++ )
4705 : {
4706 409995 : sts = st_ivas->hCPE[k]->hCoreCoder;
4707 1229985 : FOR( n = 0; n < CPE_CHANNELS; n++ )
4708 : {
4709 819990 : sts[n]->bfi = st_ivas->bfi;
4710 819990 : move16();
4711 : }
4712 : }
4713 :
4714 736836 : FOR( k = 0; k < st_ivas->nSCE; k++ )
4715 : {
4716 324609 : sts = st_ivas->hSCE[k]->hCoreCoder;
4717 324609 : sts[0]->bfi = st_ivas->bfi;
4718 324609 : move16();
4719 : }
4720 :
4721 412227 : IF( st_ivas->bfi == 0 )
4722 : {
4723 : /* select Mode 1 or Mode 2 */
4724 403561 : IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) /* EVS mono */
4725 : {
4726 3100 : decoder_selectCodec( sts[0], total_brate, bit_stream[0] );
4727 3100 : st_ivas->hDecoderConfig->Opt_AMR_WB = sts[0]->Opt_AMR_WB;
4728 3100 : move16();
4729 : }
4730 : ELSE /* IVAS */
4731 : {
4732 400461 : st_ivas->codec_mode = MODE1;
4733 400461 : move16();
4734 400461 : st_ivas->hDecoderConfig->Opt_AMR_WB = 0;
4735 400461 : move16();
4736 : }
4737 : }
4738 :
4739 : /* GOOD frame */
4740 412227 : test();
4741 412227 : if ( st_ivas->bfi == 0 || EQ_16( st_ivas->bfi, FRAMEMODE_FUTURE ) )
4742 : {
4743 : /* GOOD frame - convert ITU-T G.192 words to short values */
4744 403561 : st_ivas->hDecoderConfig->ivas_total_brate = total_brate;
4745 403561 : move32();
4746 : }
4747 :
4748 412227 : st_ivas->bit_stream = bit_stream;
4749 :
4750 412227 : IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) )
4751 : {
4752 3100 : ivas_set_bitstream_pointers( st_ivas );
4753 : }
4754 :
4755 412227 : return error;
4756 : }
4757 :
4758 :
4759 : /*-------------------------------------------------------------------*
4760 : * berCheck()
4761 : *
4762 : * Check for bit errors in channel aware signalling.
4763 : *-------------------------------------------------------------------*/
4764 :
4765 0 : static void berCheck(
4766 : Decoder_State *st, /* i/o: decoder state structure */
4767 : Word16 *coder_type /* i/o: coder type */
4768 : )
4769 : {
4770 : /* In case of RF flag = 1, and valid RF packet with primary and partial copy */
4771 0 : test();
4772 0 : test();
4773 0 : IF( ( EQ_16( st->bwidth, NB ) || EQ_16( st->bwidth, FB ) ) || ( GE_16( *coder_type, TRANSITION ) ) )
4774 : {
4775 0 : if ( EQ_16( st->use_partial_copy, 1 ) )
4776 : {
4777 0 : st->use_partial_copy = 0;
4778 0 : move16();
4779 : }
4780 :
4781 0 : st->bfi = 1;
4782 0 : move16();
4783 0 : st->bwidth = st->last_bwidth;
4784 0 : move16();
4785 0 : st->BER_detect = 1;
4786 0 : move16();
4787 0 : *coder_type = GENERIC;
4788 0 : move16();
4789 : }
4790 :
4791 0 : return;
4792 : }
4793 :
4794 :
4795 : /*-------------------------------------------------------------------*
4796 : * getPartialCopyInfo()
4797 : *
4798 : * Check if the frame includes a partial copy for channel aware processing.
4799 : *-------------------------------------------------------------------*/
4800 :
4801 3100 : void getPartialCopyInfo(
4802 : Decoder_State *st, /* i/o: decoder state structure */
4803 : Word16 *coder_type,
4804 : Word16 *sharpFlag )
4805 : {
4806 : Word16 nBits;
4807 : Word16 ind;
4808 : /* check the rf flag in the packet */
4809 3100 : get_rfFlag( st, &( st->rf_flag ), &nBits, &ind );
4810 :
4811 : /* get rf frame type info */
4812 3100 : get_rfFrameType( st, &( st->rf_frame_type ) );
4813 :
4814 : /* Get the FEC offset info */
4815 3100 : get_rf_fec_offset( st, &( st->rf_fec_offset ) );
4816 :
4817 : /* reset number of target bits in case of rate switching */
4818 3100 : st->rf_target_bits = 0;
4819 3100 : move16();
4820 :
4821 : /* Get the number of bits used for RF*/
4822 3100 : IF( EQ_16( st->rf_flag, 1 ) )
4823 : {
4824 0 : *coder_type = s_and( ind, 0x7 );
4825 0 : move16();
4826 0 : st->bwidth = s_and( shr( ind, 3 ), 0x7 );
4827 0 : move16();
4828 0 : *sharpFlag = s_and( shr( ind, 6 ), 0x1 );
4829 0 : move16();
4830 0 : st->codec_mode = MODE2;
4831 0 : move16();
4832 0 : get_rfTargetBits( st->rf_frame_type, &( st->rf_target_bits ) );
4833 :
4834 0 : IF( EQ_16( st->bfi, FRAMEMODE_FUTURE ) )
4835 : {
4836 0 : st->use_partial_copy = 1;
4837 0 : move16();
4838 : /* now set the frame mode to normal mode */
4839 0 : test();
4840 0 : IF( GE_16( st->rf_frame_type, RF_TCXFD ) && LE_16( st->rf_frame_type, RF_TCXTD2 ) )
4841 : {
4842 0 : st->bfi = 1;
4843 0 : move16();
4844 0 : st->core = 1;
4845 0 : move16();
4846 : }
4847 : ELSE
4848 : {
4849 0 : st->bfi = FRAMEMODE_NORMAL;
4850 0 : move16();
4851 0 : st->core = 0;
4852 0 : move16();
4853 : }
4854 : }
4855 : /* check for bit errors */
4856 0 : berCheck( st, coder_type );
4857 :
4858 0 : get_next_indice_tmp_fx( st, nBits );
4859 : }
4860 :
4861 3100 : return;
4862 : }
4863 :
4864 :
4865 : /*-------------------------------------------------------------------*
4866 : * get_rfFlag()
4867 : *
4868 : * Check if rf flag is present in the bitstream
4869 : *-------------------------------------------------------------------*/
4870 :
4871 3100 : void get_rfFlag(
4872 : Decoder_State *st, /* i: decoder state structure */
4873 : Word16 *rf_flag, /* o : check for the RF flag */
4874 : Word16 *nBits,
4875 : Word16 *ind )
4876 : {
4877 : Word16 start_idx, nBits_tmp;
4878 : Word16 ind_tmp;
4879 :
4880 : /* Init */
4881 3100 : *rf_flag = 0;
4882 3100 : move16();
4883 :
4884 : /* check for rf_flag in the packet and extract the rf_frame_type and rf_fec_offset */
4885 3100 : test();
4886 3100 : test();
4887 3100 : IF( EQ_32( st->total_brate, ACELP_13k20 ) && ( ( st->bfi == FRAMEMODE_NORMAL ) || EQ_16( st->bfi, FRAMEMODE_FUTURE ) ) )
4888 : {
4889 : /* find the section in the ACELP signalling table corresponding to bitrate */
4890 1050 : start_idx = 0;
4891 1050 : move16();
4892 36750 : WHILE( acelp_sig_tbl[start_idx] != st->total_brate )
4893 : {
4894 35700 : start_idx = add( start_idx, 1 );
4895 35700 : assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" );
4896 : }
4897 :
4898 : /* skip the bitrate */
4899 1050 : start_idx = add( start_idx, 1 );
4900 :
4901 : /* retrieve the number of bits */
4902 1050 : nBits_tmp = (Word16) acelp_sig_tbl[start_idx++];
4903 1050 : move16();
4904 :
4905 : /* retrieve the signalling indice */
4906 1050 : ind_tmp = (Word16) acelp_sig_tbl[add( start_idx, get_indice_fx( st, 0, nBits_tmp ) )];
4907 1050 : move16();
4908 :
4909 : /* convert signalling indice into RF flag. */
4910 1050 : *rf_flag = s_and( shr( ind_tmp, 7 ), 0x1 );
4911 1050 : move16();
4912 :
4913 1050 : if ( ind )
4914 : {
4915 1050 : *ind = ind_tmp;
4916 1050 : move16();
4917 : }
4918 :
4919 1050 : if ( nBits )
4920 : {
4921 1050 : *nBits = nBits_tmp;
4922 1050 : move16();
4923 : }
4924 : }
4925 :
4926 3100 : return;
4927 : }
4928 :
4929 :
4930 : /*-------------------------------------------------------------------*
4931 : * get_rfFrameType()
4932 : *
4933 : * Extract the rf frame type
4934 : *-------------------------------------------------------------------*/
4935 :
4936 3100 : void get_rfFrameType(
4937 : Decoder_State *st, /* i : decoder state structure */
4938 : Word16 *rf_frame_type /* o : RF frame type */
4939 : )
4940 : {
4941 3100 : Word16 num_bits = 0;
4942 3100 : move16();
4943 :
4944 3100 : IF( EQ_16( st->rf_flag, 1 ) )
4945 : {
4946 : /*num_bits = st->total_brate/50;*/
4947 0 : IF( EQ_32( st->total_brate, ACELP_13k20 ) )
4948 : {
4949 0 : num_bits = 264;
4950 0 : move16(); /* @13.2kbps */
4951 : }
4952 : ELSE
4953 : {
4954 : UWord16 lsb;
4955 : Word32 L_tmp;
4956 0 : Mpy_32_16_ss( st->total_brate, 5243, &L_tmp, &lsb ); /* 5243 is 1/50 in Q18. (0+18-15=3) */
4957 0 : num_bits = extract_l( L_shr( L_tmp, 3 ) ); /* Q0 */
4958 : }
4959 :
4960 : /* the last three bits in a packet is the RF frame type */
4961 0 : *rf_frame_type = get_indice_fx( st, sub( num_bits, 3 ), 3 );
4962 0 : move16();
4963 : }
4964 : ELSE
4965 : {
4966 3100 : *rf_frame_type = 0;
4967 3100 : move16();
4968 : }
4969 :
4970 3100 : return;
4971 : }
4972 :
4973 :
4974 : /*-------------------------------------------------------------------*
4975 : * get_rf_fec_offset()
4976 : *
4977 : * Extract the FEC offset
4978 : *-------------------------------------------------------------------*/
4979 :
4980 3100 : void get_rf_fec_offset(
4981 : Decoder_State *st, /* i : decoder state structure */
4982 : Word16 *rf_fec_offset /* o : RF fec offset */
4983 : )
4984 : {
4985 : Word16 num_bits, tmp;
4986 :
4987 3100 : IF( EQ_16( st->rf_flag, 1 ) )
4988 : {
4989 : /*num_bits = st->total_brate/50;*/
4990 0 : IF( EQ_32( st->total_brate, ACELP_13k20 ) )
4991 : {
4992 0 : num_bits = 264;
4993 0 : move16(); /* @13.2kbps */
4994 : }
4995 : ELSE
4996 : {
4997 : UWord16 lsb;
4998 : Word32 L_tmp;
4999 0 : Mpy_32_16_ss( st->total_brate, 5243, &L_tmp, &lsb ); /* 5243 is 1/50 in Q18. (0+18-15=3) */
5000 0 : num_bits = extract_l( L_shr( L_tmp, 3 ) ); /* Q0 */
5001 : }
5002 :
5003 : /* the two bits before the rf frame type contain the fec offset */
5004 0 : tmp = get_indice_fx( st, sub( num_bits, 5 ), 2 );
5005 :
5006 0 : IF( tmp == 0 )
5007 : {
5008 0 : *rf_fec_offset = 2;
5009 0 : move16();
5010 : }
5011 : ELSE
5012 : {
5013 0 : *rf_fec_offset = add( shl( tmp, 1 ), 1 );
5014 0 : move16();
5015 : }
5016 : }
5017 : ELSE
5018 : {
5019 3100 : *rf_fec_offset = 0;
5020 3100 : move16();
5021 : }
5022 :
5023 3100 : return;
5024 : }
5025 :
5026 :
5027 : /*-------------------------------------------------------------------*
5028 : * get_rfTargetBits()
5029 : *
5030 : * Return the number of RF target bits
5031 : *-------------------------------------------------------------------*/
5032 :
5033 0 : void get_rfTargetBits(
5034 : Word16 rf_frame_type, /* i : RF frame type */
5035 : Word16 *rf_target_bits /* o : Number of RF target bits */
5036 : )
5037 : {
5038 : /* Number of RF bits for different RF coder types */
5039 0 : SWITCH( rf_frame_type )
5040 : {
5041 0 : case RF_NO_DATA:
5042 0 : *rf_target_bits = 5;
5043 0 : move16();
5044 0 : BREAK;
5045 0 : case RF_TCXFD:
5046 0 : *rf_target_bits = 27;
5047 0 : move16();
5048 0 : BREAK;
5049 0 : case RF_TCXTD1:
5050 0 : *rf_target_bits = 16;
5051 0 : move16();
5052 0 : BREAK;
5053 0 : case RF_TCXTD2:
5054 0 : *rf_target_bits = 16;
5055 0 : move16();
5056 0 : BREAK;
5057 0 : case RF_ALLPRED:
5058 : /* Es_pred bits 3 bits, LTF: 1, pitch: 8,5,5,5, FCB: 0, gain: 7,0,7,0, Diff GFr: 4*/
5059 0 : *rf_target_bits = 63;
5060 0 : move16();
5061 0 : BREAK;
5062 0 : case RF_NOPRED:
5063 : /* Es_pred bits 3 bits, LTF: 0, pitch: 0, FCB: 7,7,7,7, gain: 6,0,6,0, Diff GFr: 2*/
5064 0 : *rf_target_bits = 66;
5065 0 : move16();
5066 0 : BREAK;
5067 0 : case RF_GENPRED:
5068 : /* Es_pred bits 3 bits, LTF: 1, pitch: 8,0,8,0, FCB: 6,7,5,5, gain: 5,0,5,0, Diff GFr: 0*/
5069 0 : *rf_target_bits = 70;
5070 0 : move16();
5071 0 : BREAK;
5072 0 : case RF_NELP:
5073 : /* gain: 19, Diff GFr: 5 */
5074 0 : *rf_target_bits = 45;
5075 0 : move16();
5076 0 : BREAK;
5077 : }
5078 :
5079 0 : return;
5080 : }
5081 :
5082 :
5083 : /*-------------------------------------------------------------------*
5084 : * get_NextCoderType_fx()
5085 : *
5086 : * Extract the coder type of next frame
5087 : *-------------------------------------------------------------------*/
5088 :
5089 0 : void get_NextCoderType_fx(
5090 : UWord8 *bitsteam, /* i : bitstream */
5091 : Word16 *next_coder_type /* o : next coder type */
5092 : )
5093 : {
5094 : Word16 k;
5095 : Word16 start_idx;
5096 : Word16 nBits_tmp;
5097 : Word8 bit_stream[ACELP_13k20 / 50];
5098 : UWord16 tmp;
5099 :
5100 0 : FOR( k = 0; k < ACELP_13k20 / 50; k++ )
5101 : {
5102 0 : bit_stream[k] = (UWord8) s_and( shr( bitsteam[k / 8], sub( 7, s_and( k, 7 ) ) ), 0x1 );
5103 0 : move16();
5104 : }
5105 0 : start_idx = 0;
5106 0 : move16();
5107 0 : WHILE( acelp_sig_tbl[start_idx] != ACELP_13k20 )
5108 : {
5109 0 : start_idx = add( start_idx, 1 );
5110 0 : assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" );
5111 : }
5112 :
5113 : /* skip the bitrate */
5114 0 : start_idx = add( start_idx, 1 );
5115 :
5116 0 : tmp = 0;
5117 0 : move16();
5118 0 : nBits_tmp = extract_l( acelp_sig_tbl[start_idx++] );
5119 0 : move16();
5120 0 : FOR( k = 0; k < nBits_tmp; k++ )
5121 : {
5122 0 : tmp = lshl( tmp, 1 );
5123 0 : tmp = add( tmp, bit_stream[k] );
5124 : }
5125 :
5126 : /* retrieve the signalling indice */
5127 0 : *next_coder_type = s_and( extract_l( acelp_sig_tbl[start_idx + tmp] ), 0x7 );
5128 0 : move16();
5129 :
5130 0 : return;
5131 : }
5132 :
5133 :
5134 : /*-------------------------------------------------------------------*
5135 : * get_indice_preview()
5136 : *
5137 : * Indices preview to parse for the presence of partial copy
5138 : *-------------------------------------------------------------------*/
5139 :
5140 0 : static UWord16 get_indice_preview(
5141 : UWord8 *bitstream,
5142 : Word16 bitstreamSize,
5143 : Word16 pos,
5144 : Word16 nb_bits )
5145 : {
5146 : UWord16 value;
5147 : Word16 i;
5148 : UWord16 bitstreamShort[MAX_BITS_PER_FRAME + 16];
5149 : UWord16 *bitstreamShortPtr;
5150 :
5151 : /* convert bitstream from compact bytes to short values */
5152 0 : bitstreamShortPtr = bitstreamShort;
5153 0 : FOR( i = 0; i < bitstreamSize; i++ )
5154 : {
5155 0 : *bitstreamShortPtr++ = s_and( shr( bitstream[i / 8], sub( 7, ( s_and( i, 7 ) ) ) ), 0x1 );
5156 0 : move16();
5157 : }
5158 :
5159 0 : assert( nb_bits <= 16 );
5160 0 : value = 0;
5161 0 : move16();
5162 0 : FOR( i = 0; i < nb_bits; i++ )
5163 : {
5164 0 : value = shl( value, 1 );
5165 0 : value = add( value, bitstreamShort[pos + i] );
5166 : }
5167 :
5168 0 : return value;
5169 : }
5170 :
5171 :
5172 : /*-------------------------------------------------------------------*
5173 : * evs_dec_previewFrame()
5174 : *
5175 : * Signalling index preview
5176 : *-------------------------------------------------------------------*/
5177 :
5178 0 : void evs_dec_previewFrame(
5179 : UWord8 *bitstream,
5180 : Word16 bitstreamSize,
5181 : Word16 *partialCopyFrameType,
5182 : Word16 *partialCopyOffset )
5183 : {
5184 : Word32 total_brate;
5185 : Word16 start_idx, nBits;
5186 : Word32 ind;
5187 : Word16 rf_flag;
5188 :
5189 0 : rf_flag = 0;
5190 0 : move16();
5191 0 : *partialCopyFrameType = 0;
5192 0 : move16();
5193 0 : *partialCopyOffset = 0;
5194 0 : move16();
5195 0 : total_brate = L_mult0( bitstreamSize, 50 );
5196 :
5197 0 : IF( EQ_32( total_brate, ACELP_13k20 ) )
5198 : {
5199 : /* find the section in the ACELP signalling table corresponding to bitrate */
5200 0 : start_idx = 0;
5201 0 : move16();
5202 0 : WHILE( acelp_sig_tbl[start_idx] != total_brate )
5203 : {
5204 0 : start_idx = add( start_idx, 1 );
5205 0 : assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" );
5206 : }
5207 :
5208 : /* skip the bitrate */
5209 0 : start_idx = add( start_idx, 1 );
5210 : /* retrieve the number of bits */
5211 0 : nBits = extract_l( acelp_sig_tbl[start_idx++] );
5212 :
5213 : /* retrieve the signalling indice */
5214 0 : ind = acelp_sig_tbl[( start_idx + get_indice_preview( bitstream, bitstreamSize, 0, nBits ) )];
5215 0 : move32();
5216 :
5217 : /* convert signalling indice into RF flag. */
5218 0 : rf_flag = s_and( extract_l( L_shr( ind, 7 ) ), 0x1 );
5219 0 : assert( rf_flag == ( ( ind >> 7 ) & 0x1 ) );
5220 0 : IF( rf_flag != 0 )
5221 : {
5222 : /* read the fec offset at which the partial copy is received */
5223 0 : ind = get_indice_preview( bitstream, bitstreamSize, sub( bitstreamSize, 5 ), 2 );
5224 0 : IF( ind == 0 ) *partialCopyOffset = 2;
5225 0 : ELSE IF( EQ_32( ind, 1 ) ) *partialCopyOffset = 3;
5226 0 : ELSE IF( EQ_32( ind, 2 ) ) *partialCopyOffset = 5;
5227 0 : ELSE IF( EQ_32( ind, 3 ) ) *partialCopyOffset = 7;
5228 0 : move16();
5229 : /* the last three bits in a packet is the RF frame type */
5230 0 : *partialCopyFrameType = get_indice_preview( bitstream, bitstreamSize, bitstreamSize - 3, 3 );
5231 0 : move16();
5232 : }
5233 : }
5234 :
5235 0 : return;
5236 : }
5237 :
5238 :
5239 410 : void dtx_read_padding_bits_fx(
5240 : DEC_CORE_HANDLE st,
5241 : const Word16 num_bits )
5242 : {
5243 : /* TODO: temporary hack, need to decide what to do with core-coder bitrate */
5244 : Word32 tmp;
5245 :
5246 410 : tmp = st->total_brate;
5247 410 : move32();
5248 410 : st->total_brate = L_add( st->total_brate, L_mult0( num_bits, FRAMES_PER_SEC ) );
5249 410 : move32();
5250 410 : get_next_indice_fx( st, num_bits );
5251 410 : st->total_brate = tmp;
5252 410 : move32();
5253 :
5254 410 : return;
5255 : }
|