LCOV - code coverage report
Current view: top level - lib_com - bitstream_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main -- dec/rend @ 633e3f2e309758d10805ef21e0436356fe719b7a Lines: 470 1300 36.2 %
Date: 2025-08-23 01:22:27 Functions: 25 45 55.6 %

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

Generated by: LCOV version 1.14