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 DBG_BITSTREAM_ANALYSIS
52 : #include <string.h>
53 : #endif
54 :
55 : #define STEP_MAX_NUM_INDICES 100 /* increase the maximum number of allowed indices in the list by this amount */
56 :
57 :
58 : /*-------------------------------------------------------------------*
59 : * rate2AMRWB_IOmode()
60 : *
61 : * lookup AMRWB IO mode
62 : *-------------------------------------------------------------------*/
63 :
64 3100 : static Word16 rate2AMRWB_IOmode(
65 : Word32 brate /* i : bitrate */
66 : )
67 : {
68 3100 : switch ( brate )
69 : {
70 : /* EVS AMR-WB IO modes */
71 0 : case SID_1k75:
72 0 : return AMRWB_IO_SID;
73 0 : case ACELP_6k60:
74 0 : return AMRWB_IO_6600;
75 0 : case ACELP_8k85:
76 0 : return AMRWB_IO_8850;
77 0 : case ACELP_12k65:
78 0 : return AMRWB_IO_1265;
79 0 : case ACELP_14k25:
80 0 : return AMRWB_IO_1425;
81 0 : case ACELP_15k85:
82 0 : return AMRWB_IO_1585;
83 0 : case ACELP_18k25:
84 0 : return AMRWB_IO_1825;
85 0 : case ACELP_19k85:
86 0 : return AMRWB_IO_1985;
87 0 : case ACELP_23k05:
88 0 : return AMRWB_IO_2305;
89 0 : case ACELP_23k85:
90 0 : return AMRWB_IO_2385;
91 3100 : default:
92 3100 : break;
93 : }
94 :
95 3100 : return -1;
96 : }
97 :
98 : /*-------------------------------------------------------------------*
99 : * rate2EVSmode()
100 : *
101 : * lookup EVS mode
102 : *-------------------------------------------------------------------*/
103 3100 : Word16 rate2EVSmode_float(
104 : const Word32 brate, /* i : bitrate */
105 : Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
106 : )
107 : {
108 3100 : if ( is_amr_wb != NULL )
109 : {
110 0 : *is_amr_wb = 0;
111 : }
112 :
113 3100 : switch ( brate )
114 : {
115 : /* EVS Primary modes */
116 0 : case FRAME_NO_DATA:
117 0 : return NO_DATA_TYPE;
118 0 : case SID_2k40:
119 0 : return PRIMARY_SID;
120 0 : case PPP_NELP_2k80:
121 0 : return PRIMARY_2800;
122 0 : case ACELP_7k20:
123 0 : return PRIMARY_7200;
124 0 : case ACELP_8k00:
125 0 : return PRIMARY_8000;
126 0 : case ACELP_9k60:
127 0 : return PRIMARY_9600;
128 1050 : case ACELP_13k20:
129 1050 : return PRIMARY_13200;
130 0 : case ACELP_16k40:
131 0 : return PRIMARY_16400;
132 1050 : case ACELP_24k40:
133 1050 : return PRIMARY_24400;
134 0 : case ACELP_32k:
135 0 : return PRIMARY_32000;
136 0 : case ACELP_48k:
137 0 : return PRIMARY_48000;
138 1000 : case ACELP_64k:
139 1000 : return PRIMARY_64000;
140 0 : case HQ_96k:
141 0 : return PRIMARY_96000;
142 0 : case HQ_128k:
143 0 : return PRIMARY_128000;
144 0 : default:
145 0 : break;
146 : }
147 :
148 0 : if ( is_amr_wb != NULL )
149 : {
150 0 : *is_amr_wb = 1;
151 : }
152 :
153 0 : return rate2AMRWB_IOmode( brate );
154 : }
155 :
156 : /*-------------------------------------------------------------------*
157 : * ind_list_realloc()
158 : *
159 : * Re-allocate the list of indices
160 : *-------------------------------------------------------------------*/
161 :
162 0 : ivas_error ind_list_realloc(
163 : INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */
164 : const Word16 max_num_indices, /* i : new maximum number of allowed indices in the list */
165 : Encoder_Struct *st_ivas /* i : IVAS encoder structure */
166 : )
167 : {
168 : Word16 i, n, ch, n_channels, ind_list_pos, is_metadata, ivas_max_num_indices;
169 : INDICE_HANDLE new_ind_list;
170 : BSTR_ENC_HANDLE hBstr;
171 :
172 0 : IF( st_ivas == NULL )
173 : {
174 0 : return IVAS_ERR_OK;
175 : }
176 :
177 : /* get the pointer to the beginning of the old buffer of indices (either metadata or core coders) */
178 0 : IF( old_ind_list == st_ivas->ind_list_metadata )
179 : {
180 0 : is_metadata = 1;
181 0 : ivas_max_num_indices = st_ivas->ivas_max_num_indices_metadata;
182 : }
183 : ELSE
184 : {
185 0 : is_metadata = 0;
186 0 : ivas_max_num_indices = st_ivas->ivas_max_num_indices;
187 : }
188 0 : move16();
189 0 : move16();
190 :
191 : /* allocate new buffer of indices */
192 0 : IF( ( new_ind_list = (INDICE_HANDLE) malloc( max_num_indices * sizeof( Indice ) ) ) == NULL )
193 : {
194 0 : return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) );
195 : }
196 :
197 : /* move indices from the old list to the new list */
198 0 : FOR( i = 0; i < s_min( max_num_indices, ivas_max_num_indices ); i++ )
199 : {
200 0 : IF( GT_16( old_ind_list[i].nb_bits, -1 ) )
201 : {
202 0 : new_ind_list[i].id = old_ind_list[i].id;
203 0 : new_ind_list[i].value = old_ind_list[i].value;
204 : #ifdef DBG_BITSTREAM_ANALYSIS
205 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
206 : #endif
207 0 : move16();
208 0 : move16();
209 : }
210 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
211 0 : move16();
212 : }
213 :
214 : /* reset nb_bits of all other indices to -1 */
215 0 : FOR( ; i < max_num_indices; i++ )
216 : {
217 0 : new_ind_list[i].nb_bits = -1;
218 : #ifdef DBG_BITSTREAM_ANALYSIS
219 : sprintf( new_ind_list[i].function_name, "RESET in ind_list_realloc" );
220 : #endif
221 0 : move16();
222 : }
223 :
224 : /* update parameters in all SCE elements */
225 0 : FOR( n = 0; n < st_ivas->nSCE; n++ )
226 : {
227 : /* get the pointer to hBstr */
228 0 : IF( is_metadata )
229 : {
230 0 : hBstr = st_ivas->hSCE[n]->hMetaData;
231 : }
232 : ELSE
233 : {
234 0 : hBstr = st_ivas->hSCE[n]->hCoreCoder[0]->hBstr;
235 : }
236 :
237 0 : IF( hBstr != NULL )
238 : {
239 : /* get the current position inside the old list */
240 0 : ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
241 :
242 : /* set pointers in the new list */
243 0 : *( hBstr->ivas_ind_list_zero ) = new_ind_list;
244 0 : hBstr->ind_list = &new_ind_list[ind_list_pos];
245 :
246 : /* set the new maximum number of indices */
247 0 : *( hBstr->ivas_max_num_indices ) = max_num_indices;
248 0 : move16();
249 : }
250 : }
251 :
252 : /* update parameters in all CPE elements */
253 0 : FOR( n = 0; n < st_ivas->nCPE; n++ )
254 : {
255 : /* get the pointer to hBstr */
256 0 : IF( is_metadata )
257 : {
258 0 : n_channels = 1;
259 : }
260 : ELSE
261 : {
262 0 : n_channels = CPE_CHANNELS;
263 : }
264 0 : move16();
265 :
266 0 : FOR( ch = 0; ch < n_channels; ch++ )
267 : {
268 0 : IF( is_metadata )
269 : {
270 0 : hBstr = st_ivas->hCPE[n]->hMetaData;
271 : }
272 : ELSE
273 : {
274 0 : hBstr = st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr;
275 : }
276 :
277 0 : IF( hBstr != NULL )
278 : {
279 : /* get the current position inside the old list */
280 0 : ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
281 :
282 : /* set pointers in the new list */
283 0 : *( hBstr->ivas_ind_list_zero ) = new_ind_list;
284 0 : hBstr->ind_list = &new_ind_list[ind_list_pos];
285 :
286 : /* set the new maximum number of indices */
287 0 : *( hBstr->ivas_max_num_indices ) = max_num_indices;
288 0 : move16();
289 : }
290 : }
291 : }
292 :
293 : /* free the old list */
294 0 : free( old_ind_list );
295 :
296 0 : return IVAS_ERR_OK;
297 : }
298 :
299 :
300 : /*-----------------------------------------------------------------------*
301 : * get_ivas_max_num_indices()
302 : *
303 : * Get the maximum allowed number of indices in the encoder
304 : *-----------------------------------------------------------------------*/
305 :
306 : /*! r: maximum number of indices */
307 0 : Word16 get_ivas_max_num_indices_fx(
308 : const IVAS_FORMAT ivas_format, /* i : IVAS format */
309 : const Word32 ivas_total_brate /* i : IVAS total bitrate */
310 : )
311 : {
312 0 : test();
313 0 : test();
314 0 : IF( EQ_16( ivas_format, STEREO_FORMAT ) )
315 : {
316 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
317 : {
318 0 : return 300;
319 : }
320 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
321 : {
322 0 : return 400;
323 : }
324 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
325 : {
326 0 : return 450;
327 : }
328 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
329 : {
330 0 : return 650;
331 : }
332 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
333 : {
334 0 : return 750;
335 : }
336 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
337 : {
338 0 : return 850;
339 : }
340 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
341 : {
342 0 : return 950;
343 : }
344 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
345 : {
346 0 : return 1350;
347 : }
348 : ELSE
349 : {
350 0 : return 1650;
351 : }
352 : }
353 0 : ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) || EQ_16( ivas_format, MONO_FORMAT ) )
354 : {
355 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
356 : {
357 0 : return 250;
358 : }
359 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
360 : {
361 0 : return 350;
362 : }
363 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
364 : {
365 0 : return 450;
366 : }
367 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
368 : {
369 0 : return 550;
370 : }
371 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
372 : {
373 0 : return 620;
374 : }
375 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
376 : {
377 0 : return 670;
378 : }
379 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
380 : {
381 0 : return 780;
382 : }
383 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
384 : {
385 0 : return 880;
386 : }
387 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
388 : {
389 0 : return 950;
390 : }
391 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
392 : {
393 0 : return 1100;
394 : }
395 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
396 : {
397 0 : return 1300;
398 : }
399 : ELSE
400 : {
401 0 : return 1650;
402 : }
403 : }
404 0 : ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
405 : {
406 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
407 : {
408 0 : return 250;
409 : }
410 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
411 : {
412 0 : return 350;
413 : }
414 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
415 : {
416 0 : return 400;
417 : }
418 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
419 : {
420 0 : return 650;
421 : }
422 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
423 : {
424 0 : return 750;
425 : }
426 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
427 : {
428 0 : return 1020;
429 : }
430 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
431 : {
432 0 : return 1160;
433 : }
434 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
435 : {
436 0 : return 1220;
437 : }
438 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
439 : {
440 0 : return 1300;
441 : }
442 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
443 : {
444 0 : return 1720;
445 : }
446 : ELSE
447 : {
448 0 : return 2000;
449 : }
450 : }
451 0 : ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
452 : {
453 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
454 : {
455 0 : return 300;
456 : }
457 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
458 : {
459 0 : return 400;
460 : }
461 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
462 : {
463 0 : return 650;
464 : }
465 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
466 : {
467 0 : return 750;
468 : }
469 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
470 : {
471 0 : return 850;
472 : }
473 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
474 : {
475 0 : return 950;
476 : }
477 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
478 : {
479 0 : return 1150;
480 : }
481 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
482 : {
483 0 : return 1450;
484 : }
485 : ELSE
486 : {
487 0 : return 1650;
488 : }
489 : }
490 0 : ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
491 : {
492 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
493 : {
494 0 : return 300;
495 : }
496 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
497 : {
498 0 : return 400;
499 : }
500 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
501 : {
502 0 : return 650;
503 : }
504 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
505 : {
506 0 : return 750;
507 : }
508 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
509 : {
510 0 : return 1150;
511 : }
512 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
513 : {
514 0 : return 1250;
515 : }
516 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
517 : {
518 0 : return 1400;
519 : }
520 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
521 : {
522 0 : return 1650;
523 : }
524 : ELSE
525 : {
526 0 : return 1850;
527 : }
528 : }
529 0 : ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
530 : {
531 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
532 : {
533 0 : return 250;
534 : }
535 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
536 : {
537 0 : return 350;
538 : }
539 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
540 : {
541 0 : return 400;
542 : }
543 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
544 : {
545 0 : return 650;
546 : }
547 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
548 : {
549 0 : return 750;
550 : }
551 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
552 : {
553 0 : return 850;
554 : }
555 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
556 : {
557 0 : return 1150;
558 : }
559 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
560 : {
561 0 : return 1420;
562 : }
563 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
564 : {
565 0 : return 2120;
566 : }
567 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
568 : {
569 0 : return 2250;
570 : }
571 : ELSE
572 : {
573 0 : return 2450;
574 : }
575 : }
576 :
577 0 : return 2450;
578 : }
579 : /*-----------------------------------------------------------------------*
580 : * get_BWE_max_num_indices()
581 : *
582 : * Get the maximum number of indices in the BWE
583 : *-----------------------------------------------------------------------*/
584 :
585 : /*! r: maximum number of indices */
586 0 : Word16 get_BWE_max_num_indices(
587 : const Word32 extl_brate /* i : extensiona layer bitrate */
588 : )
589 : {
590 : /* set the maximum number of indices in the BWE */
591 0 : if ( extl_brate < SWB_BWE_16k )
592 : {
593 0 : return 30;
594 : }
595 : else
596 : {
597 0 : return 150;
598 : }
599 : }
600 :
601 :
602 : /*-----------------------------------------------------------------------*
603 : * get_ivas_max_num_indices_metadata()
604 : *
605 : * Set the maximum allowed number of metadata indices in the list
606 : *-----------------------------------------------------------------------*/
607 :
608 : /*! r: maximum number of indices */
609 0 : Word16 get_ivas_max_num_indices_metadata_fx(
610 : const IVAS_FORMAT ivas_format, /* i : IVAS format */
611 : const Word32 ivas_total_brate /* i : IVAS total bitrate */
612 : )
613 : {
614 : /* set the maximum required number of metadata indices */
615 0 : test();
616 0 : IF( EQ_16( ivas_format, MONO_FORMAT ) )
617 : {
618 0 : return 0;
619 : }
620 0 : ELSE IF( EQ_16( ivas_format, STEREO_FORMAT ) )
621 : {
622 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
623 : {
624 0 : return 60;
625 : }
626 : ELSE
627 : {
628 0 : return 80;
629 : }
630 : }
631 0 : ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) )
632 : {
633 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
634 : {
635 0 : return 20;
636 : }
637 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
638 : {
639 0 : return 65;
640 : }
641 : ELSE
642 : {
643 0 : return 80;
644 : }
645 : }
646 0 : ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
647 : {
648 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
649 : {
650 0 : return 100;
651 : }
652 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
653 : {
654 0 : return 200;
655 : }
656 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
657 : {
658 0 : return 300;
659 : }
660 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
661 : {
662 0 : return 500;
663 : }
664 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
665 : {
666 0 : return 1050;
667 : }
668 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
669 : {
670 0 : return 2000;
671 : }
672 : ELSE
673 : {
674 0 : return 2500;
675 : }
676 : }
677 0 : ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
678 : {
679 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
680 : {
681 0 : return 80;
682 : }
683 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
684 : {
685 0 : return 125;
686 : }
687 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
688 : {
689 0 : return 205;
690 : }
691 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
692 : {
693 0 : return 240;
694 : }
695 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
696 : {
697 0 : return 305;
698 : }
699 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
700 : {
701 0 : return 425;
702 : }
703 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
704 : {
705 0 : return 630;
706 : }
707 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
708 : {
709 0 : return 850;
710 : }
711 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
712 : {
713 0 : return 1000;
714 : }
715 : ELSE
716 : {
717 0 : return 1750;
718 : }
719 : }
720 0 : ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
721 : {
722 0 : IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
723 : {
724 0 : return 80;
725 : }
726 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
727 : {
728 0 : return 125 + 100;
729 : }
730 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
731 : {
732 0 : return 205 + 100;
733 : }
734 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
735 : {
736 0 : return 240 + 150;
737 : }
738 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
739 : {
740 0 : return 305 + 30;
741 : }
742 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
743 : {
744 0 : return 425 + 30;
745 : }
746 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
747 : {
748 0 : return 630 + 30;
749 : }
750 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
751 : {
752 0 : return 850 + 30;
753 : }
754 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
755 : {
756 0 : return 1000 + 30;
757 : }
758 : ELSE
759 : {
760 0 : return 1750 + 30;
761 : }
762 : }
763 0 : ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
764 : {
765 0 : IF( LE_32( ivas_total_brate, IVAS_13k2 ) )
766 : {
767 0 : return 80;
768 : }
769 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
770 : {
771 0 : return 100;
772 : }
773 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
774 : {
775 0 : return 210;
776 : }
777 0 : ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
778 : {
779 0 : return 220;
780 : }
781 : ELSE
782 : {
783 0 : return 300;
784 : }
785 : }
786 :
787 0 : return 50;
788 : }
789 : /*-------------------------------------------------------------------*
790 : * move_indices()
791 : *
792 : * Move indices inside the buffer or among two buffers
793 : *-------------------------------------------------------------------*/
794 :
795 0 : void move_indices(
796 : INDICE_HANDLE old_ind_list, /* i/o: old location of indices */
797 : INDICE_HANDLE new_ind_list, /* i/o: new location of indices */
798 : const Word16 nb_indices /* i : number of moved indices */
799 : )
800 : {
801 : Word16 i;
802 :
803 0 : if ( new_ind_list < old_ind_list )
804 : {
805 0 : for ( i = 0; i < nb_indices; i++ )
806 : {
807 0 : new_ind_list[i].id = old_ind_list[i].id;
808 0 : new_ind_list[i].value = old_ind_list[i].value;
809 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
810 :
811 : #ifdef DBG_BITSTREAM_ANALYSIS
812 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
813 : #endif
814 0 : old_ind_list[i].nb_bits = -1;
815 : }
816 : }
817 0 : else if ( new_ind_list > old_ind_list )
818 : {
819 0 : for ( i = nb_indices - 1; i >= 0; i-- )
820 : {
821 0 : new_ind_list[i].id = old_ind_list[i].id;
822 0 : new_ind_list[i].value = old_ind_list[i].value;
823 0 : new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
824 : #ifdef DBG_BITSTREAM_ANALYSIS
825 : strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
826 : #endif
827 :
828 0 : old_ind_list[i].nb_bits = -1;
829 : #ifdef DBG_BITSTREAM_ANALYSIS
830 : sprintf( old_ind_list[i].function_name, "RESET in move_indices" );
831 : #endif
832 : }
833 : }
834 :
835 0 : return;
836 : }
837 :
838 :
839 : /*-------------------------------------------------------------------*
840 : * check_ind_list_limits()
841 : *
842 : * Check, if the maximum number of indices has been reached -> reallocate
843 : * Check, if we will not overwrite an existing indice -> adjust the location
844 : *-------------------------------------------------------------------*/
845 :
846 0 : ivas_error check_ind_list_limits(
847 : BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */
848 : )
849 : {
850 : Indice *ivas_ind_list_zero, *ivas_ind_list_last;
851 : ivas_error error;
852 :
853 0 : error = IVAS_ERR_OK;
854 0 : move32();
855 0 : ivas_ind_list_zero = *( hBstr->ivas_ind_list_zero );
856 :
857 : /* check, if the maximum number of indices has been reached and re-allocate the buffer */
858 : /* the re-allocation can be avoided by increasing the limits in get_ivas_max_num_indices() or get_ivas_max_num_indices_metadata() */
859 0 : IF( GE_16( (Word16) ( &hBstr->ind_list[hBstr->nb_ind_tot] - ivas_ind_list_zero ), *( hBstr->ivas_max_num_indices ) ) )
860 : {
861 :
862 : /* reallocate the buffer of indices with increased limit */
863 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 ) )
864 : {
865 0 : return error;
866 : }
867 : }
868 :
869 : /* check, if we will not overwrite an existing indice */
870 0 : IF( hBstr->ind_list[hBstr->nb_ind_tot].nb_bits > 0 )
871 : {
872 0 : IF( hBstr->nb_ind_tot == 0 )
873 : {
874 : /* move the pointer to the next available empty slot */
875 0 : ivas_ind_list_last = &ivas_ind_list_zero[*( hBstr->ivas_max_num_indices )];
876 0 : WHILE( hBstr->ind_list[0].nb_bits > 0 && hBstr->ind_list < ivas_ind_list_last )
877 : {
878 0 : hBstr->ind_list++;
879 : }
880 :
881 0 : IF( hBstr->ind_list >= ivas_ind_list_last )
882 : {
883 :
884 : /* no available empty slot -> need to re-allocate the buffer */
885 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 ) )
886 : {
887 0 : return error;
888 : }
889 : }
890 : }
891 : ELSE
892 : {
893 0 : 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", 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 );
894 : }
895 : }
896 :
897 0 : return error;
898 : }
899 :
900 : #ifdef DBG_BITSTREAM_ANALYSIS
901 : const char *named_indices_table[] = {
902 : "IND_IVAS_FORMAT",
903 : "IND_SMODE_OMASA",
904 : "IND_SMODE",
905 : "IND_SID_TYPE",
906 : "IND_BWIDTH",
907 : "IND_CORE",
908 : "IND_PPP_NELP_MODE",
909 : "IND_ACELP_16KHZ",
910 : "IND_ACELP_SIGNALLING",
911 : "IND_SHARP_FLAG",
912 : "IND_MDCT_CORE",
913 : "IND_TCX_CORE",
914 : "IND_BWE_FLAG",
915 : "IND_HQ_SWITCHING_FLG",
916 : "IND_LAST_L_FRAME",
917 : "IND_VAD_FLAG",
918 : "IND_HQ_BWIDTH",
919 : "IND_TC_SUBFR",
920 : "IND_TC_SUBFR",
921 : "IND_TC_SUBFR",
922 : "IND_TC_SUBFR",
923 : "IND_GSC_IVAS_SP",
924 : "IND_LSF_PREDICTOR_SELECT_BIT",
925 : "IND_LSF",
926 : "IND_LSF",
927 : "IND_LSF",
928 : "IND_LSF",
929 : "IND_LSF",
930 : "IND_LSF",
931 : "IND_LSF",
932 : "IND_LSF",
933 : "IND_LSF",
934 : "IND_LSF",
935 : "IND_LSF",
936 : "IND_LSF",
937 : "IND_LSF",
938 : "IND_LSF",
939 : "IND_LSF",
940 : "IND_LSF",
941 : "IND_LSF",
942 : "IND_MID_FRAME_LSF_INDEX",
943 : "IND_ISF_0_0",
944 : "IND_ISF_0_1",
945 : "IND_ISF_0_2",
946 : "IND_ISF_0_3",
947 : "IND_ISF_0_4",
948 : "IND_ISF_1_0",
949 : "IND_ISF_1_1",
950 : "IND_ISF_1_2",
951 : "IND_ISF_1_3",
952 : "IND_ISF_1_4",
953 : "IND_IC_LSF_PRED",
954 : "IND_GSC_ATTACK",
955 : "IND_GSC_SWB_SPEECH",
956 : "IND_NOISE_LEVEL",
957 : "IND_HF_NOISE",
958 : "IND_PIT_CONTR_IDX",
959 : "IND_FEC_CLAS",
960 : "IND_FEC_ENR",
961 : "IND_FEC_POS",
962 : "IND_ES_PRED",
963 : "IND_HARM_FLAG_ACELP",
964 : "IND_ALG_CDBK_4T64_2_24KBIT",
965 : "IND_ALG_CDBK_4T64_2_24KBIT",
966 : "IND_ALG_CDBK_4T64_2_24KBIT",
967 : "IND_ALG_CDBK_4T64_2_24KBIT",
968 : "IND_ALG_CDBK_4T64_2_24KBIT",
969 : "IND_ALG_CDBK_4T64_2_24KBIT",
970 : "IND_ALG_CDBK_4T64_2_24KBIT",
971 : "IND_ALG_CDBK_4T64_2_24KBIT",
972 : "IND_ALG_CDBK_4T64_2_24KBIT",
973 : "IND_ALG_CDBK_4T64_2_24KBIT",
974 : "IND_ALG_CDBK_4T64_2_24KBIT",
975 : "IND_ALG_CDBK_4T64_2_24KBIT",
976 : "IND_ALG_CDBK_4T64_2_24KBIT",
977 : "IND_ALG_CDBK_4T64_2_24KBIT",
978 : "IND_ALG_CDBK_4T64_2_24KBIT",
979 : "IND_ALG_CDBK_4T64_2_24KBIT",
980 : "IND_ALG_CDBK_4T64_2_24KBIT",
981 : "IND_ALG_CDBK_4T64_2_24KBIT",
982 : "IND_ALG_CDBK_4T64_2_24KBIT",
983 : "IND_ALG_CDBK_4T64_2_24KBIT",
984 : "IND_ALG_CDBK_4T64_2_24KBIT",
985 : "IND_ALG_CDBK_4T64_2_24KBIT",
986 : "IND_ALG_CDBK_4T64_2_24KBIT",
987 : "IND_ALG_CDBK_4T64_2_24KBIT",
988 : "IND_ALG_CDBK_4T64_2_24KBIT",
989 : "IND_ALG_CDBK_4T64_2_24KBIT",
990 : "IND_ALG_CDBK_4T64_2_24KBIT",
991 : "IND_ALG_CDBK_4T64_2_24KBIT",
992 : "IND_ALG_CDBK_4T64_2_24KBIT",
993 : "IND_ALG_CDBK_4T64_2_24KBIT",
994 : "IND_ALG_CDBK_4T64_2_24KBIT",
995 : "IND_ALG_CDBK_4T64_2_24KBIT",
996 : "IND_ALG_CDBK_4T64_2_24KBIT",
997 : "IND_ALG_CDBK_4T64_2_24KBIT",
998 : "IND_ALG_CDBK_4T64_2_24KBIT",
999 : "IND_ALG_CDBK_4T64_2_24KBIT",
1000 : "IND_ALG_CDBK_4T64_2_24KBIT",
1001 : "IND_ALG_CDBK_4T64_2_24KBIT",
1002 : "IND_ALG_CDBK_4T64_2_24KBIT",
1003 : "IND_ALG_CDBK_4T64_2_24KBIT",
1004 : "TAG_ALG_CDBK_4T64_24KBIT_END",
1005 : "IND_HF_GAIN_MODIFICATION",
1006 : "IND_HF_GAIN_MODIFICATION",
1007 : "IND_HF_GAIN_MODIFICATION",
1008 : "IND_HF_GAIN_MODIFICATION",
1009 : "IND_HF_GAIN_MODIFICATION",
1010 : "IND_HF_GAIN_MODIFICATION",
1011 : "IND_HF_GAIN_MODIFICATION",
1012 : "IND_HF_GAIN_MODIFICATION",
1013 : "IND_HF_GAIN_MODIFICATION",
1014 : "IND_HF_GAIN_MODIFICATION",
1015 : "IND_HF_GAIN_MODIFICATION",
1016 : "IND_HF_GAIN_MODIFICATION",
1017 : "IND_HF_GAIN_MODIFICATION",
1018 : "IND_HF_GAIN_MODIFICATION",
1019 : "IND_HF_GAIN_MODIFICATION",
1020 : "IND_HF_GAIN_MODIFICATION",
1021 : "IND_HF_GAIN_MODIFICATION",
1022 : "IND_HF_GAIN_MODIFICATION",
1023 : "IND_HF_GAIN_MODIFICATION",
1024 : "IND_HF_GAIN_MODIFICATION",
1025 : "IND_HF_GAIN_MODIFICATION",
1026 : "IND_HF_GAIN_MODIFICATION",
1027 : "IND_HF_GAIN_MODIFICATION",
1028 : "IND_HF_GAIN_MODIFICATION",
1029 : "IND_HF_GAIN_MODIFICATION",
1030 : "IND_HF_GAIN_MODIFICATION",
1031 : "IND_HF_GAIN_MODIFICATION",
1032 : "IND_HF_GAIN_MODIFICATION",
1033 : "IND_HF_GAIN_MODIFICATION",
1034 : "IND_HF_GAIN_MODIFICATION",
1035 : "IND_HF_GAIN_MODIFICATION",
1036 : "IND_HF_GAIN_MODIFICATION",
1037 : "IND_HF_GAIN_MODIFICATION",
1038 : "IND_HF_GAIN_MODIFICATION",
1039 : "IND_HF_GAIN_MODIFICATION",
1040 : "IND_HF_GAIN_MODIFICATION",
1041 : "IND_HF_GAIN_MODIFICATION",
1042 : "IND_HF_GAIN_MODIFICATION",
1043 : "IND_HF_GAIN_MODIFICATION",
1044 : "IND_HF_GAIN_MODIFICATION",
1045 : "IND_HF_GAIN_MODIFICATION",
1046 : "IND_HF_GAIN_MODIFICATION",
1047 : "IND_HF_GAIN_MODIFICATION",
1048 : "IND_HF_GAIN_MODIFICATION",
1049 : "IND_HF_GAIN_MODIFICATION",
1050 : "IND_HF_GAIN_MODIFICATION",
1051 : "IND_HF_GAIN_MODIFICATION",
1052 : "IND_HF_GAIN_MODIFICATION",
1053 : "IND_HF_GAIN_MODIFICATION",
1054 : "IND_HF_GAIN_MODIFICATION",
1055 : "IND_HF_GAIN_MODIFICATION",
1056 : "IND_HF_GAIN_MODIFICATION",
1057 : "IND_HF_GAIN_MODIFICATION",
1058 : "IND_HF_GAIN_MODIFICATION",
1059 : "IND_HF_GAIN_MODIFICATION",
1060 : "IND_HF_GAIN_MODIFICATION",
1061 : "IND_HF_GAIN_MODIFICATION",
1062 : "IND_HF_GAIN_MODIFICATION",
1063 : "IND_HF_GAIN_MODIFICATION",
1064 : "IND_HF_GAIN_MODIFICATION",
1065 : "IND_HF_GAIN_MODIFICATION",
1066 : "IND_HF_GAIN_MODIFICATION",
1067 : "IND_HF_GAIN_MODIFICATION",
1068 : "IND_HF_GAIN_MODIFICATION",
1069 : "IND_HF_GAIN_MODIFICATION",
1070 : "IND_HF_GAIN_MODIFICATION",
1071 : "IND_HF_GAIN_MODIFICATION",
1072 : "IND_HF_GAIN_MODIFICATION",
1073 : "IND_HF_GAIN_MODIFICATION",
1074 : "IND_HF_GAIN_MODIFICATION",
1075 : "IND_HF_GAIN_MODIFICATION",
1076 : "IND_HF_GAIN_MODIFICATION",
1077 : "IND_HF_GAIN_MODIFICATION",
1078 : "IND_HF_GAIN_MODIFICATION",
1079 : "IND_HF_GAIN_MODIFICATION",
1080 : "IND_HF_GAIN_MODIFICATION",
1081 : "IND_HF_GAIN_MODIFICATION",
1082 : "IND_HF_GAIN_MODIFICATION",
1083 : "IND_HF_GAIN_MODIFICATION",
1084 : "IND_HF_GAIN_MODIFICATION",
1085 : "IND_HF_GAIN_MODIFICATION",
1086 : "IND_HF_GAIN_MODIFICATION",
1087 : "IND_HF_GAIN_MODIFICATION",
1088 : "IND_HF_GAIN_MODIFICATION",
1089 : "IND_HF_GAIN_MODIFICATION",
1090 : "IND_HF_GAIN_MODIFICATION",
1091 : "IND_HF_GAIN_MODIFICATION",
1092 : "IND_HF_GAIN_MODIFICATION",
1093 : "IND_HF_GAIN_MODIFICATION",
1094 : "IND_HF_GAIN_MODIFICATION",
1095 : "IND_HF_GAIN_MODIFICATION",
1096 : "IND_HF_GAIN_MODIFICATION",
1097 : "IND_HF_GAIN_MODIFICATION",
1098 : "IND_HF_GAIN_MODIFICATION",
1099 : "IND_HF_GAIN_MODIFICATION",
1100 : "IND_HF_GAIN_MODIFICATION",
1101 : "IND_HF_GAIN_MODIFICATION",
1102 : "IND_HF_GAIN_MODIFICATION",
1103 : "IND_HF_GAIN_MODIFICATION",
1104 : "IND_HF_GAIN_MODIFICATION",
1105 : "IND_HF_GAIN_MODIFICATION",
1106 : "IND_HF_GAIN_MODIFICATION",
1107 : "IND_HF_GAIN_MODIFICATION",
1108 : "IND_HF_GAIN_MODIFICATION",
1109 : "IND_HF_GAIN_MODIFICATION",
1110 : "IND_HF_GAIN_MODIFICATION",
1111 : "IND_HF_GAIN_MODIFICATION",
1112 : "IND_HF_GAIN_MODIFICATION",
1113 : "IND_HF_GAIN_MODIFICATION",
1114 : "IND_HF_GAIN_MODIFICATION",
1115 : "IND_HF_GAIN_MODIFICATION",
1116 : "IND_HF_GAIN_MODIFICATION",
1117 : "IND_HF_GAIN_MODIFICATION",
1118 : "IND_HF_GAIN_MODIFICATION",
1119 : "IND_HF_GAIN_MODIFICATION",
1120 : "IND_HF_GAIN_MODIFICATION",
1121 : "IND_HF_GAIN_MODIFICATION",
1122 : "IND_HF_GAIN_MODIFICATION",
1123 : "IND_HF_GAIN_MODIFICATION",
1124 : "IND_HF_GAIN_MODIFICATION",
1125 : "IND_HF_GAIN_MODIFICATION",
1126 : "IND_HF_GAIN_MODIFICATION",
1127 : "IND_HF_GAIN_MODIFICATION",
1128 : "IND_HF_GAIN_MODIFICATION",
1129 : "IND_HF_GAIN_MODIFICATION",
1130 : "IND_HF_GAIN_MODIFICATION",
1131 : "IND_HF_GAIN_MODIFICATION",
1132 : "IND_HF_GAIN_MODIFICATION",
1133 : "IND_HF_GAIN_MODIFICATION",
1134 : "IND_HF_GAIN_MODIFICATION",
1135 : "IND_HF_GAIN_MODIFICATION",
1136 : "IND_HF_GAIN_MODIFICATION",
1137 : "IND_HF_GAIN_MODIFICATION",
1138 : "IND_HF_GAIN_MODIFICATION",
1139 : "IND_HF_GAIN_MODIFICATION",
1140 : "IND_HF_GAIN_MODIFICATION",
1141 : "IND_HF_GAIN_MODIFICATION",
1142 : "IND_HF_GAIN_MODIFICATION",
1143 : "IND_HF_GAIN_MODIFICATION",
1144 : "IND_HF_GAIN_MODIFICATION",
1145 : "IND_HF_GAIN_MODIFICATION",
1146 : "IND_HF_GAIN_MODIFICATION",
1147 : "IND_HF_GAIN_MODIFICATION",
1148 : "IND_HF_GAIN_MODIFICATION",
1149 : "IND_HF_GAIN_MODIFICATION",
1150 : "IND_HF_GAIN_MODIFICATION",
1151 : "IND_HF_GAIN_MODIFICATION",
1152 : "IND_HF_GAIN_MODIFICATION",
1153 : "IND_HF_GAIN_MODIFICATION",
1154 : "IND_HF_GAIN_MODIFICATION",
1155 : "IND_HF_GAIN_MODIFICATION",
1156 : "IND_HF_GAIN_MODIFICATION",
1157 : "IND_HF_GAIN_MODIFICATION",
1158 : "IND_HF_GAIN_MODIFICATION",
1159 : "IND_HF_GAIN_MODIFICATION",
1160 : "IND_HF_GAIN_MODIFICATION",
1161 : "IND_HF_GAIN_MODIFICATION",
1162 : "IND_HF_GAIN_MODIFICATION",
1163 : "IND_HF_GAIN_MODIFICATION",
1164 : "IND_HF_GAIN_MODIFICATION",
1165 : "IND_HF_GAIN_MODIFICATION",
1166 : "IND_HF_GAIN_MODIFICATION",
1167 : "IND_HF_GAIN_MODIFICATION",
1168 : "IND_HF_GAIN_MODIFICATION",
1169 : "IND_HF_GAIN_MODIFICATION",
1170 : "IND_HF_GAIN_MODIFICATION",
1171 : "IND_HF_GAIN_MODIFICATION",
1172 : "IND_HF_GAIN_MODIFICATION",
1173 : "IND_HF_GAIN_MODIFICATION",
1174 : "IND_HF_GAIN_MODIFICATION",
1175 : "IND_HF_GAIN_MODIFICATION",
1176 : "IND_HF_GAIN_MODIFICATION",
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 : "TAG_ACELP_SUBFR_LOOP_END",
1306 : "IND_MEAN_GAIN2",
1307 : "IND_MEAN_GAIN2",
1308 : "IND_MEAN_GAIN2",
1309 : "IND_MEAN_GAIN2",
1310 : "IND_MEAN_GAIN2",
1311 : "IND_MEAN_GAIN2",
1312 : "IND_MEAN_GAIN2",
1313 : "IND_MEAN_GAIN2",
1314 : "IND_MEAN_GAIN2",
1315 : "IND_MEAN_GAIN2",
1316 : "IND_MEAN_GAIN2",
1317 : "IND_MEAN_GAIN2",
1318 : "IND_MEAN_GAIN2",
1319 : "IND_MEAN_GAIN2",
1320 : "IND_MEAN_GAIN2",
1321 : "IND_MEAN_GAIN2",
1322 : "IND_MEAN_GAIN2",
1323 : "IND_MEAN_GAIN2",
1324 : "IND_MEAN_GAIN2",
1325 : "IND_MEAN_GAIN2",
1326 : "IND_MEAN_GAIN2",
1327 : "IND_MEAN_GAIN2",
1328 : "IND_MEAN_GAIN2",
1329 : "IND_MEAN_GAIN2",
1330 : "IND_MEAN_GAIN2",
1331 : "IND_MEAN_GAIN2",
1332 : "IND_MEAN_GAIN2",
1333 : "IND_MEAN_GAIN2",
1334 : "IND_MEAN_GAIN2",
1335 : "IND_MEAN_GAIN2",
1336 : "IND_MEAN_GAIN2",
1337 : "IND_MEAN_GAIN2",
1338 : "IND_Y_GAIN_TMP",
1339 : "IND_Y_GAIN_TMP",
1340 : "IND_Y_GAIN_TMP",
1341 : "IND_Y_GAIN_TMP",
1342 : "IND_Y_GAIN_TMP",
1343 : "IND_Y_GAIN_TMP",
1344 : "IND_Y_GAIN_TMP",
1345 : "IND_Y_GAIN_TMP",
1346 : "IND_Y_GAIN_TMP",
1347 : "IND_Y_GAIN_TMP",
1348 : "IND_Y_GAIN_TMP",
1349 : "IND_Y_GAIN_TMP",
1350 : "IND_Y_GAIN_TMP",
1351 : "IND_Y_GAIN_TMP",
1352 : "IND_Y_GAIN_TMP",
1353 : "IND_Y_GAIN_TMP",
1354 : "IND_Y_GAIN_TMP",
1355 : "IND_Y_GAIN_TMP",
1356 : "IND_Y_GAIN_TMP",
1357 : "IND_Y_GAIN_TMP",
1358 : "IND_Y_GAIN_TMP",
1359 : "IND_Y_GAIN_TMP",
1360 : "IND_Y_GAIN_TMP",
1361 : "IND_Y_GAIN_TMP",
1362 : "IND_Y_GAIN_TMP",
1363 : "IND_Y_GAIN_TMP",
1364 : "IND_Y_GAIN_TMP",
1365 : "IND_Y_GAIN_TMP",
1366 : "IND_Y_GAIN_TMP",
1367 : "IND_Y_GAIN_TMP",
1368 : "IND_Y_GAIN_TMP",
1369 : "IND_Y_GAIN_TMP",
1370 : "IND_Y_GAIN_HF",
1371 : "IND_HQ_VOICING_FLAG",
1372 : "IND_HQ_SWB_CLAS",
1373 : "IND_NF_IDX",
1374 : "IND_LC_MODE",
1375 : "IND_YNRM",
1376 : "IND_YNRM",
1377 : "IND_YNRM",
1378 : "IND_YNRM",
1379 : "IND_YNRM",
1380 : "IND_YNRM",
1381 : "IND_YNRM",
1382 : "IND_YNRM",
1383 : "IND_YNRM",
1384 : "IND_YNRM",
1385 : "IND_YNRM",
1386 : "IND_YNRM",
1387 : "IND_YNRM",
1388 : "IND_YNRM",
1389 : "IND_YNRM",
1390 : "IND_YNRM",
1391 : "IND_YNRM",
1392 : "IND_YNRM",
1393 : "IND_YNRM",
1394 : "IND_YNRM",
1395 : "IND_YNRM",
1396 : "IND_YNRM",
1397 : "IND_YNRM",
1398 : "IND_YNRM",
1399 : "IND_YNRM",
1400 : "IND_YNRM",
1401 : "IND_YNRM",
1402 : "IND_YNRM",
1403 : "IND_YNRM",
1404 : "IND_YNRM",
1405 : "IND_YNRM",
1406 : "IND_YNRM",
1407 : "IND_YNRM",
1408 : "IND_YNRM",
1409 : "IND_YNRM",
1410 : "IND_YNRM",
1411 : "IND_YNRM",
1412 : "IND_YNRM",
1413 : "IND_YNRM",
1414 : "IND_YNRM",
1415 : "IND_YNRM",
1416 : "IND_YNRM",
1417 : "IND_YNRM",
1418 : "IND_YNRM",
1419 : "IND_SWB_FENV_HQ",
1420 : "IND_SWB_FENV_HQ",
1421 : "IND_SWB_FENV_HQ",
1422 : "IND_SWB_FENV_HQ",
1423 : "IND_SWB_FENV_HQ",
1424 : "IND_FB_FENV_HQ",
1425 : "IND_FB_FENV_HQ",
1426 : "IND_FB_FENV_HQ",
1427 : "IND_FB_FENV_HQ",
1428 : "IND_FB_FENV_HQ",
1429 : "IND_DELTA_ENV_HQ",
1430 : "IND_HVQ_BWE_NL",
1431 : "IND_HVQ_BWE_NL",
1432 : "IND_NUM_PEAKS",
1433 : "IND_POS_IDX",
1434 : "IND_POS_IDX",
1435 : "IND_POS_IDX",
1436 : "IND_POS_IDX",
1437 : "IND_POS_IDX",
1438 : "IND_POS_IDX",
1439 : "IND_POS_IDX",
1440 : "IND_POS_IDX",
1441 : "IND_POS_IDX",
1442 : "IND_POS_IDX",
1443 : "IND_POS_IDX",
1444 : "IND_POS_IDX",
1445 : "IND_POS_IDX",
1446 : "IND_POS_IDX",
1447 : "IND_POS_IDX",
1448 : "IND_POS_IDX",
1449 : "IND_POS_IDX",
1450 : "IND_POS_IDX",
1451 : "IND_POS_IDX",
1452 : "IND_POS_IDX",
1453 : "IND_POS_IDX",
1454 : "IND_POS_IDX",
1455 : "IND_POS_IDX",
1456 : "IND_POS_IDX",
1457 : "IND_POS_IDX",
1458 : "IND_POS_IDX",
1459 : "IND_POS_IDX",
1460 : "IND_POS_IDX",
1461 : "IND_POS_IDX",
1462 : "IND_POS_IDX",
1463 : "IND_POS_IDX",
1464 : "IND_POS_IDX",
1465 : "IND_POS_IDX",
1466 : "IND_POS_IDX",
1467 : "IND_POS_IDX",
1468 : "IND_POS_IDX",
1469 : "IND_POS_IDX",
1470 : "IND_POS_IDX",
1471 : "IND_POS_IDX",
1472 : "IND_POS_IDX",
1473 : "IND_POS_IDX",
1474 : "IND_POS_IDX",
1475 : "IND_POS_IDX",
1476 : "IND_POS_IDX",
1477 : "IND_POS_IDX",
1478 : "IND_POS_IDX",
1479 : "IND_POS_IDX",
1480 : "IND_POS_IDX",
1481 : "IND_POS_IDX",
1482 : "IND_POS_IDX",
1483 : "IND_POS_IDX",
1484 : "IND_POS_IDX",
1485 : "IND_POS_IDX",
1486 : "IND_POS_IDX",
1487 : "IND_POS_IDX",
1488 : "IND_POS_IDX",
1489 : "IND_POS_IDX",
1490 : "IND_POS_IDX",
1491 : "IND_POS_IDX",
1492 : "IND_POS_IDX",
1493 : "IND_POS_IDX",
1494 : "IND_POS_IDX",
1495 : "IND_POS_IDX",
1496 : "IND_POS_IDX",
1497 : "IND_POS_IDX",
1498 : "IND_POS_IDX",
1499 : "IND_POS_IDX",
1500 : "IND_POS_IDX",
1501 : "IND_POS_IDX",
1502 : "IND_POS_IDX",
1503 : "IND_POS_IDX",
1504 : "IND_POS_IDX",
1505 : "IND_POS_IDX",
1506 : "IND_POS_IDX",
1507 : "IND_POS_IDX",
1508 : "IND_POS_IDX",
1509 : "IND_POS_IDX",
1510 : "IND_POS_IDX",
1511 : "IND_POS_IDX",
1512 : "IND_POS_IDX",
1513 : "IND_POS_IDX",
1514 : "IND_POS_IDX",
1515 : "IND_POS_IDX",
1516 : "IND_POS_IDX",
1517 : "IND_POS_IDX",
1518 : "IND_POS_IDX",
1519 : "IND_POS_IDX",
1520 : "IND_POS_IDX",
1521 : "IND_POS_IDX",
1522 : "IND_POS_IDX",
1523 : "IND_POS_IDX",
1524 : "IND_POS_IDX",
1525 : "IND_POS_IDX",
1526 : "IND_POS_IDX",
1527 : "IND_POS_IDX",
1528 : "IND_POS_IDX",
1529 : "IND_POS_IDX",
1530 : "IND_POS_IDX",
1531 : "IND_POS_IDX",
1532 : "IND_POS_IDX",
1533 : "IND_POS_IDX",
1534 : "IND_POS_IDX",
1535 : "IND_POS_IDX",
1536 : "IND_POS_IDX",
1537 : "IND_POS_IDX",
1538 : "IND_POS_IDX",
1539 : "IND_POS_IDX",
1540 : "IND_POS_IDX",
1541 : "IND_POS_IDX",
1542 : "IND_POS_IDX",
1543 : "IND_POS_IDX",
1544 : "IND_POS_IDX",
1545 : "IND_POS_IDX",
1546 : "IND_POS_IDX",
1547 : "IND_POS_IDX",
1548 : "IND_POS_IDX",
1549 : "IND_POS_IDX",
1550 : "IND_POS_IDX",
1551 : "IND_POS_IDX",
1552 : "IND_POS_IDX",
1553 : "IND_POS_IDX",
1554 : "IND_POS_IDX",
1555 : "IND_POS_IDX",
1556 : "IND_POS_IDX",
1557 : "IND_POS_IDX",
1558 : "IND_POS_IDX",
1559 : "IND_POS_IDX",
1560 : "IND_POS_IDX",
1561 : "IND_POS_IDX",
1562 : "IND_POS_IDX",
1563 : "IND_POS_IDX",
1564 : "IND_POS_IDX",
1565 : "IND_POS_IDX",
1566 : "IND_POS_IDX",
1567 : "IND_POS_IDX",
1568 : "IND_POS_IDX",
1569 : "IND_POS_IDX",
1570 : "IND_POS_IDX",
1571 : "IND_POS_IDX",
1572 : "IND_POS_IDX",
1573 : "IND_POS_IDX",
1574 : "IND_POS_IDX",
1575 : "IND_POS_IDX",
1576 : "IND_POS_IDX",
1577 : "IND_POS_IDX",
1578 : "IND_POS_IDX",
1579 : "IND_POS_IDX",
1580 : "IND_POS_IDX",
1581 : "IND_POS_IDX",
1582 : "IND_POS_IDX",
1583 : "IND_POS_IDX",
1584 : "IND_POS_IDX",
1585 : "IND_POS_IDX",
1586 : "IND_POS_IDX",
1587 : "IND_POS_IDX",
1588 : "IND_POS_IDX",
1589 : "IND_POS_IDX",
1590 : "IND_POS_IDX",
1591 : "IND_POS_IDX",
1592 : "IND_POS_IDX",
1593 : "IND_POS_IDX",
1594 : "IND_POS_IDX",
1595 : "IND_POS_IDX",
1596 : "IND_POS_IDX",
1597 : "IND_POS_IDX",
1598 : "IND_POS_IDX",
1599 : "IND_POS_IDX",
1600 : "IND_POS_IDX",
1601 : "IND_POS_IDX",
1602 : "IND_POS_IDX",
1603 : "IND_POS_IDX",
1604 : "IND_POS_IDX",
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_FLAGN",
1714 : "IND_PG_IDX",
1715 : "IND_PG_IDX",
1716 : "IND_PG_IDX",
1717 : "IND_PG_IDX",
1718 : "IND_PG_IDX",
1719 : "IND_PG_IDX",
1720 : "IND_PG_IDX",
1721 : "IND_PG_IDX",
1722 : "IND_PG_IDX",
1723 : "IND_PG_IDX",
1724 : "IND_PG_IDX",
1725 : "IND_PG_IDX",
1726 : "IND_PG_IDX",
1727 : "IND_PG_IDX",
1728 : "IND_PG_IDX",
1729 : "IND_PG_IDX",
1730 : "IND_PG_IDX",
1731 : "IND_PG_IDX",
1732 : "IND_PG_IDX",
1733 : "IND_PG_IDX",
1734 : "IND_PG_IDX",
1735 : "IND_PG_IDX",
1736 : "IND_PG_IDX",
1737 : "IND_PG_IDX",
1738 : "IND_PG_IDX",
1739 : "IND_PG_IDX",
1740 : "IND_PG_IDX",
1741 : "IND_PG_IDX",
1742 : "IND_PG_IDX",
1743 : "IND_PG_IDX",
1744 : "IND_PG_IDX",
1745 : "IND_PG_IDX",
1746 : "IND_PG_IDX",
1747 : "IND_PG_IDX",
1748 : "IND_PG_IDX",
1749 : "IND_HVQ_PEAKS",
1750 : "IND_HVQ_PEAKS",
1751 : "IND_HVQ_PEAKS",
1752 : "IND_HVQ_PEAKS",
1753 : "IND_HVQ_PEAKS",
1754 : "IND_HVQ_PEAKS",
1755 : "IND_HVQ_PEAKS",
1756 : "IND_HVQ_PEAKS",
1757 : "IND_HVQ_PEAKS",
1758 : "IND_HVQ_PEAKS",
1759 : "IND_HVQ_PEAKS",
1760 : "IND_HVQ_PEAKS",
1761 : "IND_HVQ_PEAKS",
1762 : "IND_HVQ_PEAKS",
1763 : "IND_HVQ_PEAKS",
1764 : "IND_HVQ_PEAKS",
1765 : "IND_HVQ_PEAKS",
1766 : "IND_HVQ_PEAKS",
1767 : "IND_HVQ_PEAKS",
1768 : "IND_HVQ_PEAKS",
1769 : "IND_HVQ_PEAKS",
1770 : "IND_HVQ_PEAKS",
1771 : "IND_HVQ_PEAKS",
1772 : "IND_HVQ_PEAKS",
1773 : "IND_HVQ_PEAKS",
1774 : "IND_HVQ_PEAKS",
1775 : "IND_HVQ_PEAKS",
1776 : "IND_HVQ_PEAKS",
1777 : "IND_HVQ_PEAKS",
1778 : "IND_HVQ_PEAKS",
1779 : "IND_HVQ_PEAKS",
1780 : "IND_HVQ_PEAKS",
1781 : "IND_HVQ_PEAKS",
1782 : "IND_HVQ_PEAKS",
1783 : "IND_HVQ_PEAKS",
1784 : "IND_HVQ_PEAKS",
1785 : "IND_HVQ_PEAKS",
1786 : "IND_HVQ_PEAKS",
1787 : "IND_HVQ_PEAKS",
1788 : "IND_HVQ_PEAKS",
1789 : "IND_HVQ_PEAKS",
1790 : "IND_HVQ_PEAKS",
1791 : "IND_HVQ_PEAKS",
1792 : "IND_HVQ_PEAKS",
1793 : "IND_HVQ_PEAKS",
1794 : "IND_HVQ_PEAKS",
1795 : "IND_HVQ_PEAKS",
1796 : "IND_HVQ_PEAKS",
1797 : "IND_HVQ_PEAKS",
1798 : "IND_HVQ_PEAKS",
1799 : "IND_HVQ_PEAKS",
1800 : "IND_HVQ_PEAKS",
1801 : "IND_HVQ_PEAKS",
1802 : "IND_HVQ_PEAKS",
1803 : "IND_HVQ_PEAKS",
1804 : "IND_HVQ_PEAKS",
1805 : "IND_HVQ_PEAKS",
1806 : "IND_HVQ_PEAKS",
1807 : "IND_HVQ_PEAKS",
1808 : "IND_HVQ_PEAKS",
1809 : "IND_HVQ_PEAKS",
1810 : "IND_HVQ_PEAKS",
1811 : "IND_HVQ_PEAKS",
1812 : "IND_HVQ_PEAKS",
1813 : "IND_HVQ_PEAKS",
1814 : "IND_HVQ_PEAKS",
1815 : "IND_HVQ_PEAKS",
1816 : "IND_HVQ_PEAKS",
1817 : "IND_HVQ_PEAKS",
1818 : "IND_HVQ_PEAKS",
1819 : "IND_HVQ_NF_GAIN",
1820 : "IND_HVQ_NF_GAIN",
1821 : "IND_HQ2_SWB_CLAS",
1822 : "IND_HQ2_DENG_MODE",
1823 : "IND_HQ2_DENG_8SMODE",
1824 : "IND_HQ2_DENG_8SMODE_N0",
1825 : "IND_HQ2_DENG_8SMODE_N1",
1826 : "IND_HQ2_DENG_8SPOS",
1827 : "IND_HQ2_DENG_8SDEPTH",
1828 : "IND_HQ2_DENG_HMODE",
1829 : "IND_HQ2_DIFF_ENERGY",
1830 : "IND_HQ2_DIFF_ENERGY",
1831 : "IND_HQ2_DIFF_ENERGY",
1832 : "IND_HQ2_DIFF_ENERGY",
1833 : "IND_HQ2_DIFF_ENERGY",
1834 : "IND_HQ2_DIFF_ENERGY",
1835 : "IND_HQ2_DIFF_ENERGY",
1836 : "IND_HQ2_DIFF_ENERGY",
1837 : "IND_HQ2_DIFF_ENERGY",
1838 : "IND_HQ2_DIFF_ENERGY",
1839 : "IND_HQ2_DIFF_ENERGY",
1840 : "IND_HQ2_DIFF_ENERGY",
1841 : "IND_HQ2_DIFF_ENERGY",
1842 : "IND_HQ2_DIFF_ENERGY",
1843 : "IND_HQ2_DIFF_ENERGY",
1844 : "IND_HQ2_DIFF_ENERGY",
1845 : "IND_HQ2_DIFF_ENERGY",
1846 : "IND_HQ2_DIFF_ENERGY",
1847 : "IND_HQ2_DIFF_ENERGY",
1848 : "IND_HQ2_DIFF_ENERGY",
1849 : "IND_HQ2_DIFF_ENERGY",
1850 : "IND_HQ2_DIFF_ENERGY",
1851 : "IND_HQ2_DIFF_ENERGY",
1852 : "IND_HQ2_DIFF_ENERGY",
1853 : "IND_HQ2_DIFF_ENERGY",
1854 : "IND_HQ2_DIFF_ENERGY",
1855 : "IND_HQ2_DIFF_ENERGY",
1856 : "IND_HQ2_DIFF_ENERGY",
1857 : "IND_HQ2_DIFF_ENERGY",
1858 : "IND_HQ2_DIFF_ENERGY",
1859 : "IND_HQ2_DIFF_ENERGY",
1860 : "IND_HQ2_DIFF_ENERGY",
1861 : "IND_HQ2_DIFF_ENERGY",
1862 : "IND_HQ2_DIFF_ENERGY",
1863 : "IND_HQ2_DIFF_ENERGY",
1864 : "IND_HQ2_DIFF_ENERGY",
1865 : "IND_HQ2_DIFF_ENERGY",
1866 : "IND_HQ2_DIFF_ENERGY",
1867 : "IND_HQ2_DIFF_ENERGY",
1868 : "IND_HQ2_DIFF_ENERGY",
1869 : "IND_HQ2_DIFF_ENERGY",
1870 : "IND_HQ2_DIFF_ENERGY",
1871 : "IND_HQ2_DIFF_ENERGY",
1872 : "IND_HQ2_DIFF_ENERGY",
1873 : "IND_HQ2_DIFF_ENERGY",
1874 : "IND_HQ2_DIFF_ENERGY",
1875 : "IND_HQ2_DIFF_ENERGY",
1876 : "IND_HQ2_DIFF_ENERGY",
1877 : "IND_HQ2_DIFF_ENERGY",
1878 : "IND_HQ2_DIFF_ENERGY",
1879 : "IND_HQ2_DIFF_ENERGY",
1880 : "IND_HQ2_DIFF_ENERGY",
1881 : "IND_HQ2_DIFF_ENERGY",
1882 : "IND_HQ2_DIFF_ENERGY",
1883 : "IND_HQ2_DIFF_ENERGY",
1884 : "IND_HQ2_DIFF_ENERGY",
1885 : "IND_HQ2_DIFF_ENERGY",
1886 : "IND_HQ2_DIFF_ENERGY",
1887 : "IND_HQ2_DIFF_ENERGY",
1888 : "IND_HQ2_DIFF_ENERGY",
1889 : "IND_HQ2_DIFF_ENERGY",
1890 : "IND_HQ2_DIFF_ENERGY",
1891 : "IND_HQ2_DIFF_ENERGY",
1892 : "IND_HQ2_DIFF_ENERGY",
1893 : "IND_HQ2_DIFF_ENERGY",
1894 : "IND_HQ2_DIFF_ENERGY",
1895 : "IND_HQ2_DIFF_ENERGY",
1896 : "IND_HQ2_DIFF_ENERGY",
1897 : "IND_HQ2_DIFF_ENERGY",
1898 : "IND_HQ2_DIFF_ENERGY",
1899 : "IND_HQ2_DIFF_ENERGY",
1900 : "IND_HQ2_DIFF_ENERGY",
1901 : "IND_HQ2_DIFF_ENERGY",
1902 : "IND_HQ2_DIFF_ENERGY",
1903 : "IND_HQ2_DIFF_ENERGY",
1904 : "IND_HQ2_DIFF_ENERGY",
1905 : "IND_HQ2_DIFF_ENERGY",
1906 : "IND_HQ2_DIFF_ENERGY",
1907 : "IND_HQ2_DIFF_ENERGY",
1908 : "IND_HQ2_DIFF_ENERGY",
1909 : "IND_HQ2_DIFF_ENERGY",
1910 : "IND_HQ2_DIFF_ENERGY",
1911 : "IND_HQ2_DIFF_ENERGY",
1912 : "IND_HQ2_DIFF_ENERGY",
1913 : "IND_HQ2_DIFF_ENERGY",
1914 : "IND_HQ2_DIFF_ENERGY",
1915 : "IND_HQ2_DIFF_ENERGY",
1916 : "IND_HQ2_DIFF_ENERGY",
1917 : "IND_HQ2_DIFF_ENERGY",
1918 : "IND_HQ2_DIFF_ENERGY",
1919 : "IND_HQ2_DIFF_ENERGY",
1920 : "IND_HQ2_DIFF_ENERGY",
1921 : "IND_HQ2_DIFF_ENERGY",
1922 : "IND_HQ2_DIFF_ENERGY",
1923 : "IND_HQ2_DIFF_ENERGY",
1924 : "IND_HQ2_DIFF_ENERGY",
1925 : "IND_HQ2_DIFF_ENERGY",
1926 : "IND_HQ2_DIFF_ENERGY",
1927 : "IND_HQ2_DIFF_ENERGY",
1928 : "IND_HQ2_DIFF_ENERGY",
1929 : "IND_HQ2_P2A_FLAGS",
1930 : "IND_HQ2_P2A_FLAGS",
1931 : "IND_HQ2_P2A_FLAGS",
1932 : "IND_HQ2_P2A_FLAGS",
1933 : "IND_HQ2_P2A_FLAGS",
1934 : "IND_HQ2_P2A_FLAGS",
1935 : "IND_HQ2_P2A_FLAGS",
1936 : "IND_HQ2_P2A_FLAGS",
1937 : "IND_HQ2_P2A_FLAGS",
1938 : "IND_HQ2_P2A_FLAGS",
1939 : "IND_HQ2_P2A_FLAGS",
1940 : "IND_HQ2_P2A_FLAGS",
1941 : "IND_HQ2_P2A_FLAGS",
1942 : "IND_HQ2_P2A_FLAGS",
1943 : "IND_HQ2_P2A_FLAGS",
1944 : "IND_HQ2_P2A_FLAGS",
1945 : "IND_HQ2_P2A_FLAGS",
1946 : "IND_HQ2_P2A_FLAGS",
1947 : "IND_HQ2_P2A_FLAGS",
1948 : "IND_HQ2_P2A_FLAGS",
1949 : "IND_HQ2_P2A_FLAGS",
1950 : "IND_HQ2_P2A_FLAGS",
1951 : "IND_HQ2_P2A_FLAGS",
1952 : "IND_HQ2_P2A_FLAGS",
1953 : "IND_HQ2_P2A_FLAGS",
1954 : "IND_HQ2_P2A_FLAGS",
1955 : "IND_HQ2_P2A_FLAGS",
1956 : "IND_HQ2_P2A_FLAGS",
1957 : "IND_HQ2_P2A_FLAGS",
1958 : "IND_HQ2_P2A_FLAGS",
1959 : "IND_HQ2_P2A_FLAGS",
1960 : "IND_HQ2_P2A_FLAGS",
1961 : "IND_HQ2_P2A_FLAGS",
1962 : "IND_HQ2_P2A_FLAGS",
1963 : "IND_HQ2_P2A_FLAGS",
1964 : "IND_HQ2_P2A_FLAGS",
1965 : "IND_HQ2_P2A_FLAGS",
1966 : "IND_HQ2_P2A_FLAGS",
1967 : "IND_HQ2_P2A_FLAGS",
1968 : "IND_HQ2_P2A_FLAGS",
1969 : "IND_HQ2_P2A_FLAGS",
1970 : "IND_HQ2_P2A_FLAGS",
1971 : "IND_HQ2_P2A_FLAGS",
1972 : "IND_HQ2_P2A_FLAGS",
1973 : "IND_HQ2_P2A_FLAGS",
1974 : "IND_HQ2_P2A_FLAGS",
1975 : "IND_HQ2_P2A_FLAGS",
1976 : "IND_HQ2_P2A_FLAGS",
1977 : "IND_HQ2_P2A_FLAGS",
1978 : "IND_HQ2_P2A_FLAGS",
1979 : "IND_HQ2_P2A_FLAGS",
1980 : "IND_HQ2_P2A_FLAGS",
1981 : "IND_HQ2_P2A_FLAGS",
1982 : "IND_HQ2_P2A_FLAGS",
1983 : "IND_HQ2_P2A_FLAGS",
1984 : "IND_HQ2_P2A_FLAGS",
1985 : "IND_HQ2_P2A_FLAGS",
1986 : "IND_HQ2_P2A_FLAGS",
1987 : "IND_HQ2_P2A_FLAGS",
1988 : "IND_HQ2_P2A_FLAGS",
1989 : "IND_HQ2_LAST_BA_MAX_BAND",
1990 : "IND_HQ2_LAST_BA_MAX_BAND",
1991 : "IND_RC_START",
1992 : "IND_RC_START",
1993 : "IND_RC_START",
1994 : "IND_RC_START",
1995 : "IND_RC_START",
1996 : "IND_RC_START",
1997 : "IND_RC_START",
1998 : "IND_RC_START",
1999 : "IND_RC_START",
2000 : "IND_RC_START",
2001 : "IND_RC_START",
2002 : "IND_RC_START",
2003 : "IND_RC_START",
2004 : "IND_RC_START",
2005 : "IND_RC_START",
2006 : "IND_RC_START",
2007 : "IND_RC_START",
2008 : "IND_RC_START",
2009 : "IND_RC_START",
2010 : "IND_RC_START",
2011 : "IND_RC_START",
2012 : "IND_RC_START",
2013 : "IND_RC_START",
2014 : "IND_RC_START",
2015 : "IND_RC_START",
2016 : "IND_RC_START",
2017 : "IND_RC_START",
2018 : "IND_RC_START",
2019 : "IND_RC_START",
2020 : "IND_RC_START",
2021 : "IND_RC_START",
2022 : "IND_RC_START",
2023 : "IND_RC_START",
2024 : "IND_RC_START",
2025 : "IND_RC_START",
2026 : "IND_RC_START",
2027 : "IND_RC_START",
2028 : "IND_RC_START",
2029 : "IND_RC_START",
2030 : "IND_RC_START",
2031 : "IND_RC_START",
2032 : "IND_RC_START",
2033 : "IND_RC_START",
2034 : "IND_RC_START",
2035 : "IND_RC_START",
2036 : "IND_RC_START",
2037 : "IND_RC_START",
2038 : "IND_RC_START",
2039 : "IND_RC_START",
2040 : "IND_RC_START",
2041 : "IND_RC_START",
2042 : "IND_RC_START",
2043 : "IND_RC_START",
2044 : "IND_RC_START",
2045 : "IND_RC_START",
2046 : "IND_RC_START",
2047 : "IND_RC_START",
2048 : "IND_RC_START",
2049 : "IND_RC_START",
2050 : "IND_RC_START",
2051 : "IND_RC_START",
2052 : "IND_RC_START",
2053 : "IND_RC_START",
2054 : "IND_RC_START",
2055 : "IND_RC_START",
2056 : "IND_RC_START",
2057 : "IND_RC_START",
2058 : "IND_RC_START",
2059 : "IND_RC_START",
2060 : "IND_RC_START",
2061 : "IND_RC_START",
2062 : "IND_RC_START",
2063 : "IND_RC_START",
2064 : "IND_RC_START",
2065 : "IND_RC_START",
2066 : "IND_RC_START",
2067 : "IND_RC_START",
2068 : "IND_RC_START",
2069 : "IND_RC_START",
2070 : "IND_RC_START",
2071 : "IND_RC_START",
2072 : "IND_RC_START",
2073 : "IND_RC_START",
2074 : "IND_RC_START",
2075 : "IND_RC_START",
2076 : "IND_RC_START",
2077 : "IND_RC_START",
2078 : "IND_RC_START",
2079 : "IND_RC_START",
2080 : "IND_RC_START",
2081 : "IND_RC_START",
2082 : "IND_RC_START",
2083 : "IND_RC_START",
2084 : "IND_RC_START",
2085 : "IND_RC_START",
2086 : "IND_RC_START",
2087 : "IND_RC_START",
2088 : "IND_RC_START",
2089 : "IND_RC_START",
2090 : "IND_RC_START",
2091 : "IND_RC_START",
2092 : "IND_RC_START",
2093 : "IND_RC_START",
2094 : "IND_RC_START",
2095 : "IND_RC_START",
2096 : "IND_RC_START",
2097 : "IND_RC_START",
2098 : "IND_RC_START",
2099 : "IND_RC_START",
2100 : "IND_RC_START",
2101 : "IND_RC_START",
2102 : "IND_RC_START",
2103 : "IND_RC_START",
2104 : "IND_RC_START",
2105 : "IND_RC_START",
2106 : "IND_RC_START",
2107 : "IND_RC_START",
2108 : "IND_RC_START",
2109 : "IND_RC_START",
2110 : "IND_RC_START",
2111 : "IND_RC_START",
2112 : "IND_RC_START",
2113 : "IND_RC_START",
2114 : "IND_RC_START",
2115 : "IND_RC_START",
2116 : "IND_RC_START",
2117 : "IND_RC_START",
2118 : "IND_RC_START",
2119 : "IND_RC_START",
2120 : "IND_RC_START",
2121 : "IND_RC_START",
2122 : "IND_RC_START",
2123 : "IND_RC_START",
2124 : "IND_RC_START",
2125 : "IND_RC_START",
2126 : "IND_RC_START",
2127 : "IND_RC_START",
2128 : "IND_RC_START",
2129 : "IND_RC_START",
2130 : "IND_RC_START",
2131 : "IND_RC_START",
2132 : "IND_RC_START",
2133 : "IND_RC_START",
2134 : "IND_RC_START",
2135 : "IND_RC_START",
2136 : "IND_RC_START",
2137 : "IND_RC_START",
2138 : "IND_RC_START",
2139 : "IND_RC_START",
2140 : "IND_RC_START",
2141 : "IND_RC_START",
2142 : "IND_RC_START",
2143 : "IND_RC_START",
2144 : "IND_RC_START",
2145 : "IND_RC_START",
2146 : "IND_RC_START",
2147 : "IND_RC_START",
2148 : "IND_RC_START",
2149 : "IND_RC_START",
2150 : "IND_RC_START",
2151 : "IND_RC_START",
2152 : "IND_RC_START",
2153 : "IND_RC_START",
2154 : "IND_RC_START",
2155 : "IND_RC_START",
2156 : "IND_RC_START",
2157 : "IND_RC_START",
2158 : "IND_RC_START",
2159 : "IND_RC_START",
2160 : "IND_RC_START",
2161 : "IND_RC_START",
2162 : "IND_RC_START",
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_END",
2312 : "IND_HVQ_PVQ_GAIN",
2313 : "IND_HVQ_PVQ_GAIN",
2314 : "IND_HVQ_PVQ_GAIN",
2315 : "IND_HVQ_PVQ_GAIN",
2316 : "IND_HVQ_PVQ_GAIN",
2317 : "IND_HVQ_PVQ_GAIN",
2318 : "IND_HVQ_PVQ_GAIN",
2319 : "IND_HVQ_PVQ_GAIN",
2320 : "IND_NOISINESS",
2321 : "IND_ENERGY",
2322 : "IND_CNG_HO",
2323 : "IND_SID_BW",
2324 : "IND_CNG_ENV1",
2325 : "IND_WB_FENV",
2326 : "IND_WB_CLASS",
2327 : "IND_IG1",
2328 : "IND_IG2A",
2329 : "IND_IG2B",
2330 : "IND_NELP_FID",
2331 : "IND_DELTALAG",
2332 : "IND_POWER",
2333 : "IND_AMP0",
2334 : "IND_AMP1",
2335 : "IND_GLOBAL_ALIGNMENT",
2336 : "IND_PVQ_FINE_GAIN",
2337 : "IND_UV_FLAG",
2338 : "IND_UV_FLAG",
2339 : "IND_UV_FLAG",
2340 : "IND_UV_FLAG",
2341 : "IND_UV_FLAG",
2342 : "IND_UV_FLAG",
2343 : "IND_UV_FLAG",
2344 : "IND_UV_FLAG",
2345 : "IND_UV_FLAG",
2346 : "IND_UV_FLAG",
2347 : "IND_UV_FLAG",
2348 : "IND_UV_FLAG",
2349 : "IND_UV_FLAG",
2350 : "IND_UV_FLAG",
2351 : "IND_UV_FLAG",
2352 : "IND_UV_FLAG",
2353 : "IND_UV_FLAG",
2354 : "IND_UV_FLAG",
2355 : "IND_UV_FLAG",
2356 : "IND_UV_FLAG",
2357 : "IND_UV_FLAG",
2358 : "IND_UV_FLAG",
2359 : "IND_UV_FLAG",
2360 : "IND_UV_FLAG",
2361 : "IND_UV_FLAG",
2362 : "IND_UV_FLAG",
2363 : "IND_UV_FLAG",
2364 : "IND_UV_FLAG",
2365 : "IND_UV_FLAG",
2366 : "IND_UV_FLAG",
2367 : "IND_UV_FLAG",
2368 : "IND_UV_FLAG",
2369 : "IND_UV_FLAG",
2370 : "IND_UV_FLAG",
2371 : "IND_UV_FLAG",
2372 : "IND_UV_FLAG",
2373 : "IND_UV_FLAG",
2374 : "IND_UV_FLAG",
2375 : "IND_UV_FLAG",
2376 : "IND_UV_FLAG",
2377 : "IND_UV_FLAG",
2378 : "IND_UV_FLAG",
2379 : "IND_UV_FLAG",
2380 : "IND_SHB_SUBGAIN",
2381 : "IND_SHB_FRAMEGAIN",
2382 : "IND_STEREO_ICBWE_MSFLAG",
2383 : "IND_SHB_ENER_SF",
2384 : "IND_SHB_RES_GS",
2385 : "IND_SHB_RES_GS",
2386 : "IND_SHB_RES_GS",
2387 : "IND_SHB_RES_GS",
2388 : "IND_SHB_RES_GS",
2389 : "IND_SHB_VF",
2390 : "IND_SHB_LSF",
2391 : "IND_SHB_LSF",
2392 : "IND_SHB_LSF",
2393 : "IND_SHB_LSF",
2394 : "IND_SHB_LSF",
2395 : "IND_SHB_MIRROR",
2396 : "IND_SHB_GRID",
2397 : "IND_SWB_CLASS",
2398 : "IND_SWB_TENV",
2399 : "IND_SWB_TENV",
2400 : "IND_SWB_TENV",
2401 : "IND_SWB_TENV",
2402 : "IND_SWB_FENV",
2403 : "IND_SWB_FENV",
2404 : "IND_SWB_FENV",
2405 : "IND_SWB_FENV",
2406 : "IND_SHB_CNG_GAIN",
2407 : "IND_DITHERING",
2408 : "IND_FB_SLOPE",
2409 : "IND_HQ2_SPT_SHORTEN",
2410 : "IND_HQ2_SUBBAND_TCQ",
2411 : "IND_HQ2_SUBBAND_TCQ",
2412 : "IND_HQ2_SUBBAND_TCQ",
2413 : "IND_HQ2_SUBBAND_TCQ",
2414 : "IND_HQ2_SUBBAND_TCQ",
2415 : "IND_HQ2_SUBBAND_TCQ",
2416 : "IND_HQ2_SUBBAND_TCQ",
2417 : "IND_HQ2_SUBBAND_TCQ",
2418 : "IND_HQ2_SUBBAND_TCQ",
2419 : "IND_HQ2_SUBBAND_TCQ",
2420 : "IND_HQ2_SUBBAND_TCQ",
2421 : "IND_HQ2_SUBBAND_TCQ",
2422 : "IND_HQ2_SUBBAND_TCQ",
2423 : "IND_HQ2_SUBBAND_TCQ",
2424 : "IND_HQ2_SUBBAND_TCQ",
2425 : "IND_HQ2_SUBBAND_TCQ",
2426 : "IND_HQ2_SUBBAND_TCQ",
2427 : "IND_HQ2_SUBBAND_TCQ",
2428 : "IND_HQ2_SUBBAND_TCQ",
2429 : "IND_HQ2_SUBBAND_TCQ",
2430 : "IND_HQ2_SUBBAND_TCQ",
2431 : "IND_HQ2_SUBBAND_TCQ",
2432 : "IND_HQ2_SUBBAND_TCQ",
2433 : "IND_HQ2_SUBBAND_TCQ",
2434 : "IND_HQ2_SUBBAND_TCQ",
2435 : "IND_HQ2_SUBBAND_TCQ",
2436 : "IND_HQ2_SUBBAND_TCQ",
2437 : "IND_HQ2_SUBBAND_TCQ",
2438 : "IND_HQ2_SUBBAND_TCQ",
2439 : "IND_HQ2_SUBBAND_TCQ",
2440 : "IND_HQ2_SUBBAND_TCQ",
2441 : "IND_HQ2_SUBBAND_TCQ",
2442 : "IND_HQ2_SUBBAND_TCQ",
2443 : "IND_HQ2_SUBBAND_TCQ",
2444 : "IND_HQ2_SUBBAND_TCQ",
2445 : "IND_HQ2_SUBBAND_TCQ",
2446 : "IND_HQ2_SUBBAND_TCQ",
2447 : "IND_HQ2_SUBBAND_TCQ",
2448 : "IND_HQ2_SUBBAND_TCQ",
2449 : "IND_HQ2_SUBBAND_TCQ",
2450 : "IND_HQ2_SUBBAND_TCQ",
2451 : "IND_HQ2_SUBBAND_TCQ",
2452 : "IND_HQ2_SUBBAND_TCQ",
2453 : "IND_HQ2_SUBBAND_TCQ",
2454 : "IND_HQ2_SUBBAND_TCQ",
2455 : "IND_HQ2_SUBBAND_TCQ",
2456 : "IND_HQ2_SUBBAND_TCQ",
2457 : "IND_HQ2_SUBBAND_TCQ",
2458 : "IND_HQ2_SUBBAND_TCQ",
2459 : "IND_HQ2_SUBBAND_TCQ",
2460 : "IND_HQ2_SUBBAND_TCQ",
2461 : "IND_HQ2_SUBBAND_TCQ",
2462 : "IND_HQ2_SUBBAND_TCQ",
2463 : "IND_HQ2_SUBBAND_TCQ",
2464 : "IND_HQ2_SUBBAND_TCQ",
2465 : "IND_HQ2_SUBBAND_TCQ",
2466 : "IND_HQ2_SUBBAND_TCQ",
2467 : "IND_HQ2_SUBBAND_TCQ",
2468 : "IND_HQ2_SUBBAND_TCQ",
2469 : "IND_HQ2_SUBBAND_TCQ",
2470 : "IND_HQ2_SUBBAND_TCQ",
2471 : "IND_HQ2_SUBBAND_TCQ",
2472 : "IND_HQ2_SUBBAND_TCQ",
2473 : "IND_HQ2_SUBBAND_TCQ",
2474 : "IND_HQ2_SUBBAND_TCQ",
2475 : "IND_HQ2_SUBBAND_TCQ",
2476 : "IND_HQ2_SUBBAND_TCQ",
2477 : "IND_HQ2_SUBBAND_TCQ",
2478 : "IND_HQ2_SUBBAND_TCQ",
2479 : "IND_HQ2_SUBBAND_TCQ",
2480 : "IND_HQ2_SUBBAND_TCQ",
2481 : "IND_HQ2_SUBBAND_TCQ",
2482 : "IND_HQ2_SUBBAND_TCQ",
2483 : "IND_HQ2_SUBBAND_TCQ",
2484 : "IND_HQ2_SUBBAND_TCQ",
2485 : "IND_HQ2_SUBBAND_TCQ",
2486 : "IND_HQ2_SUBBAND_TCQ",
2487 : "IND_HQ2_SUBBAND_TCQ",
2488 : "IND_HQ2_SUBBAND_TCQ",
2489 : "IND_HQ2_SUBBAND_TCQ",
2490 : "IND_HQ2_SUBBAND_TCQ",
2491 : "IND_HQ2_SUBBAND_TCQ",
2492 : "IND_HQ2_SUBBAND_TCQ",
2493 : "IND_HQ2_SUBBAND_TCQ",
2494 : "IND_HQ2_SUBBAND_TCQ",
2495 : "IND_HQ2_SUBBAND_TCQ",
2496 : "IND_HQ2_SUBBAND_TCQ",
2497 : "IND_HQ2_SUBBAND_TCQ",
2498 : "IND_HQ2_SUBBAND_TCQ",
2499 : "IND_HQ2_SUBBAND_TCQ",
2500 : "IND_HQ2_SUBBAND_TCQ",
2501 : "IND_HQ2_SUBBAND_TCQ",
2502 : "IND_HQ2_SUBBAND_TCQ",
2503 : "IND_HQ2_SUBBAND_TCQ",
2504 : "IND_HQ2_SUBBAND_TCQ",
2505 : "IND_HQ2_SUBBAND_TCQ",
2506 : "IND_HQ2_SUBBAND_TCQ",
2507 : "IND_HQ2_SUBBAND_TCQ",
2508 : "IND_HQ2_SUBBAND_TCQ",
2509 : "IND_HQ2_SUBBAND_TCQ",
2510 : "IND_HQ2_SUBBAND_GAIN",
2511 : "IND_HQ2_SUBBAND_GAIN",
2512 : "IND_HQ2_SUBBAND_GAIN",
2513 : "IND_HQ2_SUBBAND_GAIN",
2514 : "IND_HQ2_SUBBAND_GAIN",
2515 : "IND_HQ2_SUBBAND_GAIN",
2516 : "IND_HQ2_SUBBAND_GAIN",
2517 : "IND_HQ2_SUBBAND_GAIN",
2518 : "IND_HQ2_SUBBAND_GAIN",
2519 : "IND_HQ2_SUBBAND_GAIN",
2520 : "IND_HQ2_SUBBAND_GAIN",
2521 : "IND_HQ2_SUBBAND_GAIN",
2522 : "IND_HQ2_SUBBAND_GAIN",
2523 : "IND_HQ2_SUBBAND_GAIN",
2524 : "IND_HQ2_SUBBAND_GAIN",
2525 : "IND_HQ2_SUBBAND_GAIN",
2526 : "IND_HQ2_SUBBAND_GAIN",
2527 : "IND_HQ2_SUBBAND_GAIN",
2528 : "IND_HQ2_SUBBAND_GAIN",
2529 : "IND_HQ2_SUBBAND_GAIN",
2530 : "IND_HQ2_DUMMY",
2531 : "IND_LAGINDICES",
2532 : "IND_NOISEG",
2533 : "IND_AUDIO_GAIN",
2534 : "IND_AUDIO_DELAY",
2535 : "IND_AUDIO_DELAY",
2536 : "IND_AUDIO_DELAY",
2537 : "IND_AUDIO_DELAY",
2538 : "IND_NQ2",
2539 : "IND_NQ2",
2540 : "IND_NQ2",
2541 : "IND_NQ2",
2542 : "IND_NQ2",
2543 : "IND_NQ2",
2544 : "IND_NQ2",
2545 : "IND_NQ2",
2546 : "IND_NQ2",
2547 : "IND_NQ2",
2548 : "IND_NQ2",
2549 : "IND_NQ2",
2550 : "IND_NQ2",
2551 : "IND_NQ2",
2552 : "IND_NQ2",
2553 : "IND_NQ2",
2554 : "IND_NQ2",
2555 : "IND_NQ2",
2556 : "IND_NQ2",
2557 : "IND_NQ2",
2558 : "IND_NQ2",
2559 : "IND_NQ2",
2560 : "IND_NQ2",
2561 : "IND_NQ2",
2562 : "IND_NQ2",
2563 : "IND_NQ2",
2564 : "IND_NQ2",
2565 : "IND_NQ2",
2566 : "IND_NQ2",
2567 : "IND_NQ2",
2568 : "IND_NQ2",
2569 : "IND_NQ2",
2570 : "IND_NQ2",
2571 : "IND_NQ2",
2572 : "IND_NQ2",
2573 : "IND_NQ2",
2574 : "IND_NQ2",
2575 : "IND_NQ2",
2576 : "IND_NQ2",
2577 : "IND_NQ2",
2578 : "IND_NQ2",
2579 : "IND_NQ2",
2580 : "IND_NQ2",
2581 : "IND_NQ2",
2582 : "IND_NQ2",
2583 : "IND_NQ2",
2584 : "IND_NQ2",
2585 : "IND_NQ2",
2586 : "IND_NQ2",
2587 : "IND_NQ2",
2588 : "IND_NQ2",
2589 : "IND_NQ2",
2590 : "IND_NQ2",
2591 : "IND_NQ2",
2592 : "IND_NQ2",
2593 : "IND_NQ2",
2594 : "IND_NQ2",
2595 : "IND_NQ2",
2596 : "IND_NQ2",
2597 : "IND_NQ2",
2598 : "IND_NQ2",
2599 : "IND_NQ2",
2600 : "IND_NQ2",
2601 : "IND_NQ2",
2602 : "IND_NQ2",
2603 : "IND_NQ2",
2604 : "IND_NQ2",
2605 : "IND_NQ2",
2606 : "IND_NQ2",
2607 : "IND_NQ2",
2608 : "IND_NQ2",
2609 : "IND_NQ2",
2610 : "IND_NQ2",
2611 : "IND_NQ2",
2612 : "IND_NQ2",
2613 : "IND_NQ2",
2614 : "IND_NQ2",
2615 : "IND_NQ2",
2616 : "IND_NQ2",
2617 : "IND_NQ2",
2618 : "IND_NQ2",
2619 : "IND_NQ2",
2620 : "IND_NQ2",
2621 : "IND_NQ2",
2622 : "IND_NQ2",
2623 : "IND_NQ2",
2624 : "IND_NQ2",
2625 : "IND_NQ2",
2626 : "IND_NQ2",
2627 : "IND_NQ2",
2628 : "IND_NQ2",
2629 : "IND_NQ2",
2630 : "IND_NQ2",
2631 : "IND_NQ2",
2632 : "IND_NQ2",
2633 : "IND_NQ2",
2634 : "IND_NQ2",
2635 : "IND_NQ2",
2636 : "IND_NQ2",
2637 : "IND_NQ2",
2638 : "IND_NQ2",
2639 : "IND_NQ2",
2640 : "IND_NQ2",
2641 : "IND_NQ2",
2642 : "IND_NQ2",
2643 : "IND_NQ2",
2644 : "IND_NQ2",
2645 : "IND_NQ2",
2646 : "IND_NQ2",
2647 : "IND_NQ2",
2648 : "IND_NQ2",
2649 : "IND_NQ2",
2650 : "IND_NQ2",
2651 : "IND_NQ2",
2652 : "IND_NQ2",
2653 : "IND_NQ2",
2654 : "IND_NQ2",
2655 : "IND_NQ2",
2656 : "IND_NQ2",
2657 : "IND_NQ2",
2658 : "IND_NQ2",
2659 : "IND_NQ2",
2660 : "IND_NQ2",
2661 : "IND_NQ2",
2662 : "IND_NQ2",
2663 : "IND_NQ2",
2664 : "IND_NQ2",
2665 : "IND_NQ2",
2666 : "IND_NQ2",
2667 : "IND_NQ2",
2668 : "IND_NQ2",
2669 : "IND_NQ2",
2670 : "IND_NQ2",
2671 : "IND_NQ2",
2672 : "IND_NQ2",
2673 : "IND_NQ2",
2674 : "IND_NQ2",
2675 : "IND_NQ2",
2676 : "IND_NQ2",
2677 : "IND_NQ2",
2678 : "IND_NQ2",
2679 : "IND_NQ2",
2680 : "IND_NQ2",
2681 : "IND_NQ2",
2682 : "IND_NQ2",
2683 : "IND_NQ2",
2684 : "IND_NQ2",
2685 : "IND_NQ2",
2686 : "IND_NQ2",
2687 : "IND_NQ2",
2688 : "IND_NQ2",
2689 : "IND_NQ2",
2690 : "IND_NQ2",
2691 : "IND_NQ2",
2692 : "IND_NQ2",
2693 : "IND_NQ2",
2694 : "IND_NQ2",
2695 : "IND_NQ2",
2696 : "IND_NQ2",
2697 : "IND_NQ2",
2698 : "IND_NQ2",
2699 : "IND_NQ2",
2700 : "IND_NQ2",
2701 : "IND_NQ2",
2702 : "IND_NQ2",
2703 : "IND_NQ2",
2704 : "IND_NQ2",
2705 : "IND_NQ2",
2706 : "IND_NQ2",
2707 : "IND_NQ2",
2708 : "IND_NQ2",
2709 : "IND_NQ2",
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 : "TAG_HR_BWE_LOOP_END",
2739 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2740 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2741 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2742 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2743 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2744 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2745 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2746 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2747 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2748 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2749 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2750 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2751 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2752 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2753 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2754 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2755 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2756 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2757 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2758 : "IND_CORE_SWITCHING_CELP_SUBFRAME",
2759 : "IND_CORE_SWITCHING_AUDIO_DELAY",
2760 : "IND_CORE_SWITCHING_AUDIO_GAIN",
2761 : "IND_STEREO_ICBWE_REF",
2762 : "IND_STEREO_ICBWE_SP",
2763 : "IND_STEREO_ICBWE_GS",
2764 : "IND_STEREO_REFCHAN",
2765 : "IND_STEREO_CORRSTATS",
2766 : "IND_STEREO_GD",
2767 : "IND_STEREO_LRTD_FLAG",
2768 : "IND_STEREO_LPC_REUSE",
2769 : "IND_STEREO_TD_ALPHA",
2770 : "IND_STEREO_2ND_CODER_T",
2771 : "IND_UNUSED"
2772 : };
2773 : #endif
2774 :
2775 :
2776 : /*-------------------------------------------------------------------*
2777 : * push_indice()
2778 : *
2779 : * Push a new indice into the buffer
2780 : *-------------------------------------------------------------------*/
2781 :
2782 0 : ivas_error push_indice(
2783 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
2784 : Word16 id, /* i : ID of the indice */
2785 : UWord16 value, /* i : value of the quantized indice */
2786 : Word16 nb_bits /* i : number of bits used to quantize the indice */
2787 : )
2788 : {
2789 : Word16 i;
2790 : Word16 j;
2791 : ivas_error error;
2792 :
2793 0 : error = IVAS_ERR_OK;
2794 0 : move32();
2795 :
2796 : /* check the limits of the list of indices */
2797 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
2798 : {
2799 0 : return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices (frame %d) !\n" );
2800 : }
2801 :
2802 : /* find the location in the list of indices based on ID */
2803 0 : i = hBstr->nb_ind_tot;
2804 0 : move16();
2805 0 : test();
2806 0 : WHILE( i > 0 && ( id < hBstr->ind_list[i - 1].id ) )
2807 : {
2808 0 : test();
2809 0 : i = sub( i, 1 );
2810 : }
2811 :
2812 : /* shift indices, if the new ID is to be written somewhere inside the list */
2813 0 : IF( i < hBstr->nb_ind_tot )
2814 : {
2815 0 : FOR( j = hBstr->nb_ind_tot; j > i; j-- )
2816 : {
2817 0 : hBstr->ind_list[j].id = hBstr->ind_list[j - 1].id;
2818 0 : hBstr->ind_list[j].nb_bits = hBstr->ind_list[j - 1].nb_bits;
2819 0 : hBstr->ind_list[j].value = hBstr->ind_list[j - 1].value;
2820 : #ifdef DBG_BITSTREAM_ANALYSIS
2821 : strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[j - 1].function_name, 100 );
2822 : #endif
2823 0 : move16();
2824 0 : move16();
2825 0 : move16();
2826 : }
2827 : }
2828 :
2829 :
2830 : /* store the new indice in the list */
2831 0 : hBstr->ind_list[i].id = id;
2832 0 : hBstr->ind_list[i].value = value;
2833 0 : hBstr->ind_list[i].nb_bits = nb_bits;
2834 : #ifdef DBG_BITSTREAM_ANALYSIS
2835 : strncpy( hBstr->ind_list[i].function_name, named_indices_table[id], 100 );
2836 : #endif
2837 0 : move16();
2838 0 : move16();
2839 0 : move16();
2840 :
2841 : /* updates */
2842 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
2843 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
2844 0 : move16();
2845 0 : move16();
2846 :
2847 0 : return error;
2848 : }
2849 :
2850 : /*-------------------------------------------------------------------*
2851 : * push_next_indice()
2852 : *
2853 : * Push a new indice into the buffer at the next position
2854 : *-------------------------------------------------------------------*/
2855 : #ifdef DBG_BITSTREAM_ANALYSIS
2856 : ivas_error push_next_indice_(
2857 : #else
2858 0 : ivas_error push_next_indice(
2859 : #endif
2860 : #ifdef DBG_BITSTREAM_ANALYSIS
2861 : const char *caller,
2862 : #endif
2863 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
2864 : UWord16 value, /* i : value of the quantized indice */
2865 : Word16 nb_bits /* i : number of bits used to quantize the indice */
2866 : )
2867 : {
2868 : Word16 prev_id;
2869 : ivas_error error;
2870 :
2871 0 : error = IVAS_ERR_OK;
2872 0 : move32();
2873 :
2874 :
2875 : /* check the limits of the list of indices */
2876 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
2877 : {
2878 0 : return error;
2879 : }
2880 :
2881 : /* get the id of the previous indice -> it will be re-used */
2882 0 : IF( hBstr->nb_ind_tot > 0 )
2883 : {
2884 0 : prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
2885 : }
2886 : ELSE
2887 : {
2888 0 : prev_id = 0;
2889 : }
2890 0 : move16();
2891 :
2892 : /* store the values in the list */
2893 0 : hBstr->ind_list[hBstr->nb_ind_tot].id = prev_id;
2894 0 : hBstr->ind_list[hBstr->nb_ind_tot].value = value;
2895 0 : hBstr->ind_list[hBstr->nb_ind_tot].nb_bits = nb_bits;
2896 0 : move16();
2897 0 : move16();
2898 0 : move16();
2899 :
2900 : #ifdef DBG_BITSTREAM_ANALYSIS
2901 : strncpy( hBstr->ind_list[hBstr->nb_ind_tot].function_name, caller, 100 );
2902 : #endif
2903 :
2904 : /* updates */
2905 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
2906 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
2907 0 : move16();
2908 0 : move16();
2909 :
2910 0 : return error;
2911 : }
2912 :
2913 : /*-------------------------------------------------------------------*
2914 : * push_next_bits()
2915 : * Push a bit buffer into the buffer at the next position
2916 : *-------------------------------------------------------------------*/
2917 : #ifdef DBG_BITSTREAM_ANALYSIS
2918 : ivas_error push_next_bits_(
2919 : #else
2920 0 : ivas_error push_next_bits(
2921 : #endif
2922 : #ifdef DBG_BITSTREAM_ANALYSIS
2923 : const char *caller,
2924 : #endif
2925 : BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
2926 : const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */
2927 : const Word16 nb_bits /* i : number of bits to pack */
2928 : )
2929 : {
2930 : UWord16 code;
2931 : Word16 i, nb_bits_m15;
2932 : Indice *ptr;
2933 : Word16 prev_id;
2934 : ivas_error error;
2935 :
2936 0 : error = IVAS_ERR_OK;
2937 0 : move32();
2938 :
2939 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
2940 :
2941 : /* get the id of the previous indice -> will be re-used */
2942 0 : IF( hBstr->nb_ind_tot > 0 )
2943 : {
2944 0 : prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
2945 0 : move16();
2946 : }
2947 : ELSE
2948 : {
2949 0 : prev_id = 0;
2950 0 : move16();
2951 : }
2952 0 : nb_bits_m15 = sub( nb_bits, 15 );
2953 :
2954 0 : FOR( i = 0; i < nb_bits_m15; i += 16 )
2955 : {
2956 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] ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
2957 :
2958 : /* check the limits of the list of indices */
2959 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
2960 : {
2961 0 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" );
2962 : }
2963 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
2964 :
2965 0 : ptr->value = code;
2966 0 : ptr->nb_bits = 16;
2967 0 : ptr->id = prev_id;
2968 : #ifdef DBG_BITSTREAM_ANALYSIS
2969 : strncpy( ptr->function_name, caller, 100 );
2970 : #endif
2971 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
2972 0 : move16();
2973 0 : move16();
2974 0 : move16();
2975 0 : move16();
2976 :
2977 0 : ++ptr;
2978 : }
2979 :
2980 0 : FOR( ; i < nb_bits; ++i )
2981 : {
2982 : /* check the limits of the list of indices */
2983 0 : IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
2984 : {
2985 0 : return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" );
2986 : }
2987 0 : ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
2988 :
2989 0 : ptr->value = bits[i];
2990 0 : ptr->nb_bits = 1;
2991 0 : ptr->id = prev_id;
2992 : #ifdef DBG_BITSTREAM_ANALYSIS
2993 : strncpy( ptr->function_name, caller, 100 );
2994 : #endif
2995 0 : hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
2996 0 : move16();
2997 0 : move16();
2998 0 : move16();
2999 0 : move16();
3000 :
3001 0 : ++ptr;
3002 : }
3003 :
3004 0 : hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
3005 0 : move16();
3006 :
3007 0 : return error;
3008 : }
3009 :
3010 : /*-------------------------------------------------------------------*
3011 : * find_indice()
3012 : *
3013 : * Find indice based on its id
3014 : *-------------------------------------------------------------------*/
3015 :
3016 : /*! r: result: index of the indice in the list, -1 if not found */
3017 0 : Word16 find_indice(
3018 : BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
3019 : const Word16 id, /* i : ID of the indice */
3020 : UWord16 *value, /* o : value of the quantized indice */
3021 : Word16 *nb_bits /* o : number of bits used to quantize the indice */
3022 : )
3023 : {
3024 : Word16 i;
3025 :
3026 0 : for ( i = 0; i < hBstr->nb_ind_tot; i++ )
3027 : {
3028 0 : if ( hBstr->ind_list[i].id == id && hBstr->ind_list[i].nb_bits > 0 )
3029 : {
3030 0 : *value = hBstr->ind_list[i].value;
3031 0 : *nb_bits = hBstr->ind_list[i].nb_bits;
3032 0 : return i;
3033 : }
3034 : }
3035 :
3036 0 : return -1;
3037 : }
3038 :
3039 :
3040 : /*-------------------------------------------------------------------*
3041 : * delete_indice()
3042 : *
3043 : * Delete indice based on its id (note, that nb_ind_tot and nb_bits_tot are updated)
3044 : *-------------------------------------------------------------------*/
3045 :
3046 : /*! r: number of deleted indices */
3047 0 : UWord16 delete_indice(
3048 : BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
3049 : const Word16 id /* i : ID of the indice */
3050 : )
3051 : {
3052 : Word16 i, j;
3053 :
3054 0 : j = 0;
3055 0 : for ( i = 0; i < hBstr->nb_ind_tot; i++ )
3056 : {
3057 0 : if ( hBstr->ind_list[i].id == id )
3058 : {
3059 0 : hBstr->nb_bits_tot -= hBstr->ind_list[i].nb_bits;
3060 0 : continue;
3061 : }
3062 :
3063 0 : if ( j < i )
3064 : {
3065 : /* shift the indice left */
3066 0 : hBstr->ind_list[j].id = hBstr->ind_list[i].id;
3067 0 : hBstr->ind_list[j].value = hBstr->ind_list[i].value;
3068 0 : hBstr->ind_list[j].nb_bits = hBstr->ind_list[i].nb_bits;
3069 : #ifdef DBG_BITSTREAM_ANALYSIS
3070 : strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[i].function_name, 100 );
3071 : #endif
3072 : }
3073 :
3074 0 : j++;
3075 : }
3076 :
3077 0 : hBstr->nb_ind_tot = j;
3078 :
3079 0 : for ( ; j < i; j++ )
3080 : {
3081 : /* reset the shifted indices at the end of the list */
3082 0 : hBstr->ind_list[j].nb_bits = -1;
3083 : #ifdef DBG_BITSTREAM_ANALYSIS
3084 : sprintf( hBstr->ind_list[j].function_name, "RESET in delete_indice" );
3085 : #endif
3086 : }
3087 :
3088 0 : return i - j;
3089 : }
3090 :
3091 :
3092 : /*-------------------------------------------------------------------*
3093 : * get_next_indice()
3094 : *
3095 : * Get the next indice from the buffer
3096 : *-------------------------------------------------------------------*/
3097 :
3098 : /*! r: value of the indice */
3099 3046 : UWord16 get_next_indice(
3100 : Decoder_State *st, /* i/o: decoder state structure */
3101 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3102 : )
3103 : {
3104 : UWord16 value;
3105 : Word16 i;
3106 : Word32 nbits_total;
3107 :
3108 3046 : assert( nb_bits <= 16 );
3109 :
3110 3046 : nbits_total = st->total_brate / FRAMES_PER_SEC;
3111 : /* detect corrupted bitstream */
3112 3046 : if ( st->next_bit_pos + nb_bits > nbits_total )
3113 : {
3114 0 : st->BER_detect = 1;
3115 0 : return ( 0 );
3116 : }
3117 :
3118 3046 : value = 0;
3119 7504 : for ( i = 0; i < nb_bits; i++ )
3120 : {
3121 4458 : value <<= 1;
3122 4458 : value += st->bit_stream[st->next_bit_pos + i];
3123 : }
3124 :
3125 : /* update the position in the bitstream */
3126 3046 : st->next_bit_pos += nb_bits;
3127 :
3128 3046 : return value;
3129 : }
3130 :
3131 : /*-------------------------------------------------------------------*
3132 : * get_next_indice_1()
3133 : *
3134 : * Get the next 1-bit indice from the buffer
3135 : *-------------------------------------------------------------------*/
3136 :
3137 : /*! r: value of the indice */
3138 0 : UWord16 get_next_indice_1(
3139 : Decoder_State *st /* i/o: decoder state structure */
3140 : )
3141 : {
3142 : Word32 nbits_total;
3143 0 : nbits_total = st->total_brate / FRAMES_PER_SEC;
3144 : /* detect corrupted bitstream */
3145 0 : if ( ( st->next_bit_pos + 1 > nbits_total && st->codec_mode == MODE1 ) ||
3146 0 : ( ( st->next_bit_pos + 1 > nbits_total + ( 2 * 8 ) ) && st->codec_mode == MODE2 ) /* add two zero bytes for arithmetic coder flush */
3147 : )
3148 : {
3149 0 : st->BER_detect = 1;
3150 0 : return ( 0 );
3151 : }
3152 :
3153 0 : return st->bit_stream[st->next_bit_pos++];
3154 : }
3155 :
3156 : /*-------------------------------------------------------------------*
3157 : * get_next_indice_tmp()
3158 : *
3159 : * update the total number of bits and the position in the bitstream
3160 : *-------------------------------------------------------------------*/
3161 :
3162 560908 : void get_next_indice_tmp(
3163 : Decoder_State *st, /* o : decoder state structure */
3164 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3165 : )
3166 : {
3167 : /* update the position in the bitstream */
3168 560908 : st->next_bit_pos += nb_bits;
3169 :
3170 560908 : return;
3171 : }
3172 :
3173 : /*-------------------------------------------------------------------*
3174 : * get_indice()
3175 : *
3176 : * Get indice at specific position in the buffer
3177 : *-------------------------------------------------------------------*/
3178 :
3179 : /*! r: value of the indice */
3180 536584 : UWord16 get_indice(
3181 : Decoder_State *st, /* i/o: decoder state structure */
3182 : Word16 pos, /* i : absolute position in the bitstream (update after the read) */
3183 : Word16 nb_bits /* i : number of bits that were used to quantize the indice */
3184 : )
3185 : {
3186 : UWord16 value;
3187 : Word16 i;
3188 : Word32 nbits_total;
3189 :
3190 536584 : assert( nb_bits <= 16 );
3191 :
3192 536584 : nbits_total = st->total_brate / FRAMES_PER_SEC;
3193 :
3194 : /* detect corrupted bitstream */
3195 536584 : if ( pos + nb_bits > nbits_total )
3196 : {
3197 0 : st->BER_detect = 1;
3198 0 : return ( 0 );
3199 : }
3200 :
3201 536584 : value = 0;
3202 3395718 : for ( i = 0; i < nb_bits; i++ )
3203 : {
3204 2859134 : value <<= 1;
3205 2859134 : value += st->bit_stream[pos + i];
3206 : }
3207 536584 : return value;
3208 : }
3209 :
3210 : /*-------------------------------------------------------------------*
3211 : * get_indice_st()
3212 : *
3213 : * Get indice at specific position in the buffer
3214 : *-------------------------------------------------------------------*/
3215 :
3216 : /*! r: value of the indice */
3217 19352 : UWord16 get_indice_st(
3218 : Decoder_State *st, /* i/o: decoder state structure */
3219 : const Word32 element_brate, /* i : element bitrate */
3220 : const Word16 pos, /* i : absolute position in the bitstream */
3221 : const Word16 nb_bits /* i : number of bits to quantize the indice */
3222 : )
3223 : {
3224 : UWord16 value;
3225 : Word16 i;
3226 :
3227 19352 : assert( nb_bits <= 16 );
3228 :
3229 : /* detect corrupted bitstream */
3230 19352 : IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), Mpy_32_32( element_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ) )
3231 : {
3232 0 : st->BER_detect = 1;
3233 0 : move16();
3234 0 : return ( 0 );
3235 : }
3236 :
3237 19352 : value = 0;
3238 19352 : move16();
3239 62880 : FOR( i = 0; i < nb_bits; i++ )
3240 : {
3241 43528 : value = shl( value, 1 );
3242 43528 : value = add( value, st->bit_stream[pos + i] );
3243 : }
3244 :
3245 19352 : return value;
3246 : }
3247 : #define WMC_TOOL_SKIP
3248 :
3249 : /*-------------------------------------------------------------------*
3250 : * reset_indices_dec()
3251 : *
3252 : * Reset the buffer of decoder indices
3253 : *-------------------------------------------------------------------*/
3254 2162322 : void reset_indices_dec(
3255 : Decoder_State *st )
3256 : {
3257 2162322 : st->next_bit_pos = 0;
3258 2162322 : move16();
3259 :
3260 2162322 : return;
3261 : }
3262 : /*-------------------------------------------------------------------*
3263 : * write_indices_to_stream()
3264 : *
3265 : * writing forward or backward to a serial stream
3266 : *-------------------------------------------------------------------*/
3267 0 : static Word16 write_indices_to_stream_fx(
3268 : Indice *ind_list,
3269 : UWord16 **pt_stream,
3270 : const Word16 inc,
3271 : const Word16 num_indices )
3272 : {
3273 : Word16 i, k;
3274 : Word16 value, nb_bits;
3275 : UWord16 mask;
3276 :
3277 0 : FOR( i = 0; i < num_indices; i++ )
3278 : {
3279 0 : value = ind_list[i].value;
3280 0 : nb_bits = ind_list[i].nb_bits;
3281 0 : move16();
3282 0 : move16();
3283 :
3284 0 : IF( nb_bits > 0 )
3285 : {
3286 : /* mask from MSB to LSB */
3287 0 : mask = (UWord16) L_shl( 1, sub( nb_bits, 1 ) );
3288 :
3289 : /* write bit by bit */
3290 0 : FOR( k = 0; k < nb_bits; k++ )
3291 : {
3292 0 : IF( L_and( value, mask ) )
3293 : {
3294 0 : **pt_stream = 1;
3295 0 : move16();
3296 0 : *pt_stream += inc;
3297 : }
3298 : ELSE
3299 : {
3300 0 : **pt_stream = 0;
3301 0 : move16();
3302 0 : *pt_stream += inc;
3303 : }
3304 :
3305 0 : mask = (UWord16) L_shr( mask, 1 );
3306 : }
3307 : }
3308 : }
3309 0 : return 0;
3310 : }
3311 :
3312 : /*-------------------------------------------------------------------*
3313 : * write_indices_element()
3314 : *
3315 : * Bitstream writing function of one element (one SCE or one CPE)
3316 : *-------------------------------------------------------------------*/
3317 0 : static ivas_error write_indices_element_fx(
3318 : Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */
3319 : UWord16 **pt_stream, /* i : pointer to bitstream buffer */
3320 : const Word16 is_SCE, /* i : flag to distingusih SCE and CPE */
3321 : const Word16 element_id /* i : id of the SCE or CPE */
3322 : #ifdef DBG_BITSTREAM_ANALYSIS
3323 : ,
3324 : int32_t frame
3325 : #endif
3326 : )
3327 : {
3328 : Word16 ch;
3329 0 : Encoder_State **sts = NULL;
3330 : UWord16 *pt_stream_loc;
3331 : UWord16 *pt_stream_backup;
3332 : UWord16 *pt_stream_end;
3333 : Word16 nb_bits_tot_metadata;
3334 : Word16 nb_ind_tot_metadata;
3335 :
3336 : Indice *ind_list_metadata;
3337 : Word16 n, n_channels;
3338 : ivas_error error;
3339 :
3340 0 : error = IVAS_ERR_OK;
3341 0 : move32();
3342 :
3343 0 : ind_list_metadata = NULL;
3344 0 : nb_ind_tot_metadata = 0;
3345 0 : move16();
3346 :
3347 0 : IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MONO_FORMAT ) )
3348 : {
3349 0 : sts = st_ivas->hSCE[0]->hCoreCoder;
3350 0 : nb_bits_tot_metadata = 0;
3351 0 : move16();
3352 : }
3353 : ELSE
3354 : {
3355 0 : nb_bits_tot_metadata = 0;
3356 0 : move16();
3357 0 : test();
3358 0 : test();
3359 0 : IF( is_SCE && st_ivas->hSCE[element_id] != NULL )
3360 : {
3361 0 : sts = st_ivas->hSCE[element_id]->hCoreCoder;
3362 :
3363 0 : IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
3364 : {
3365 0 : nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot;
3366 0 : ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list;
3367 0 : nb_ind_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot;
3368 0 : move16();
3369 0 : move16();
3370 : }
3371 : }
3372 0 : ELSE IF( !is_SCE && st_ivas->hCPE[element_id] != NULL )
3373 : {
3374 0 : sts = st_ivas->hCPE[element_id]->hCoreCoder;
3375 :
3376 0 : IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
3377 : {
3378 0 : nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot;
3379 0 : ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list;
3380 0 : nb_ind_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot;
3381 0 : move16();
3382 0 : move16();
3383 : }
3384 : }
3385 : }
3386 :
3387 0 : n_channels = 1;
3388 0 : move16();
3389 0 : if ( GT_16( sts[0]->element_mode, IVAS_CPE_DFT ) )
3390 : {
3391 0 : n_channels = CPE_CHANNELS;
3392 0 : move16();
3393 : }
3394 :
3395 : /*----------------------------------------------------------------*
3396 : * Bitstream packing (conversion of individual indices into a serial stream)
3397 : *----------------------------------------------------------------*/
3398 :
3399 0 : pt_stream_loc = *pt_stream;
3400 0 : pt_stream_end = pt_stream_loc;
3401 :
3402 0 : FOR( n = 0; n < n_channels; n++ )
3403 : {
3404 : /* write the metadata buffer */
3405 0 : test();
3406 0 : IF( n == 0 && nb_bits_tot_metadata != 0 )
3407 : {
3408 0 : pt_stream_backup = pt_stream_loc;
3409 :
3410 0 : FOR( ch = 0; ch < n_channels; ch++ )
3411 : {
3412 0 : pt_stream_loc += sts[ch]->hBstr->nb_bits_tot;
3413 : }
3414 0 : pt_stream_loc += nb_bits_tot_metadata - 1;
3415 0 : pt_stream_end = pt_stream_loc + 1;
3416 :
3417 0 : write_indices_to_stream_fx( ind_list_metadata, &pt_stream_loc, -1,
3418 : nb_ind_tot_metadata );
3419 :
3420 : /* restore previous pointer position */
3421 0 : pt_stream_loc = pt_stream_backup;
3422 : }
3423 0 : write_indices_to_stream_fx( sts[n]->hBstr->ind_list, &pt_stream_loc, 1,
3424 0 : sts[n]->hBstr->nb_ind_tot );
3425 :
3426 0 : if ( pt_stream_loc > pt_stream_end )
3427 : {
3428 0 : pt_stream_end = pt_stream_loc;
3429 : }
3430 : }
3431 :
3432 : #ifdef DBG_BITSTREAM_ANALYSIS
3433 : if ( is_SCE ) /* EVS and SCE */
3434 : {
3435 : static FILE *f1 = 0;
3436 :
3437 : if ( f1 == 0 )
3438 : f1 = fopen( "bitstream_text", "w" );
3439 :
3440 : for ( int16_t i = 0; i < sts[0]->hBstr->nb_ind_tot; i++ )
3441 : {
3442 : Indice *ind_list = sts[0]->hBstr->ind_list;
3443 : int16_t value = ind_list[i].value;
3444 : int16_t nb_bits = ind_list[i].nb_bits;
3445 : char *function_name = ind_list[i].function_name;
3446 :
3447 : fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
3448 : }
3449 :
3450 : if ( st_ivas->hSCE[element_id]->hMetaData != NULL )
3451 : {
3452 : for ( int16_t i = 0; i < st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot; i++ )
3453 : {
3454 : Indice *ind_list = st_ivas->hSCE[element_id]->hMetaData->ind_list;
3455 : int16_t value = ind_list[i].value;
3456 : int16_t nb_bits = ind_list[i].nb_bits;
3457 : char *function_name = ind_list[i].function_name;
3458 :
3459 : fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
3460 : }
3461 : }
3462 : }
3463 : else
3464 : {
3465 : static FILE *f1 = 0;
3466 :
3467 : if ( f1 == 0 )
3468 : f1 = fopen( "bitstream_text", "w" );
3469 :
3470 :
3471 : for ( n = 0; n < n_channels; n++ )
3472 : {
3473 : for ( int16_t i = 0; i < sts[n]->hBstr->nb_ind_tot; i++ )
3474 : {
3475 : Indice *ind_list = sts[n]->hBstr->ind_list;
3476 : int16_t value = ind_list[i].value;
3477 : int16_t nb_bits = ind_list[i].nb_bits;
3478 : char *function_name = ind_list[i].function_name;
3479 :
3480 : fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, n, i, function_name, nb_bits, value );
3481 : }
3482 : }
3483 :
3484 : if ( st_ivas->hCPE[element_id]->hMetaData != NULL )
3485 : {
3486 : for ( int16_t i = 0; i < st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot; i++ )
3487 : {
3488 : Indice *ind_list = st_ivas->hCPE[element_id]->hMetaData->ind_list;
3489 : int16_t value = ind_list[i].value;
3490 : int16_t nb_bits = ind_list[i].nb_bits;
3491 : char *function_name = ind_list[i].function_name;
3492 :
3493 : fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, -1, i, function_name, nb_bits, value );
3494 : }
3495 : }
3496 : }
3497 : #endif
3498 :
3499 : /*----------------------------------------------------------------*
3500 : * Clearing of indices
3501 : * Reset index pointers
3502 : *----------------------------------------------------------------*/
3503 :
3504 0 : IF( is_SCE ) /* EVS and SCE */
3505 : {
3506 0 : IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
3507 : {
3508 0 : reset_indices_enc_fx( st_ivas->hSCE[element_id]->hMetaData, st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot );
3509 : }
3510 :
3511 0 : reset_indices_enc_fx( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot );
3512 : }
3513 : ELSE
3514 : {
3515 0 : IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
3516 : {
3517 0 : reset_indices_enc_fx( st_ivas->hCPE[element_id]->hMetaData, st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot );
3518 : }
3519 :
3520 0 : FOR( n = 0; n < n_channels; n++ )
3521 : {
3522 0 : reset_indices_enc_fx( sts[n]->hBstr, sts[n]->hBstr->nb_ind_tot );
3523 : }
3524 : }
3525 :
3526 : /* update pointer */
3527 0 : *pt_stream = pt_stream_end;
3528 :
3529 0 : return error;
3530 : }
3531 :
3532 : /*-------------------------------------------------------------------*
3533 : * write_indices_ivas()
3534 : *
3535 : * Write the buffer of indices to a serial bitstream buffer,
3536 : * each bit represented as a uint16_t of value 0 or 1
3537 : *-------------------------------------------------------------------*/
3538 0 : ivas_error write_indices_ivas_fx(
3539 : Encoder_Struct *st_ivas, /* i/o: encoder state structure */
3540 : UWord16 *bit_stream, /* i/o: output bitstream */
3541 : UWord16 *num_bits /* i : number of indices written to output */
3542 : #ifdef DBG_BITSTREAM_ANALYSIS
3543 : ,
3544 : int32_t frame
3545 : #endif
3546 : )
3547 : {
3548 : Word16 i, n;
3549 : UWord16 *pt_stream;
3550 : ivas_error error;
3551 :
3552 0 : error = IVAS_ERR_OK;
3553 0 : move32();
3554 :
3555 0 : pt_stream = bit_stream;
3556 0 : FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i )
3557 : {
3558 0 : bit_stream[i] = 0;
3559 0 : move16();
3560 : }
3561 :
3562 :
3563 : /*-----------------------------------------------------------------*
3564 : * Encode Payload
3565 : *-----------------------------------------------------------------*/
3566 :
3567 0 : FOR( n = 0; n < st_ivas->nSCE; n++ )
3568 : {
3569 0 : write_indices_element_fx( st_ivas, &pt_stream, 1, n
3570 : #ifdef DBG_BITSTREAM_ANALYSIS
3571 : ,
3572 : frame
3573 : #endif
3574 : );
3575 : }
3576 :
3577 0 : FOR( n = 0; n < st_ivas->nCPE; n++ )
3578 : {
3579 0 : write_indices_element_fx( st_ivas, &pt_stream, 0, n
3580 : #ifdef DBG_BITSTREAM_ANALYSIS
3581 : ,
3582 : frame
3583 : #endif
3584 : );
3585 : }
3586 :
3587 0 : *num_bits = (UWord16) ( pt_stream - bit_stream );
3588 0 : move16();
3589 :
3590 0 : return error;
3591 : }
3592 :
3593 : /*-------------------------------------------------------------------*
3594 : * decoder_selectCodec()
3595 : *
3596 : *
3597 : *-------------------------------------------------------------------*/
3598 :
3599 3100 : static void decoder_selectCodec(
3600 : Decoder_State *st, /* i/o: decoder state structure */
3601 : const Word32 total_brate, /* i : total bitrate */
3602 : const Word16 bit0 /* i : first bit */
3603 : )
3604 : {
3605 : /* set the AMR-WB IO flag */
3606 3100 : if ( rate2AMRWB_IOmode( total_brate ) != -1 )
3607 : {
3608 0 : st->Opt_AMR_WB = 1;
3609 : }
3610 3100 : else if ( total_brate != FRAME_NO_DATA )
3611 : {
3612 3100 : st->Opt_AMR_WB = 0;
3613 : }
3614 :
3615 3100 : if ( st->Opt_AMR_WB )
3616 : {
3617 0 : st->codec_mode = MODE1;
3618 : }
3619 : else
3620 : {
3621 3100 : st->codec_mode = get_codec_mode( total_brate );
3622 :
3623 3100 : if ( st->codec_mode == -1 )
3624 : {
3625 0 : switch ( total_brate )
3626 : {
3627 0 : case 0:
3628 0 : st->codec_mode = st->last_codec_mode;
3629 0 : break;
3630 0 : case 2400:
3631 0 : st->codec_mode = st->last_codec_mode;
3632 0 : break;
3633 0 : case 2800:
3634 0 : st->codec_mode = MODE1;
3635 0 : break;
3636 0 : default: /* validate that total_brate (derived from RTP packet or a file header) is one of the defined bitrates */
3637 0 : st->codec_mode = st->last_codec_mode;
3638 0 : st->bfi = 1;
3639 0 : break;
3640 : }
3641 3100 : }
3642 : }
3643 :
3644 3100 : if ( st->ini_frame == 0 )
3645 : {
3646 3 : if ( st->codec_mode == -1 )
3647 : {
3648 0 : st->codec_mode = MODE1;
3649 : }
3650 3 : st->last_codec_mode = st->codec_mode;
3651 : }
3652 :
3653 : /* set SID/CNG type */
3654 3100 : if ( total_brate == SID_2k40 )
3655 : {
3656 0 : if ( bit0 == 0 )
3657 : {
3658 0 : st->cng_type = LP_CNG;
3659 :
3660 : /* force MODE1 when selecting LP_CNG */
3661 0 : st->codec_mode = MODE1;
3662 : }
3663 0 : else if ( bit0 == 1 )
3664 : {
3665 0 : st->cng_type = FD_CNG;
3666 0 : if ( st->last_codec_mode == MODE2 && st->last_total_brate == ACELP_13k20 )
3667 : {
3668 0 : st->codec_mode = MODE1;
3669 : }
3670 : }
3671 : }
3672 :
3673 3100 : return;
3674 : }
3675 :
3676 :
3677 : /*-------------------------------------------------------------------*
3678 : * reset_elements()
3679 : *
3680 : * Simulate packet losses by reading FEC pattern from external file
3681 : *-------------------------------------------------------------------*/
3682 :
3683 788299 : Decoder_State **reset_elements(
3684 : Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
3685 : )
3686 : {
3687 : Word16 k, n;
3688 788299 : Decoder_State **sts = NULL; /* to avoid compilation warning */
3689 :
3690 1417174 : FOR( k = 0; k < st_ivas->nSCE; k++ )
3691 : {
3692 628875 : sts = st_ivas->hSCE[k]->hCoreCoder;
3693 :
3694 628875 : sts[0]->bfi = 0;
3695 628875 : sts[0]->BER_detect = 0;
3696 628875 : sts[0]->mdct_sw_enable = 0;
3697 628875 : sts[0]->mdct_sw = 0;
3698 :
3699 628875 : move16();
3700 628875 : move16();
3701 628875 : move16();
3702 628875 : move16();
3703 :
3704 628875 : reset_indices_dec( sts[0] );
3705 : }
3706 :
3707 1554221 : FOR( k = 0; k < st_ivas->nCPE; k++ )
3708 : {
3709 765922 : sts = st_ivas->hCPE[k]->hCoreCoder;
3710 :
3711 2297766 : FOR( n = 0; n < CPE_CHANNELS; n++ )
3712 : {
3713 1531844 : sts[n]->bfi = 0;
3714 1531844 : sts[n]->BER_detect = 0;
3715 1531844 : sts[n]->mdct_sw_enable = 0;
3716 1531844 : sts[n]->mdct_sw = 0;
3717 :
3718 1531844 : move16();
3719 1531844 : move16();
3720 1531844 : move16();
3721 1531844 : move16();
3722 :
3723 1531844 : reset_indices_dec( sts[n] );
3724 : }
3725 : }
3726 :
3727 788299 : return sts; /* return last decoder state */
3728 : }
3729 :
3730 : /*-------------------------------------------------------------------*
3731 : * ivas_set_bitstream_pointers()
3732 : *
3733 : * Set bitstream pointers for every SCE/CPE Core-Decoder
3734 : *-------------------------------------------------------------------*/
3735 :
3736 391414 : void ivas_set_bitstream_pointers(
3737 : Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
3738 : )
3739 : {
3740 : Word16 k, num_bits;
3741 : Decoder_State **sts;
3742 :
3743 391414 : num_bits = 0;
3744 :
3745 : /* set bitstream pointers for SCEs */
3746 705105 : for ( k = 0; k < st_ivas->nSCE; k++ )
3747 : {
3748 313691 : sts = st_ivas->hSCE[k]->hCoreCoder;
3749 313691 : sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
3750 313691 : num_bits += (Word16) ( st_ivas->hSCE[k]->element_brate / FRAMES_PER_SEC );
3751 : }
3752 :
3753 : /* set bitstream pointers for CPEs */
3754 771479 : for ( k = 0; k < st_ivas->nCPE; k++ )
3755 : {
3756 380065 : sts = st_ivas->hCPE[k]->hCoreCoder;
3757 380065 : sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
3758 380065 : num_bits += (Word16) ( st_ivas->hCPE[k]->element_brate / FRAMES_PER_SEC );
3759 : }
3760 :
3761 391414 : return;
3762 : }
3763 :
3764 :
3765 : /*-------------------------------------------------------------------*
3766 : * read_indices()
3767 : *
3768 : * Read indices from an ITU-T G.192 bitstream to the buffer
3769 : * Simulate packet losses by inserting frame erasures
3770 : *-------------------------------------------------------------------*/
3771 :
3772 : /*! r: 1 = reading OK, 0 = problem */
3773 399985 : ivas_error read_indices_fx(
3774 : Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
3775 : UWord16 bit_stream[], /* i : bitstream buffer */
3776 : UWord16 num_bits, /* i : number of bits in bitstream */
3777 : Word16 *prev_ft_speech,
3778 : Word16 *CNG,
3779 : Word16 bfi /* i : bad frame indicator */
3780 : )
3781 : {
3782 : Word16 k;
3783 : Decoder_State **sts;
3784 399985 : Word32 total_brate = 0;
3785 399985 : move32();
3786 : Word16 curr_ft_good_sp, curr_ft_bad_sp;
3787 : Word16 g192_sid_first, sid_upd_bad, sid_update;
3788 : Word16 speech_bad, speech_lost;
3789 : Word16 n;
3790 : ivas_error error;
3791 :
3792 399985 : error = IVAS_ERR_OK;
3793 399985 : move32();
3794 :
3795 399985 : st_ivas->BER_detect = 0;
3796 399985 : move16();
3797 399985 : st_ivas->num_bits = num_bits;
3798 399985 : move16();
3799 399985 : sts = reset_elements( st_ivas );
3800 :
3801 399985 : st_ivas->bfi = bfi;
3802 399985 : move16();
3803 :
3804 : /* convert the frame length to total bitrate */
3805 399985 : total_brate = imult3216( num_bits, FRAMES_PER_SEC );
3806 399985 : move32();
3807 :
3808 : /* verify that a valid num bits value is present in the G.192 file */
3809 : /* only AMRWB, EVS or IVAS bitrates or 0(NO DATA) are allowed in G.192 file frame reading */
3810 399985 : IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) )
3811 : {
3812 396885 : k = 0;
3813 396885 : move16();
3814 :
3815 396885 : test();
3816 3338374 : WHILE( LT_16( k, SIZE_IVAS_BRATE_TBL ) && NE_32( total_brate, ivas_brate_tbl[k] ) )
3817 : {
3818 2941489 : k = add( k, 1 );
3819 : }
3820 :
3821 396885 : test();
3822 396885 : test();
3823 396885 : test();
3824 396885 : test();
3825 396885 : IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && ( LT_16( k, SIZE_IVAS_BRATE_TBL ) || LE_32( total_brate, SID_2k40 ) ) )
3826 : {
3827 93770 : st_ivas->element_mode_init = IVAS_SCE;
3828 93770 : move16();
3829 : }
3830 303115 : ELSE IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) && LE_32( total_brate, SID_2k40 ) )
3831 : {
3832 3901 : st_ivas->element_mode_init = IVAS_SCE;
3833 3901 : move16();
3834 : }
3835 299214 : ELSE IF( EQ_16( k, SIZE_IVAS_BRATE_TBL ) )
3836 : {
3837 0 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate );
3838 : }
3839 : ELSE
3840 : {
3841 299214 : st_ivas->element_mode_init = -1;
3842 299214 : move16();
3843 : }
3844 : }
3845 : ELSE /* AMRWB or EVS */
3846 : {
3847 3100 : st_ivas->element_mode_init = EVS_MONO;
3848 3100 : move16();
3849 :
3850 3100 : IF( rate2EVSmode_float( total_brate, NULL ) < 0 ) /* negative value means that a valid rate was not found */
3851 : {
3852 0 : return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate );
3853 : }
3854 : }
3855 :
3856 : /* G.192 RX DTX handler*/
3857 : /* handle SID_FIRST, SID_BAD, SPEECH_LOST, NO_DATA as properly as possible for the ITU-T G.192 format */
3858 : /* (total_brate, bfi , st_CNG) = rx_handler(received frame type, [previous frame type], past CNG state, past core) */
3859 399985 : curr_ft_good_sp = 0;
3860 399985 : move16();
3861 399985 : curr_ft_bad_sp = 0;
3862 399985 : move16();
3863 :
3864 399985 : IF( is_DTXrate( total_brate ) == 0 )
3865 : {
3866 380176 : IF( st_ivas->bfi == 0 )
3867 : {
3868 372669 : curr_ft_good_sp = 1;
3869 372669 : move16();
3870 : }
3871 : ELSE
3872 : {
3873 7507 : curr_ft_bad_sp = 1;
3874 7507 : move16();
3875 : }
3876 : }
3877 :
3878 399985 : sid_update = 0;
3879 399985 : move16();
3880 399985 : sid_upd_bad = 0;
3881 399985 : move16();
3882 399985 : IF( EQ_16( is_SIDrate( total_brate ), 1 ) )
3883 : {
3884 2980 : IF( st_ivas->bfi == 0 )
3885 : {
3886 2907 : sid_update = 1;
3887 2907 : move16();
3888 : }
3889 : ELSE
3890 : {
3891 73 : sid_upd_bad = 1; /* this frame type may happen in ETSI/3GPP CS cases, a corrupt SID frames */
3892 73 : move16();
3893 : }
3894 : }
3895 :
3896 : /* all zero indices/bits iSP AMRWB SID_update results in a valid LP filter with extremely high LP-filter-gain */
3897 : /* all zero indices/bits may be a result of CS bit errors and/or erroneously injected by gateways or by a bad dejitter handlers */
3898 399985 : test();
3899 399985 : IF( EQ_32( total_brate, SID_1k75 ) && EQ_16( sid_update, 1 ) )
3900 : {
3901 : /* valid sid_update received, check for very risky but formally valid content */
3902 0 : Word16 sum = 0;
3903 0 : move16();
3904 0 : FOR( k = 0; k < num_bits; ++k )
3905 : {
3906 0 : sum = add( sum, extract_l( EQ_32( bit_stream[k], 1 ) ) ); /* check of 35 zeroes */
3907 : }
3908 0 : if ( sum == 0 )
3909 : { /* all zeros */
3910 0 : sid_upd_bad = 1; /* initial signal as corrupt (BER likely) */
3911 0 : move16();
3912 : }
3913 : }
3914 :
3915 : /* AMRWB 26.173 G.192 file reader (read_serial) does not declare/use SID_BAD ft,
3916 : it declares every bad synch marked frame initially as a lost_speech frame,
3917 : and then the RXDTX handler CNG state decides the decoding mode CNG/SPEECH.
3918 : While In the AMRWB ETSI/3GPP format eid a CRC error in a detected SID_UPDATE frames triggers SID_BAD.
3919 :
3920 : Here we inhibit use of the SID-length info, even though it is available in the G.192 file format after STL/EID-XOR .
3921 : */
3922 399985 : IF( sid_upd_bad )
3923 : {
3924 73 : sid_upd_bad = 0;
3925 73 : move16();
3926 73 : total_brate = FRAME_NO_DATA; /* treat SID_BAD as a stolen signaling frame --> SPEECH LOST */
3927 73 : move32();
3928 : }
3929 :
3930 399985 : g192_sid_first = 0;
3931 399985 : move16();
3932 :
3933 399985 : test();
3934 399985 : test();
3935 399985 : test();
3936 399985 : test();
3937 399985 : 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 )
3938 : {
3939 0 : g192_sid_first = 1; /* SID_FIRST detected for previous AMRWB/AMRWBIO active frames only */
3940 : /* It is not possible to perfectly simulate rate switching conditions EVS->AMRWBIO where:
3941 : the very first SID_FIRST detection is based on a past EVS active frame
3942 : and a good length 0 "SID_FIRST"(NO_DATA) frame is sent in AMRWBIO,
3943 : due to the one frame state memory in the AMRWB legacy G.192 SID_FIRST encoding
3944 : */
3945 0 : move16();
3946 : }
3947 :
3948 399985 : speech_bad = 0;
3949 399985 : move16();
3950 :
3951 399985 : test();
3952 399985 : if ( st_ivas->bfi != 0 && ( is_DTXrate( total_brate ) == 0 ) )
3953 : {
3954 7507 : speech_bad = 1; /* initial ft assumption, CNG_state decides what to do */
3955 7507 : move16();
3956 : }
3957 :
3958 399985 : speech_lost = 0;
3959 399985 : move16();
3960 :
3961 399985 : test();
3962 399985 : if ( total_brate == FRAME_NO_DATA && st_ivas->bfi != 0 ) /* unsent NO_DATA or stolen NO_DATA/signaling frame */
3963 : {
3964 2457 : speech_lost = 1; /* initial ft assumption, CNG_state decides what to do */
3965 2457 : move16();
3966 : }
3967 :
3968 : /* Do not allow decoder to enter CNG-synthesis for any instantly received GOOD+LENGTH==0 frame
3969 : as this frame was never transmitted, one can not know it is good and has a a length of zero ) */
3970 399985 : IF( *CNG != 0 )
3971 : {
3972 : /* We were in CNG synthesis */
3973 18675 : if ( curr_ft_good_sp != 0 )
3974 : {
3975 : /* only a good speech frame makes you leave CNG synthesis */
3976 934 : *CNG = 0;
3977 934 : move16();
3978 : }
3979 : }
3980 : ELSE
3981 : {
3982 : /* We were in SPEECH synthesis */
3983 : /* only a received/detected SID frame can make the decoder enter into CNG synthsis */
3984 381310 : test();
3985 381310 : test();
3986 381310 : if ( g192_sid_first || sid_update || sid_upd_bad )
3987 : {
3988 1010 : *CNG = 1;
3989 1010 : move16();
3990 : }
3991 : }
3992 :
3993 : /* set bfi, total_brate pair for proper decoding */
3994 : /* handle the G.192 _simulated_ untransmitted NO_DATA frame, setting for decoder SPEECH synthesis */
3995 399985 : test();
3996 399985 : test();
3997 399985 : if ( *CNG == 0 && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 )
3998 : {
3999 80 : st_ivas->bfi = 1; /* SPEECH PLC code will now become active as in a real system */
4000 : /* total_brate= 0 */
4001 80 : move16();
4002 : }
4003 :
4004 : /* handle bad/lost speech frame(and CS bad SID frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */
4005 399985 : test();
4006 399985 : test();
4007 399985 : test();
4008 399985 : test();
4009 399985 : IF( (
4010 : NE_16( bfi, FRAMEMODE_FUTURE ) &&
4011 : ( *CNG != 0 ) && ( ( speech_bad != 0 ) || ( speech_lost != 0 ) ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */
4012 : ( sid_upd_bad != 0 ) ) /* SID_UPD_BAD --> start CNG */
4013 : {
4014 1479 : st_ivas->bfi = 0; /* bfi=0 needed to activate CNG code */
4015 1479 : move16();
4016 1479 : total_brate = FRAME_NO_DATA;
4017 1479 : move32();
4018 : }
4019 :
4020 : /* update for next frame's G.192 file format's odd SID_FIRST detection (primarily for AMRWBIO) */
4021 399985 : test();
4022 399985 : *prev_ft_speech = ( ( curr_ft_good_sp != 0 ) || ( curr_ft_bad_sp != 0 ) );
4023 399985 : move16();
4024 :
4025 : /* st->total brate= total_brate; updated in a good frame below */
4026 :
4027 785842 : FOR( k = 0; k < st_ivas->nCPE; k++ )
4028 : {
4029 385857 : sts = st_ivas->hCPE[k]->hCoreCoder;
4030 1157571 : FOR( n = 0; n < CPE_CHANNELS; n++ )
4031 : {
4032 771714 : sts[n]->bfi = st_ivas->bfi;
4033 771714 : move16();
4034 : }
4035 : }
4036 :
4037 718269 : FOR( k = 0; k < st_ivas->nSCE; k++ )
4038 : {
4039 318284 : sts = st_ivas->hSCE[k]->hCoreCoder;
4040 318284 : sts[0]->bfi = st_ivas->bfi;
4041 318284 : move16();
4042 : }
4043 :
4044 399985 : IF( st_ivas->bfi == 0 )
4045 : {
4046 : /* select Mode 1 or Mode 2 */
4047 391420 : IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) /* EVS mono */
4048 : {
4049 3100 : decoder_selectCodec( sts[0], total_brate, bit_stream[0] );
4050 3100 : st_ivas->hDecoderConfig->Opt_AMR_WB = sts[0]->Opt_AMR_WB;
4051 3100 : move16();
4052 : }
4053 : ELSE /* IVAS */
4054 : {
4055 388320 : st_ivas->codec_mode = MODE1;
4056 388320 : move16();
4057 388320 : st_ivas->hDecoderConfig->Opt_AMR_WB = 0;
4058 388320 : move16();
4059 : }
4060 : }
4061 :
4062 : /* GOOD frame */
4063 399985 : test();
4064 399985 : if ( st_ivas->bfi == 0 || EQ_16( st_ivas->bfi, FRAMEMODE_FUTURE ) )
4065 : {
4066 : /* GOOD frame - convert ITU-T G.192 words to short values */
4067 391420 : st_ivas->hDecoderConfig->ivas_total_brate = total_brate;
4068 391420 : move32();
4069 : }
4070 :
4071 399985 : st_ivas->bit_stream = bit_stream;
4072 :
4073 399985 : IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) )
4074 : {
4075 3100 : ivas_set_bitstream_pointers( st_ivas );
4076 : }
4077 :
4078 399985 : return error;
4079 : }
4080 : #undef WMC_TOOL_SKIP
|