diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj
index 8e37844b9a69e8b386dcd0cd8576f99396bf96fd..6c57d317032c5782d19194496ff34c94360294a9 100644
--- a/Workspace_msvc/lib_com.vcxproj
+++ b/Workspace_msvc/lib_com.vcxproj
@@ -132,7 +132,6 @@
-
diff --git a/Workspace_msvc/lib_com.vcxproj.filters b/Workspace_msvc/lib_com.vcxproj.filters
index f247d199eba36b4b9c2e75593421e64bfdf9a25a..4996023dc7d526d432f3d72194c48f4ff900a726 100644
--- a/Workspace_msvc/lib_com.vcxproj.filters
+++ b/Workspace_msvc/lib_com.vcxproj.filters
@@ -1,646 +1,217 @@
-
+
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_evs_c
-
-
- common_all_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_evs_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_ivas_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_ivas_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_all_c
-
-
- common_ivas_c
-
-
-
- common_ivas_c
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
-
- common_h
-
+
+
+
+
+
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
- common_h
-
-
-
-
- {890c2f45-9385-4fce-859b-6a65469e8dc0}
-
-
- {201ea764-9626-4dca-9cc4-5b4106f8b8b2}
-
-
- {fbb860e2-79d0-45b1-ada1-c3a0a369ce2c}
-
-
- {b95b7bed-a666-4a00-9332-2b528638503e}
-
+
\ No newline at end of file
diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c
deleted file mode 100644
index 5b11e8d263f1a6e7aadbc35d95a7e33f6c173ccf..0000000000000000000000000000000000000000
--- a/lib_com/bitstream.c
+++ /dev/null
@@ -1,4052 +0,0 @@
-/******************************************************************************************************
-
- (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
- Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
- Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
- Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
- contributors to this repository. All Rights Reserved.
-
- This software is protected by copyright law and by international treaties.
- The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
- Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
- Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
- Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
- contributors to this repository retain full ownership rights in their respective contributions in
- the software. This notice grants no license of any kind, including but not limited to patent
- license, nor is any license granted by implication, estoppel or otherwise.
-
- Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
- contributions.
-
- This software is provided "AS IS", without any express or implied warranties. The software is in the
- development stage. It is intended exclusively for experts who have experience with such software and
- solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
- and fitness for a particular purpose are hereby disclaimed and excluded.
-
- Any dispute, controversy or claim arising under or in relation to providing this software shall be
- submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
- accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
- the United Nations Convention on Contracts on the International Sales of Goods.
-
-*******************************************************************************************************/
-
-/*====================================================================================
- EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
- ====================================================================================*/
-
-#include
-#include
-#include "options.h"
-#include "cnst.h"
-#include "prot_fx.h"
-#include "stat_enc.h"
-#include "stat_dec.h"
-#include "rom_com.h"
-#include "mime.h"
-#include "ivas_cnst.h"
-#include "ivas_rom_com.h"
-#include "wmc_auto.h"
-#include "ivas_prot_fx.h"
-#include "prot_fx_enc.h"
-#ifdef DEBUGGING
-#include "debug.h"
-#ifdef DBG_BITSTREAM_ANALYSIS
-#include
-#endif
-#endif
-
-#define STEP_MAX_NUM_INDICES 100 /* increase the maximum number of allowed indices in the list by this amount */
-
-
-/*-------------------------------------------------------------------*
- * rate2AMRWB_IOmode()
- *
- * lookup AMRWB IO mode
- *-------------------------------------------------------------------*/
-
-static Word16 rate2AMRWB_IOmode(
- Word32 brate /* i : bitrate */
-)
-{
- switch ( brate )
- {
- /* EVS AMR-WB IO modes */
- case SID_1k75:
- return AMRWB_IO_SID;
- case ACELP_6k60:
- return AMRWB_IO_6600;
- case ACELP_8k85:
- return AMRWB_IO_8850;
- case ACELP_12k65:
- return AMRWB_IO_1265;
- case ACELP_14k25:
- return AMRWB_IO_1425;
- case ACELP_15k85:
- return AMRWB_IO_1585;
- case ACELP_18k25:
- return AMRWB_IO_1825;
- case ACELP_19k85:
- return AMRWB_IO_1985;
- case ACELP_23k05:
- return AMRWB_IO_2305;
- case ACELP_23k85:
- return AMRWB_IO_2385;
- default:
- break;
- }
-
- return -1;
-}
-
-/*-------------------------------------------------------------------*
- * rate2EVSmode()
- *
- * lookup EVS mode
- *-------------------------------------------------------------------*/
-Word16 rate2EVSmode_float(
- const Word32 brate, /* i : bitrate */
- Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
-)
-{
- if ( is_amr_wb != NULL )
- {
- *is_amr_wb = 0;
- }
-
- switch ( brate )
- {
- /* EVS Primary modes */
- case FRAME_NO_DATA:
- return NO_DATA_TYPE;
- case SID_2k40:
- return PRIMARY_SID;
- case PPP_NELP_2k80:
- return PRIMARY_2800;
- case ACELP_7k20:
- return PRIMARY_7200;
- case ACELP_8k00:
- return PRIMARY_8000;
- case ACELP_9k60:
- return PRIMARY_9600;
- case ACELP_13k20:
- return PRIMARY_13200;
- case ACELP_16k40:
- return PRIMARY_16400;
- case ACELP_24k40:
- return PRIMARY_24400;
- case ACELP_32k:
- return PRIMARY_32000;
- case ACELP_48k:
- return PRIMARY_48000;
- case ACELP_64k:
- return PRIMARY_64000;
- case HQ_96k:
- return PRIMARY_96000;
- case HQ_128k:
- return PRIMARY_128000;
- default:
- break;
- }
-
- if ( is_amr_wb != NULL )
- {
- *is_amr_wb = 1;
- }
-
- return rate2AMRWB_IOmode( brate );
-}
-
-/*-------------------------------------------------------------------*
- * ind_list_realloc()
- *
- * Re-allocate the list of indices
- *-------------------------------------------------------------------*/
-
-ivas_error ind_list_realloc(
- INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */
- const Word16 max_num_indices, /* i : new maximum number of allowed indices in the list */
- Encoder_Struct *st_ivas /* i : IVAS encoder structure */
-)
-{
- Word16 i, n, ch, n_channels, ind_list_pos, is_metadata, ivas_max_num_indices;
- INDICE_HANDLE new_ind_list;
- BSTR_ENC_HANDLE hBstr;
-
- IF( st_ivas == NULL )
- {
- return IVAS_ERR_OK;
- }
-
- /* get the pointer to the beginning of the old buffer of indices (either metadata or core coders) */
- IF( old_ind_list == st_ivas->ind_list_metadata )
- {
- is_metadata = 1;
- ivas_max_num_indices = st_ivas->ivas_max_num_indices_metadata;
- }
- ELSE
- {
- is_metadata = 0;
- ivas_max_num_indices = st_ivas->ivas_max_num_indices;
- }
- move16();
- move16();
-
- /* allocate new buffer of indices */
- IF( ( new_ind_list = (INDICE_HANDLE) malloc( max_num_indices * sizeof( Indice ) ) ) == NULL )
- {
- return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) );
- }
-
- /* move indices from the old list to the new list */
- FOR( i = 0; i < s_min( max_num_indices, ivas_max_num_indices ); i++ )
- {
- IF( GT_16( old_ind_list[i].nb_bits, -1 ) )
- {
- new_ind_list[i].id = old_ind_list[i].id;
- new_ind_list[i].value = old_ind_list[i].value;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
-#endif
- move16();
- move16();
- }
- new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
- move16();
- }
-
- /* reset nb_bits of all other indices to -1 */
- FOR( ; i < max_num_indices; i++ )
- {
- new_ind_list[i].nb_bits = -1;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- sprintf( new_ind_list[i].function_name, "RESET in ind_list_realloc" );
-#endif
- move16();
- }
-
- /* update parameters in all SCE elements */
- FOR( n = 0; n < st_ivas->nSCE; n++ )
- {
- /* get the pointer to hBstr */
- IF( is_metadata )
- {
- hBstr = st_ivas->hSCE[n]->hMetaData;
- }
- ELSE
- {
- hBstr = st_ivas->hSCE[n]->hCoreCoder[0]->hBstr;
- }
-
- IF( hBstr != NULL )
- {
- /* get the current position inside the old list */
- ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
-
- /* set pointers in the new list */
- *( hBstr->ivas_ind_list_zero ) = new_ind_list;
- hBstr->ind_list = &new_ind_list[ind_list_pos];
-
- /* set the new maximum number of indices */
- *( hBstr->ivas_max_num_indices ) = max_num_indices;
- move16();
- }
- }
-
- /* update parameters in all CPE elements */
- FOR( n = 0; n < st_ivas->nCPE; n++ )
- {
- /* get the pointer to hBstr */
- IF( is_metadata )
- {
- n_channels = 1;
- }
- ELSE
- {
- n_channels = CPE_CHANNELS;
- }
- move16();
-
- FOR( ch = 0; ch < n_channels; ch++ )
- {
- IF( is_metadata )
- {
- hBstr = st_ivas->hCPE[n]->hMetaData;
- }
- ELSE
- {
- hBstr = st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr;
- }
-
- IF( hBstr != NULL )
- {
- /* get the current position inside the old list */
- ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
-
- /* set pointers in the new list */
- *( hBstr->ivas_ind_list_zero ) = new_ind_list;
- hBstr->ind_list = &new_ind_list[ind_list_pos];
-
- /* set the new maximum number of indices */
- *( hBstr->ivas_max_num_indices ) = max_num_indices;
- move16();
- }
- }
- }
-
- /* free the old list */
- free( old_ind_list );
-
- return IVAS_ERR_OK;
-}
-
-
-/*-----------------------------------------------------------------------*
- * get_ivas_max_num_indices()
- *
- * Get the maximum allowed number of indices in the encoder
- *-----------------------------------------------------------------------*/
-
-/*! r: maximum number of indices */
-Word16 get_ivas_max_num_indices_fx(
- const IVAS_FORMAT ivas_format, /* i : IVAS format */
- const Word32 ivas_total_brate /* i : IVAS total bitrate */
-)
-{
- test();
- test();
- IF( EQ_16( ivas_format, STEREO_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 300;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 450;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 650;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 750;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 850;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 950;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1350;
- }
- ELSE
- {
- return 1650;
- }
- }
- ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) || EQ_16( ivas_format, MONO_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 250;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 350;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 450;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 550;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
- {
- return 620;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 670;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
- {
- return 780;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 880;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 950;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1100;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1300;
- }
- ELSE
- {
- return 1650;
- }
- }
- ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 250;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 350;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 650;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 750;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 1020;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 1160;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 1220;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1300;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1720;
- }
- ELSE
- {
- return 2000;
- }
- }
- ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 300;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 650;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 750;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 850;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 950;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1150;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1450;
- }
- ELSE
- {
- return 1650;
- }
- }
- ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 300;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 650;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 750;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 1150;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 1250;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1650;
- }
- ELSE
- {
- return 1850;
- }
- }
- ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 250;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 350;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 400;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 650;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
- {
- return 750;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
- {
- return 850;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 1150;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 1420;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 2120;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 2250;
- }
- ELSE
- {
- return 2450;
- }
- }
-
- return 2450;
-}
-/*-----------------------------------------------------------------------*
- * get_BWE_max_num_indices()
- *
- * Get the maximum number of indices in the BWE
- *-----------------------------------------------------------------------*/
-
-/*! r: maximum number of indices */
-Word16 get_BWE_max_num_indices(
- const Word32 extl_brate /* i : extensiona layer bitrate */
-)
-{
- /* set the maximum number of indices in the BWE */
- if ( extl_brate < SWB_BWE_16k )
- {
- return 30;
- }
- else
- {
- return 150;
- }
-}
-
-
-/*-----------------------------------------------------------------------*
- * get_ivas_max_num_indices_metadata()
- *
- * Set the maximum allowed number of metadata indices in the list
- *-----------------------------------------------------------------------*/
-
-/*! r: maximum number of indices */
-Word16 get_ivas_max_num_indices_metadata_fx(
- const IVAS_FORMAT ivas_format, /* i : IVAS format */
- const Word32 ivas_total_brate /* i : IVAS total bitrate */
-)
-{
- /* set the maximum required number of metadata indices */
- test();
- IF( EQ_16( ivas_format, MONO_FORMAT ) )
- {
- return 0;
- }
- ELSE IF( EQ_16( ivas_format, STEREO_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 60;
- }
- ELSE
- {
- return 80;
- }
- }
- ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 20;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 65;
- }
- ELSE
- {
- return 80;
- }
- }
- ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 100;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 200;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 300;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 500;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 1050;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 2000;
- }
- ELSE
- {
- return 2500;
- }
- }
- ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 80;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 125;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 205;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
- {
- return 240;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 305;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 425;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 630;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 850;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1000;
- }
- ELSE
- {
- return 1750;
- }
- }
- ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
- {
- return 80;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
- {
- return 125 + 100;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
- {
- return 205 + 100;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
- {
- return 240 + 150;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
- {
- return 305 + 30;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
- {
- return 425 + 30;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
- {
- return 630 + 30;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
- {
- return 850 + 30;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
- {
- return 1000 + 30;
- }
- ELSE
- {
- return 1750 + 30;
- }
- }
- ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
- {
- IF( LE_32( ivas_total_brate, IVAS_13k2 ) )
- {
- return 80;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
- {
- return 100;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
- {
- return 210;
- }
- ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
- {
- return 220;
- }
- ELSE
- {
- return 300;
- }
- }
-
- return 50;
-}
-/*-------------------------------------------------------------------*
- * move_indices()
- *
- * Move indices inside the buffer or among two buffers
- *-------------------------------------------------------------------*/
-
-void move_indices(
- INDICE_HANDLE old_ind_list, /* i/o: old location of indices */
- INDICE_HANDLE new_ind_list, /* i/o: new location of indices */
- const Word16 nb_indices /* i : number of moved indices */
-)
-{
- Word16 i;
-
- if ( new_ind_list < old_ind_list )
- {
- for ( i = 0; i < nb_indices; i++ )
- {
- new_ind_list[i].id = old_ind_list[i].id;
- new_ind_list[i].value = old_ind_list[i].value;
- new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
-
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
-#endif
- old_ind_list[i].nb_bits = -1;
- }
- }
- else if ( new_ind_list > old_ind_list )
- {
- for ( i = nb_indices - 1; i >= 0; i-- )
- {
- new_ind_list[i].id = old_ind_list[i].id;
- new_ind_list[i].value = old_ind_list[i].value;
- new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
-#endif
-
- old_ind_list[i].nb_bits = -1;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- sprintf( old_ind_list[i].function_name, "RESET in move_indices" );
-#endif
- }
- }
-
- return;
-}
-
-
-/*-------------------------------------------------------------------*
- * check_ind_list_limits()
- *
- * Check, if the maximum number of indices has been reached -> reallocate
- * Check, if we will not overwrite an existing indice -> adjust the location
- *-------------------------------------------------------------------*/
-
-ivas_error check_ind_list_limits(
- BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */
-)
-{
- Indice *ivas_ind_list_zero, *ivas_ind_list_last;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
- ivas_ind_list_zero = *( hBstr->ivas_ind_list_zero );
-
- /* check, if the maximum number of indices has been reached and re-allocate the buffer */
- /* the re-allocation can be avoided by increasing the limits in get_ivas_max_num_indices() or get_ivas_max_num_indices_metadata() */
- IF( GE_16( (Word16) ( &hBstr->ind_list[hBstr->nb_ind_tot] - ivas_ind_list_zero ), *( hBstr->ivas_max_num_indices ) ) )
- {
-
- /* reallocate the buffer of indices with increased limit */
- 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 ) )
- {
- return error;
- }
- }
-
- /* check, if we will not overwrite an existing indice */
- IF( hBstr->ind_list[hBstr->nb_ind_tot].nb_bits > 0 )
- {
- IF( hBstr->nb_ind_tot == 0 )
- {
- /* move the pointer to the next available empty slot */
- ivas_ind_list_last = &ivas_ind_list_zero[*( hBstr->ivas_max_num_indices )];
- WHILE( hBstr->ind_list[0].nb_bits > 0 && hBstr->ind_list < ivas_ind_list_last )
- {
- hBstr->ind_list++;
- }
-
- IF( hBstr->ind_list >= ivas_ind_list_last )
- {
-
- /* no available empty slot -> need to re-allocate the buffer */
- 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 ) )
- {
- return error;
- }
- }
- }
- ELSE
- {
-#ifdef DEBUGGING
- 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 );
-#else
- 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 );
-#endif
- }
- }
-
- return error;
-}
-
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
-const char *named_indices_table[] = {
- "IND_IVAS_FORMAT",
- "IND_SMODE_OMASA",
- "IND_SMODE",
- "IND_SID_TYPE",
- "IND_BWIDTH",
- "IND_CORE",
- "IND_PPP_NELP_MODE",
- "IND_ACELP_16KHZ",
- "IND_ACELP_SIGNALLING",
- "IND_SHARP_FLAG",
- "IND_MDCT_CORE",
- "IND_TCX_CORE",
- "IND_BWE_FLAG",
- "IND_HQ_SWITCHING_FLG",
- "IND_LAST_L_FRAME",
- "IND_VAD_FLAG",
- "IND_HQ_BWIDTH",
- "IND_TC_SUBFR",
- "IND_TC_SUBFR",
- "IND_TC_SUBFR",
- "IND_TC_SUBFR",
- "IND_GSC_IVAS_SP",
- "IND_LSF_PREDICTOR_SELECT_BIT",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_LSF",
- "IND_MID_FRAME_LSF_INDEX",
- "IND_ISF_0_0",
- "IND_ISF_0_1",
- "IND_ISF_0_2",
- "IND_ISF_0_3",
- "IND_ISF_0_4",
- "IND_ISF_1_0",
- "IND_ISF_1_1",
- "IND_ISF_1_2",
- "IND_ISF_1_3",
- "IND_ISF_1_4",
- "IND_IC_LSF_PRED",
- "IND_GSC_ATTACK",
- "IND_GSC_SWB_SPEECH",
- "IND_NOISE_LEVEL",
- "IND_HF_NOISE",
- "IND_PIT_CONTR_IDX",
- "IND_FEC_CLAS",
- "IND_FEC_ENR",
- "IND_FEC_POS",
- "IND_ES_PRED",
- "IND_HARM_FLAG_ACELP",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "IND_ALG_CDBK_4T64_2_24KBIT",
- "TAG_ALG_CDBK_4T64_24KBIT_END",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "IND_HF_GAIN_MODIFICATION",
- "TAG_ACELP_SUBFR_LOOP_END",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_MEAN_GAIN2",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_TMP",
- "IND_Y_GAIN_HF",
- "IND_HQ_VOICING_FLAG",
- "IND_HQ_SWB_CLAS",
- "IND_NF_IDX",
- "IND_LC_MODE",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_YNRM",
- "IND_SWB_FENV_HQ",
- "IND_SWB_FENV_HQ",
- "IND_SWB_FENV_HQ",
- "IND_SWB_FENV_HQ",
- "IND_SWB_FENV_HQ",
- "IND_FB_FENV_HQ",
- "IND_FB_FENV_HQ",
- "IND_FB_FENV_HQ",
- "IND_FB_FENV_HQ",
- "IND_FB_FENV_HQ",
- "IND_DELTA_ENV_HQ",
- "IND_HVQ_BWE_NL",
- "IND_HVQ_BWE_NL",
- "IND_NUM_PEAKS",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_POS_IDX",
- "IND_FLAGN",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_PG_IDX",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_PEAKS",
- "IND_HVQ_NF_GAIN",
- "IND_HVQ_NF_GAIN",
- "IND_HQ2_SWB_CLAS",
- "IND_HQ2_DENG_MODE",
- "IND_HQ2_DENG_8SMODE",
- "IND_HQ2_DENG_8SMODE_N0",
- "IND_HQ2_DENG_8SMODE_N1",
- "IND_HQ2_DENG_8SPOS",
- "IND_HQ2_DENG_8SDEPTH",
- "IND_HQ2_DENG_HMODE",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_DIFF_ENERGY",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_P2A_FLAGS",
- "IND_HQ2_LAST_BA_MAX_BAND",
- "IND_HQ2_LAST_BA_MAX_BAND",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_START",
- "IND_RC_END",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_HVQ_PVQ_GAIN",
- "IND_NOISINESS",
- "IND_ENERGY",
- "IND_CNG_HO",
- "IND_SID_BW",
- "IND_CNG_ENV1",
- "IND_WB_FENV",
- "IND_WB_CLASS",
- "IND_IG1",
- "IND_IG2A",
- "IND_IG2B",
- "IND_NELP_FID",
- "IND_DELTALAG",
- "IND_POWER",
- "IND_AMP0",
- "IND_AMP1",
- "IND_GLOBAL_ALIGNMENT",
- "IND_PVQ_FINE_GAIN",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_UV_FLAG",
- "IND_SHB_SUBGAIN",
- "IND_SHB_FRAMEGAIN",
- "IND_STEREO_ICBWE_MSFLAG",
- "IND_SHB_ENER_SF",
- "IND_SHB_RES_GS",
- "IND_SHB_RES_GS",
- "IND_SHB_RES_GS",
- "IND_SHB_RES_GS",
- "IND_SHB_RES_GS",
- "IND_SHB_VF",
- "IND_SHB_LSF",
- "IND_SHB_LSF",
- "IND_SHB_LSF",
- "IND_SHB_LSF",
- "IND_SHB_LSF",
- "IND_SHB_MIRROR",
- "IND_SHB_GRID",
- "IND_SWB_CLASS",
- "IND_SWB_TENV",
- "IND_SWB_TENV",
- "IND_SWB_TENV",
- "IND_SWB_TENV",
- "IND_SWB_FENV",
- "IND_SWB_FENV",
- "IND_SWB_FENV",
- "IND_SWB_FENV",
- "IND_SHB_CNG_GAIN",
- "IND_DITHERING",
- "IND_FB_SLOPE",
- "IND_HQ2_SPT_SHORTEN",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_TCQ",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_SUBBAND_GAIN",
- "IND_HQ2_DUMMY",
- "IND_LAGINDICES",
- "IND_NOISEG",
- "IND_AUDIO_GAIN",
- "IND_AUDIO_DELAY",
- "IND_AUDIO_DELAY",
- "IND_AUDIO_DELAY",
- "IND_AUDIO_DELAY",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "IND_NQ2",
- "TAG_HR_BWE_LOOP_END",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_CELP_SUBFRAME",
- "IND_CORE_SWITCHING_AUDIO_DELAY",
- "IND_CORE_SWITCHING_AUDIO_GAIN",
- "IND_STEREO_ICBWE_REF",
- "IND_STEREO_ICBWE_SP",
- "IND_STEREO_ICBWE_GS",
- "IND_STEREO_REFCHAN",
- "IND_STEREO_CORRSTATS",
- "IND_STEREO_GD",
- "IND_STEREO_LRTD_FLAG",
- "IND_STEREO_LPC_REUSE",
- "IND_STEREO_TD_ALPHA",
- "IND_STEREO_2ND_CODER_T",
- "IND_UNUSED"
-};
-#endif
-
-
-/*-------------------------------------------------------------------*
- * push_indice()
- *
- * Push a new indice into the buffer
- *-------------------------------------------------------------------*/
-
-ivas_error push_indice(
- BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
- Word16 id, /* i : ID of the indice */
- UWord16 value, /* i : value of the quantized indice */
- Word16 nb_bits /* i : number of bits used to quantize the indice */
-)
-{
- Word16 i;
- Word16 j;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
- /* check the limits of the list of indices */
- IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
- {
-#ifdef DEBUGGING
- return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices (frame %d) !\n", frame );
-#else
- return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices!\n" );
-#endif
- }
-
- /* find the location in the list of indices based on ID */
- i = hBstr->nb_ind_tot;
- move16();
- test();
- WHILE( i > 0 && ( id < hBstr->ind_list[i - 1].id ) )
- {
- test();
- i = sub( i, 1 );
- }
-
- /* shift indices, if the new ID is to be written somewhere inside the list */
- IF( i < hBstr->nb_ind_tot )
- {
- FOR( j = hBstr->nb_ind_tot; j > i; j-- )
- {
- hBstr->ind_list[j].id = hBstr->ind_list[j - 1].id;
- hBstr->ind_list[j].nb_bits = hBstr->ind_list[j - 1].nb_bits;
- hBstr->ind_list[j].value = hBstr->ind_list[j - 1].value;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[j - 1].function_name, 100 );
-#endif
- move16();
- move16();
- move16();
- }
- }
-
-
- /* store the new indice in the list */
- hBstr->ind_list[i].id = id;
- hBstr->ind_list[i].value = value;
- hBstr->ind_list[i].nb_bits = nb_bits;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( hBstr->ind_list[i].function_name, named_indices_table[id], 100 );
-#endif
- move16();
- move16();
- move16();
-
- /* updates */
- hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
- hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
- move16();
- move16();
-
- return error;
-}
-
-/*-------------------------------------------------------------------*
- * push_next_indice()
- *
- * Push a new indice into the buffer at the next position
- *-------------------------------------------------------------------*/
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
-ivas_error push_next_indice_(
- const char *caller,
-#else
-ivas_error push_next_indice(
-#endif
- BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
- UWord16 value, /* i : value of the quantized indice */
- Word16 nb_bits /* i : number of bits used to quantize the indice */
-)
-{
- Word16 prev_id;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
-
- /* check the limits of the list of indices */
- IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
- {
- return error;
- }
-
- /* get the id of the previous indice -> it will be re-used */
- IF( hBstr->nb_ind_tot > 0 )
- {
- prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
- }
- ELSE
- {
- prev_id = 0;
- }
- move16();
-
- /* store the values in the list */
- hBstr->ind_list[hBstr->nb_ind_tot].id = prev_id;
- hBstr->ind_list[hBstr->nb_ind_tot].value = value;
- hBstr->ind_list[hBstr->nb_ind_tot].nb_bits = nb_bits;
- move16();
- move16();
- move16();
-
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( hBstr->ind_list[hBstr->nb_ind_tot].function_name, caller, 100 );
-#endif
-
- /* updates */
- hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
- hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
- move16();
- move16();
-
- return error;
-}
-
-/*-------------------------------------------------------------------*
- * push_next_bits()
- * Push a bit buffer into the buffer at the next position
- *-------------------------------------------------------------------*/
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
-ivas_error push_next_bits_(
- const char *caller,
-#else
-ivas_error push_next_bits(
-#endif
- BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
- const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */
- const Word16 nb_bits /* i : number of bits to pack */
-)
-{
- UWord16 code;
- Word16 i, nb_bits_m15;
- Indice *ptr;
- Word16 prev_id;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
- ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
-
- /* get the id of the previous indice -> will be re-used */
- IF( hBstr->nb_ind_tot > 0 )
- {
- prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
- move16();
- }
- ELSE
- {
- prev_id = 0;
- move16();
- }
- nb_bits_m15 = sub( nb_bits, 15 );
-
- FOR( i = 0; i < nb_bits_m15; i += 16 )
- {
- 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] ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
-
- /* check the limits of the list of indices */
- IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
- {
-#ifdef DEBUGGING
- return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
-#else
- return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
-#endif
- }
- ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
-
- ptr->value = code;
- ptr->nb_bits = 16;
- ptr->id = prev_id;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( ptr->function_name, caller, 100 );
-#endif
- hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
- move16();
- move16();
- move16();
- move16();
-
- ++ptr;
- }
-
- FOR( ; i < nb_bits; ++i )
- {
- /* check the limits of the list of indices */
- IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
- {
-#ifdef DEBUGGING
- return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
-#else
- return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
-#endif
- }
- ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
-
- ptr->value = bits[i];
- ptr->nb_bits = 1;
- ptr->id = prev_id;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( ptr->function_name, caller, 100 );
-#endif
- hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
- move16();
- move16();
- move16();
- move16();
-
- ++ptr;
- }
-
- hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
- move16();
-
- return error;
-}
-
-/*-------------------------------------------------------------------*
- * find_indice()
- *
- * Find indice based on its id
- *-------------------------------------------------------------------*/
-
-/*! r: result: index of the indice in the list, -1 if not found */
-Word16 find_indice(
- BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
- const Word16 id, /* i : ID of the indice */
- UWord16 *value, /* o : value of the quantized indice */
- Word16 *nb_bits /* o : number of bits used to quantize the indice */
-)
-{
- Word16 i;
-
- for ( i = 0; i < hBstr->nb_ind_tot; i++ )
- {
- if ( hBstr->ind_list[i].id == id && hBstr->ind_list[i].nb_bits > 0 )
- {
- *value = hBstr->ind_list[i].value;
- *nb_bits = hBstr->ind_list[i].nb_bits;
- return i;
- }
- }
-
- return -1;
-}
-
-
-/*-------------------------------------------------------------------*
- * delete_indice()
- *
- * Delete indice based on its id (note, that nb_ind_tot and nb_bits_tot are updated)
- *-------------------------------------------------------------------*/
-
-/*! r: number of deleted indices */
-UWord16 delete_indice(
- BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
- const Word16 id /* i : ID of the indice */
-)
-{
- Word16 i, j;
-
- j = 0;
- for ( i = 0; i < hBstr->nb_ind_tot; i++ )
- {
- if ( hBstr->ind_list[i].id == id )
- {
- hBstr->nb_bits_tot -= hBstr->ind_list[i].nb_bits;
- continue;
- }
-
- if ( j < i )
- {
- /* shift the indice left */
- hBstr->ind_list[j].id = hBstr->ind_list[i].id;
- hBstr->ind_list[j].value = hBstr->ind_list[i].value;
- hBstr->ind_list[j].nb_bits = hBstr->ind_list[i].nb_bits;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[i].function_name, 100 );
-#endif
- }
-
- j++;
- }
-
- hBstr->nb_ind_tot = j;
-
- for ( ; j < i; j++ )
- {
- /* reset the shifted indices at the end of the list */
- hBstr->ind_list[j].nb_bits = -1;
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- sprintf( hBstr->ind_list[j].function_name, "RESET in delete_indice" );
-#endif
- }
-
- return i - j;
-}
-
-
-/*-------------------------------------------------------------------*
- * get_next_indice()
- *
- * Get the next indice from the buffer
- *-------------------------------------------------------------------*/
-
-/*! r: value of the indice */
-UWord16 get_next_indice(
- Decoder_State *st, /* i/o: decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
-)
-{
- UWord16 value;
- Word16 i;
- Word32 nbits_total;
-
- assert( nb_bits <= 16 );
-
- nbits_total = st->total_brate / FRAMES_PER_SEC;
- /* detect corrupted bitstream */
- if ( st->next_bit_pos + nb_bits > nbits_total )
- {
- st->BER_detect = 1;
- return ( 0 );
- }
-
- value = 0;
- for ( i = 0; i < nb_bits; i++ )
- {
- value <<= 1;
- value += st->bit_stream[st->next_bit_pos + i];
- }
-
- /* update the position in the bitstream */
- st->next_bit_pos += nb_bits;
-
- return value;
-}
-
-/*-------------------------------------------------------------------*
- * get_next_indice_tmp()
- *
- * update the total number of bits and the position in the bitstream
- *-------------------------------------------------------------------*/
-
-void get_next_indice_tmp(
- Decoder_State *st, /* o : decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
-)
-{
- /* update the position in the bitstream */
- st->next_bit_pos += nb_bits;
-
- return;
-}
-
-/*-------------------------------------------------------------------*
- * get_indice()
- *
- * Get indice at specific position in the buffer
- *-------------------------------------------------------------------*/
-
-/*! r: value of the indice */
-UWord16 get_indice(
- Decoder_State *st, /* i/o: decoder state structure */
- Word16 pos, /* i : absolute position in the bitstream (update after the read) */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
-)
-{
- UWord16 value;
- Word16 i;
- Word32 nbits_total;
-
- assert( nb_bits <= 16 );
-
- nbits_total = st->total_brate / FRAMES_PER_SEC;
-
- /* detect corrupted bitstream */
- if ( pos + nb_bits > nbits_total )
- {
- st->BER_detect = 1;
- return ( 0 );
- }
-
- value = 0;
- for ( i = 0; i < nb_bits; i++ )
- {
- value <<= 1;
- value += st->bit_stream[pos + i];
- }
- return value;
-}
-
-/*-------------------------------------------------------------------*
- * get_indice_st()
- *
- * Get indice at specific position in the buffer
- *-------------------------------------------------------------------*/
-
-/*! r: value of the indice */
-UWord16 get_indice_st(
- Decoder_State *st, /* i/o: decoder state structure */
- const Word32 element_brate, /* i : element bitrate */
- const Word16 pos, /* i : absolute position in the bitstream */
- const Word16 nb_bits /* i : number of bits to quantize the indice */
-)
-{
- UWord16 value;
- Word16 i;
-
- assert( nb_bits <= 16 );
-
- /* detect corrupted bitstream */
- IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), Mpy_32_32( element_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ) )
- {
- st->BER_detect = 1;
- move16();
- return ( 0 );
- }
-
- value = 0;
- move16();
- FOR( i = 0; i < nb_bits; i++ )
- {
- value = shl( value, 1 );
- value = add( value, st->bit_stream[pos + i] );
- }
-
- return value;
-}
-#define WMC_TOOL_SKIP
-
-/*-------------------------------------------------------------------*
- * reset_indices_dec()
- *
- * Reset the buffer of decoder indices
- *-------------------------------------------------------------------*/
-void reset_indices_dec(
- Decoder_State *st )
-{
- st->next_bit_pos = 0;
- move16();
-
- return;
-}
-/*-------------------------------------------------------------------*
- * write_indices_to_stream()
- *
- * writing forward or backward to a serial stream
- *-------------------------------------------------------------------*/
-static Word16 write_indices_to_stream_fx(
- Indice *ind_list,
- UWord16 **pt_stream,
- const Word16 inc,
- const Word16 num_indices )
-{
- Word16 i, k;
- Word16 value, nb_bits;
- UWord16 mask;
-
- FOR( i = 0; i < num_indices; i++ )
- {
- value = ind_list[i].value;
- nb_bits = ind_list[i].nb_bits;
- move16();
- move16();
-
- IF( nb_bits > 0 )
- {
- /* mask from MSB to LSB */
- mask = (UWord16) L_shl( 1, sub( nb_bits, 1 ) );
-
- /* write bit by bit */
- FOR( k = 0; k < nb_bits; k++ )
- {
- IF( L_and( value, mask ) )
- {
- **pt_stream = 1;
- move16();
- *pt_stream += inc;
- }
- ELSE
- {
- **pt_stream = 0;
- move16();
- *pt_stream += inc;
- }
-
- mask = (UWord16) L_shr( mask, 1 );
- }
- }
- }
- return 0;
-}
-
-/*-------------------------------------------------------------------*
- * write_indices_element()
- *
- * Bitstream writing function of one element (one SCE or one CPE)
- *-------------------------------------------------------------------*/
-static ivas_error write_indices_element_fx(
- Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */
- UWord16 **pt_stream, /* i : pointer to bitstream buffer */
- const Word16 is_SCE, /* i : flag to distingusih SCE and CPE */
- const Word16 element_id /* i : id of the SCE or CPE */
-)
-{
- Word16 ch;
- Encoder_State **sts = NULL;
- UWord16 *pt_stream_loc;
- UWord16 *pt_stream_backup;
- UWord16 *pt_stream_end;
- Word16 nb_bits_tot_metadata;
- Word16 nb_ind_tot_metadata;
-
- Indice *ind_list_metadata;
- Word16 n, n_channels;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
- ind_list_metadata = NULL;
- nb_ind_tot_metadata = 0;
- move16();
-
- IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MONO_FORMAT ) )
- {
- sts = st_ivas->hSCE[0]->hCoreCoder;
- nb_bits_tot_metadata = 0;
- move16();
- }
- ELSE
- {
- nb_bits_tot_metadata = 0;
- move16();
- test();
- test();
- IF( is_SCE && st_ivas->hSCE[element_id] != NULL )
- {
- sts = st_ivas->hSCE[element_id]->hCoreCoder;
-
- IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
- {
- nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot;
- ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list;
- nb_ind_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot;
- move16();
- move16();
- }
- }
- ELSE IF( !is_SCE && st_ivas->hCPE[element_id] != NULL )
- {
- sts = st_ivas->hCPE[element_id]->hCoreCoder;
-
- IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
- {
- nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot;
- ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list;
- nb_ind_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot;
- move16();
- move16();
- }
- }
- }
-
- n_channels = 1;
- move16();
- if ( GT_16( sts[0]->element_mode, IVAS_CPE_DFT ) )
- {
- n_channels = CPE_CHANNELS;
- move16();
- }
-
- /*----------------------------------------------------------------*
- * Bitstream packing (conversion of individual indices into a serial stream)
- *----------------------------------------------------------------*/
-
- pt_stream_loc = *pt_stream;
- pt_stream_end = pt_stream_loc;
-
- FOR( n = 0; n < n_channels; n++ )
- {
- /* write the metadata buffer */
- test();
- IF( n == 0 && nb_bits_tot_metadata != 0 )
- {
- pt_stream_backup = pt_stream_loc;
-
- FOR( ch = 0; ch < n_channels; ch++ )
- {
- pt_stream_loc += sts[ch]->hBstr->nb_bits_tot;
- }
- pt_stream_loc += nb_bits_tot_metadata - 1;
- pt_stream_end = pt_stream_loc + 1;
-
- write_indices_to_stream_fx( ind_list_metadata, &pt_stream_loc, -1,
- nb_ind_tot_metadata );
-
- /* restore previous pointer position */
- pt_stream_loc = pt_stream_backup;
- }
- write_indices_to_stream_fx( sts[n]->hBstr->ind_list, &pt_stream_loc, 1,
- sts[n]->hBstr->nb_ind_tot );
-
- if ( pt_stream_loc > pt_stream_end )
- {
- pt_stream_end = pt_stream_loc;
- }
- }
-
-#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
- if ( is_SCE ) /* EVS and SCE */
- {
- static FILE *f1 = 0;
-
- if ( f1 == 0 )
- f1 = fopen( "bitstream_text", "w" );
-
- for ( int16_t i = 0; i < sts[0]->hBstr->nb_ind_tot; i++ )
- {
- Indice *ind_list = sts[0]->hBstr->ind_list;
- int16_t value = ind_list[i].value;
- int16_t nb_bits = ind_list[i].nb_bits;
- char *function_name = ind_list[i].function_name;
-
- fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
- }
-
- if ( st_ivas->hSCE[element_id]->hMetaData != NULL )
- {
- for ( int16_t i = 0; i < st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot; i++ )
- {
- Indice *ind_list = st_ivas->hSCE[element_id]->hMetaData->ind_list;
- int16_t value = ind_list[i].value;
- int16_t nb_bits = ind_list[i].nb_bits;
- char *function_name = ind_list[i].function_name;
-
- fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
- }
- }
- }
- else
- {
- static FILE *f1 = 0;
-
- if ( f1 == 0 )
- f1 = fopen( "bitstream_text", "w" );
-
-
- for ( n = 0; n < n_channels; n++ )
- {
- for ( int16_t i = 0; i < sts[n]->hBstr->nb_ind_tot; i++ )
- {
- Indice *ind_list = sts[n]->hBstr->ind_list;
- int16_t value = ind_list[i].value;
- int16_t nb_bits = ind_list[i].nb_bits;
- char *function_name = ind_list[i].function_name;
-
- fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, n, i, function_name, nb_bits, value );
- }
- }
-
- if ( st_ivas->hCPE[element_id]->hMetaData != NULL )
- {
- for ( int16_t i = 0; i < st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot; i++ )
- {
- Indice *ind_list = st_ivas->hCPE[element_id]->hMetaData->ind_list;
- int16_t value = ind_list[i].value;
- int16_t nb_bits = ind_list[i].nb_bits;
- char *function_name = ind_list[i].function_name;
-
- fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, -1, i, function_name, nb_bits, value );
- }
- }
- }
-#endif
-
- /*----------------------------------------------------------------*
- * Clearing of indices
- * Reset index pointers
- *----------------------------------------------------------------*/
-
- IF( is_SCE ) /* EVS and SCE */
- {
- IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
- {
- reset_indices_enc_fx( st_ivas->hSCE[element_id]->hMetaData, st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot );
- }
-
- reset_indices_enc_fx( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot );
- }
- ELSE
- {
- IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
- {
- reset_indices_enc_fx( st_ivas->hCPE[element_id]->hMetaData, st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot );
- }
-
- FOR( n = 0; n < n_channels; n++ )
- {
- reset_indices_enc_fx( sts[n]->hBstr, sts[n]->hBstr->nb_ind_tot );
- }
- }
-
- /* update pointer */
- *pt_stream = pt_stream_end;
-
- return error;
-}
-
-/*-------------------------------------------------------------------*
- * write_indices_ivas()
- *
- * Write the buffer of indices to a serial bitstream buffer,
- * each bit represented as a uint16_t of value 0 or 1
- *-------------------------------------------------------------------*/
-ivas_error write_indices_ivas_fx(
- Encoder_Struct *st_ivas, /* i/o: encoder state structure */
- UWord16 *bit_stream, /* i/o: output bitstream */
- UWord16 *num_bits /* i : number of indices written to output */
-)
-{
- Word16 i, n;
- UWord16 *pt_stream;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
- pt_stream = bit_stream;
- FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i )
- {
- bit_stream[i] = 0;
- move16();
- }
-
-
- /*-----------------------------------------------------------------*
- * Encode Payload
- *-----------------------------------------------------------------*/
-
- FOR( n = 0; n < st_ivas->nSCE; n++ )
- {
- write_indices_element_fx( st_ivas, &pt_stream, 1, n );
- }
-
- FOR( n = 0; n < st_ivas->nCPE; n++ )
- {
- write_indices_element_fx( st_ivas, &pt_stream, 0, n );
- }
-
- *num_bits = (UWord16) ( pt_stream - bit_stream );
- move16();
-
- return error;
-}
-
-/*-------------------------------------------------------------------*
- * decoder_selectCodec()
- *
- *
- *-------------------------------------------------------------------*/
-
-static void decoder_selectCodec(
- Decoder_State *st, /* i/o: decoder state structure */
- const Word32 total_brate, /* i : total bitrate */
- const Word16 bit0 /* i : first bit */
-)
-{
- /* set the AMR-WB IO flag */
- if ( rate2AMRWB_IOmode( total_brate ) != -1 )
- {
- st->Opt_AMR_WB = 1;
- }
- else if ( total_brate != FRAME_NO_DATA )
- {
- st->Opt_AMR_WB = 0;
- }
-
- if ( st->Opt_AMR_WB )
- {
- st->codec_mode = MODE1;
- }
- else
- {
- st->codec_mode = get_codec_mode( total_brate );
-
- if ( st->codec_mode == -1 )
- {
- switch ( total_brate )
- {
- case 0:
- st->codec_mode = st->last_codec_mode;
- break;
- case 2400:
- st->codec_mode = st->last_codec_mode;
- break;
- case 2800:
- st->codec_mode = MODE1;
- break;
- default: /* validate that total_brate (derived from RTP packet or a file header) is one of the defined bitrates */
- st->codec_mode = st->last_codec_mode;
- st->bfi = 1;
- break;
- }
- }
- }
-
- if ( st->ini_frame == 0 )
- {
- if ( st->codec_mode == -1 )
- {
- st->codec_mode = MODE1;
- }
- st->last_codec_mode = st->codec_mode;
- }
-
- /* set SID/CNG type */
- if ( total_brate == SID_2k40 )
- {
- if ( bit0 == 0 )
- {
- st->cng_type = LP_CNG;
-
- /* force MODE1 when selecting LP_CNG */
- st->codec_mode = MODE1;
- }
- else if ( bit0 == 1 )
- {
- st->cng_type = FD_CNG;
- if ( st->last_codec_mode == MODE2 && st->last_total_brate == ACELP_13k20 )
- {
- st->codec_mode = MODE1;
- }
- }
- }
-
- return;
-}
-
-
-/*-------------------------------------------------------------------*
- * reset_elements()
- *
- * Simulate packet losses by reading FEC pattern from external file
- *-------------------------------------------------------------------*/
-
-Decoder_State **reset_elements(
- Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
-)
-{
- Word16 k, n;
- Decoder_State **sts = NULL; /* to avoid compilation warning */
-
- FOR( k = 0; k < st_ivas->nSCE; k++ )
- {
- sts = st_ivas->hSCE[k]->hCoreCoder;
-
- sts[0]->bfi = 0;
- sts[0]->BER_detect = 0;
- sts[0]->mdct_sw_enable = 0;
- sts[0]->mdct_sw = 0;
-
- move16();
- move16();
- move16();
- move16();
-
- reset_indices_dec( sts[0] );
- }
-
- FOR( k = 0; k < st_ivas->nCPE; k++ )
- {
- sts = st_ivas->hCPE[k]->hCoreCoder;
-
- FOR( n = 0; n < CPE_CHANNELS; n++ )
- {
- sts[n]->bfi = 0;
- sts[n]->BER_detect = 0;
- sts[n]->mdct_sw_enable = 0;
- sts[n]->mdct_sw = 0;
-
- move16();
- move16();
- move16();
- move16();
-
- reset_indices_dec( sts[n] );
- }
- }
-
- return sts; /* return last decoder state */
-}
-
-/*-------------------------------------------------------------------*
- * ivas_set_bitstream_pointers()
- *
- * Set bitstream pointers for every SCE/CPE Core-Decoder
- *-------------------------------------------------------------------*/
-
-void ivas_set_bitstream_pointers(
- Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
-)
-{
- Word16 k, num_bits;
- Decoder_State **sts;
-
- num_bits = 0;
-
- /* set bitstream pointers for SCEs */
- for ( k = 0; k < st_ivas->nSCE; k++ )
- {
- sts = st_ivas->hSCE[k]->hCoreCoder;
- sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
- num_bits += (Word16) ( st_ivas->hSCE[k]->element_brate / FRAMES_PER_SEC );
- }
-
- /* set bitstream pointers for CPEs */
- for ( k = 0; k < st_ivas->nCPE; k++ )
- {
- sts = st_ivas->hCPE[k]->hCoreCoder;
- sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
- num_bits += (Word16) ( st_ivas->hCPE[k]->element_brate / FRAMES_PER_SEC );
- }
-
- return;
-}
-
-
-/*-------------------------------------------------------------------*
- * read_indices()
- *
- * Read indices from an ITU-T G.192 bitstream to the buffer
- * Simulate packet losses by inserting frame erasures
- *-------------------------------------------------------------------*/
-
-/*! r: 1 = reading OK, 0 = problem */
-ivas_error read_indices_fx(
- Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
- UWord16 bit_stream[], /* i : bitstream buffer */
- UWord16 num_bits, /* i : number of bits in bitstream */
- Word16 *prev_ft_speech,
- Word16 *CNG,
- Word16 bfi /* i : bad frame indicator */
-)
-{
- Word16 k;
- Decoder_State **sts;
- Word32 total_brate = 0;
- move32();
- Word16 curr_ft_good_sp, curr_ft_bad_sp;
- Word16 g192_sid_first, sid_upd_bad, sid_update;
- Word16 speech_bad, speech_lost;
- Word16 n;
- ivas_error error;
-
- error = IVAS_ERR_OK;
- move32();
-
- st_ivas->BER_detect = 0;
- move16();
- st_ivas->num_bits = num_bits;
- move16();
- sts = reset_elements( st_ivas );
-
- st_ivas->bfi = bfi;
- move16();
-
- /* convert the frame length to total bitrate */
- total_brate = imult3216( num_bits, FRAMES_PER_SEC );
- move32();
-
- /* verify that a valid num bits value is present in the G.192 file */
- /* only AMRWB, EVS or IVAS bitrates or 0(NO DATA) are allowed in G.192 file frame reading */
- IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) )
- {
- k = 0;
- move16();
-
- test();
- WHILE( LT_16( k, SIZE_IVAS_BRATE_TBL ) && NE_32( total_brate, ivas_brate_tbl[k] ) )
- {
- k = add( k, 1 );
- }
-
- test();
- test();
- test();
- test();
- IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && ( LT_16( k, SIZE_IVAS_BRATE_TBL ) || LE_32( total_brate, SID_2k40 ) ) )
- {
- st_ivas->element_mode_init = IVAS_SCE;
- move16();
- }
- ELSE IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) && LE_32( total_brate, SID_2k40 ) )
- {
- st_ivas->element_mode_init = IVAS_SCE;
- move16();
- }
- ELSE IF( EQ_16( k, SIZE_IVAS_BRATE_TBL ) )
- {
- return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate );
- }
- ELSE
- {
- st_ivas->element_mode_init = -1;
- move16();
- }
- }
- ELSE /* AMRWB or EVS */
- {
- st_ivas->element_mode_init = EVS_MONO;
- move16();
-
- IF( rate2EVSmode_float( total_brate, NULL ) < 0 ) /* negative value means that a valid rate was not found */
- {
- return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) in the G.192 frame ! Exiting ! \n", total_brate );
- }
- }
-
- /* G.192 RX DTX handler*/
- /* handle SID_FIRST, SID_BAD, SPEECH_LOST, NO_DATA as properly as possible for the ITU-T G.192 format */
- /* (total_brate, bfi , st_CNG) = rx_handler(received frame type, [previous frame type], past CNG state, past core) */
- curr_ft_good_sp = 0;
- move16();
- curr_ft_bad_sp = 0;
- move16();
-
- IF( is_DTXrate( total_brate ) == 0 )
- {
- IF( st_ivas->bfi == 0 )
- {
- curr_ft_good_sp = 1;
- move16();
- }
- ELSE
- {
- curr_ft_bad_sp = 1;
- move16();
- }
- }
-
- sid_update = 0;
- move16();
- sid_upd_bad = 0;
- move16();
- IF( EQ_16( is_SIDrate( total_brate ), 1 ) )
- {
- IF( st_ivas->bfi == 0 )
- {
- sid_update = 1;
- move16();
- }
- ELSE
- {
- sid_upd_bad = 1; /* this frame type may happen in ETSI/3GPP CS cases, a corrupt SID frames */
- move16();
- }
- }
-
- /* all zero indices/bits iSP AMRWB SID_update results in a valid LP filter with extremely high LP-filter-gain */
- /* all zero indices/bits may be a result of CS bit errors and/or erroneously injected by gateways or by a bad dejitter handlers */
- test();
- IF( EQ_32( total_brate, SID_1k75 ) && EQ_16( sid_update, 1 ) )
- {
- /* valid sid_update received, check for very risky but formally valid content */
- Word16 sum = 0;
- move16();
- FOR( k = 0; k < num_bits; ++k )
- {
- sum = add( sum, extract_l( EQ_32( bit_stream[k], 1 ) ) ); /* check of 35 zeroes */
- }
- if ( sum == 0 )
- { /* all zeros */
- sid_upd_bad = 1; /* initial signal as corrupt (BER likely) */
- move16();
- }
- }
-
- /* AMRWB 26.173 G.192 file reader (read_serial) does not declare/use SID_BAD ft,
- it declares every bad synch marked frame initially as a lost_speech frame,
- and then the RXDTX handler CNG state decides the decoding mode CNG/SPEECH.
- While In the AMRWB ETSI/3GPP format eid a CRC error in a detected SID_UPDATE frames triggers SID_BAD.
-
- Here we inhibit use of the SID-length info, even though it is available in the G.192 file format after STL/EID-XOR .
- */
- IF( sid_upd_bad )
- {
- sid_upd_bad = 0;
- move16();
- total_brate = FRAME_NO_DATA; /* treat SID_BAD as a stolen signaling frame --> SPEECH LOST */
- move32();
- }
-
- g192_sid_first = 0;
- move16();
-
- test();
- test();
- test();
- test();
- 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 )
- {
- g192_sid_first = 1; /* SID_FIRST detected for previous AMRWB/AMRWBIO active frames only */
- /* It is not possible to perfectly simulate rate switching conditions EVS->AMRWBIO where:
- the very first SID_FIRST detection is based on a past EVS active frame
- and a good length 0 "SID_FIRST"(NO_DATA) frame is sent in AMRWBIO,
- due to the one frame state memory in the AMRWB legacy G.192 SID_FIRST encoding
- */
- move16();
- }
-
- speech_bad = 0;
- move16();
-
- test();
- if ( st_ivas->bfi != 0 && ( is_DTXrate( total_brate ) == 0 ) )
- {
- speech_bad = 1; /* initial ft assumption, CNG_state decides what to do */
- move16();
- }
-
- speech_lost = 0;
- move16();
-
- test();
- if ( total_brate == FRAME_NO_DATA && st_ivas->bfi != 0 ) /* unsent NO_DATA or stolen NO_DATA/signaling frame */
- {
- speech_lost = 1; /* initial ft assumption, CNG_state decides what to do */
- move16();
- }
-
- /* Do not allow decoder to enter CNG-synthesis for any instantly received GOOD+LENGTH==0 frame
- as this frame was never transmitted, one can not know it is good and has a a length of zero ) */
- IF( *CNG != 0 )
- {
- /* We were in CNG synthesis */
- if ( curr_ft_good_sp != 0 )
- {
- /* only a good speech frame makes you leave CNG synthesis */
- *CNG = 0;
- move16();
- }
- }
- ELSE
- {
- /* We were in SPEECH synthesis */
- /* only a received/detected SID frame can make the decoder enter into CNG synthsis */
- test();
- test();
- if ( g192_sid_first || sid_update || sid_upd_bad )
- {
- *CNG = 1;
- move16();
- }
- }
-
- /* set bfi, total_brate pair for proper decoding */
- /* handle the G.192 _simulated_ untransmitted NO_DATA frame, setting for decoder SPEECH synthesis */
- test();
- test();
- if ( *CNG == 0 && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 )
- {
- st_ivas->bfi = 1; /* SPEECH PLC code will now become active as in a real system */
- /* total_brate= 0 */
- move16();
- }
-
- /* handle bad/lost speech frame(and CS bad SID frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */
- test();
- test();
- test();
- test();
- IF( (
- NE_16( bfi, FRAMEMODE_FUTURE ) &&
- ( *CNG != 0 ) && ( ( speech_bad != 0 ) || ( speech_lost != 0 ) ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */
- ( sid_upd_bad != 0 ) ) /* SID_UPD_BAD --> start CNG */
- {
- st_ivas->bfi = 0; /* bfi=0 needed to activate CNG code */
- move16();
- total_brate = FRAME_NO_DATA;
- move32();
- }
-
- /* update for next frame's G.192 file format's odd SID_FIRST detection (primarily for AMRWBIO) */
- test();
- *prev_ft_speech = ( ( curr_ft_good_sp != 0 ) || ( curr_ft_bad_sp != 0 ) );
- move16();
-
- /* st->total brate= total_brate; updated in a good frame below */
-
- FOR( k = 0; k < st_ivas->nCPE; k++ )
- {
- sts = st_ivas->hCPE[k]->hCoreCoder;
- FOR( n = 0; n < CPE_CHANNELS; n++ )
- {
- sts[n]->bfi = st_ivas->bfi;
- move16();
- }
- }
-
- FOR( k = 0; k < st_ivas->nSCE; k++ )
- {
- sts = st_ivas->hSCE[k]->hCoreCoder;
- sts[0]->bfi = st_ivas->bfi;
- move16();
- }
-
- IF( st_ivas->bfi == 0 )
- {
- /* select Mode 1 or Mode 2 */
- IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) /* EVS mono */
- {
- decoder_selectCodec( sts[0], total_brate, bit_stream[0] );
- st_ivas->hDecoderConfig->Opt_AMR_WB = sts[0]->Opt_AMR_WB;
- move16();
- }
- ELSE /* IVAS */
- {
- st_ivas->codec_mode = MODE1;
- move16();
- st_ivas->hDecoderConfig->Opt_AMR_WB = 0;
- move16();
- }
- }
-
- /* GOOD frame */
- test();
- if ( st_ivas->bfi == 0 || EQ_16( st_ivas->bfi, FRAMEMODE_FUTURE ) )
- {
- /* GOOD frame - convert ITU-T G.192 words to short values */
- st_ivas->hDecoderConfig->ivas_total_brate = total_brate;
- move32();
- }
-
- st_ivas->bit_stream = bit_stream;
-
- IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) )
- {
- ivas_set_bitstream_pointers( st_ivas );
- }
-
- return error;
-}
-#undef WMC_TOOL_SKIP
diff --git a/lib_com/bitstream_fx.c b/lib_com/bitstream_fx.c
index ce8d9018e020c3f0aa0e9864fbe5092c9d0caee1..77ce24079f60050f0d8ca1ae0b364dcea437d284 100644
--- a/lib_com/bitstream_fx.c
+++ b/lib_com/bitstream_fx.c
@@ -31,114 +31,180 @@
*******************************************************************************************************/
/*====================================================================================
- EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
+ EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
====================================================================================*/
-#include
#include
-#include
+#include
#include "options.h"
-#include "ivas_cnst.h" /* Common constants */
-#include "prot_fx.h" /* Function prototypes */
-#include "ivas_prot_fx.h"
-#include "basop_util.h"
+#include "cnst.h"
+#include "prot_fx.h"
+#include "stat_enc.h"
+#include "stat_dec.h"
#include "rom_com.h"
#include "mime.h"
+#include "ivas_cnst.h"
+#include "ivas_rom_com.h"
+#include "wmc_auto.h"
+#include "ivas_prot_fx.h"
+#include "prot_fx_enc.h"
+#ifdef DEBUGGING
+#include "debug.h"
+#ifdef DBG_BITSTREAM_ANALYSIS
+#include
+#endif
+#endif
#ifdef DEBUGGING
+
+#define FEC_SEED 12558
+
/*-------------------------------------------------------------------*
* Global variables
*--------------------------------------------------------------------*/
-int16_t FEC_seed = 12558; /* Seed for random FEC generator */
FILE *FEC_pattern = NULL; /* FEC pattern file (for simulation of FEC) */
-float FEC_random = 0; /* FEC rate in percent (for simulation of FEC) */
+#endif
+
+#define STEP_MAX_NUM_INDICES 100 /* increase the maximum number of allowed indices in the list by this amount */
+
/*-------------------------------------------------------------------*
- * file_read_FECpattern()
+ * BRATE2IDX_fx()
*
- * Simulate packet losses by reading FEC pattern from external file
+ * Convert Bitrate to Index Value
*-------------------------------------------------------------------*/
-static int16_t file_read_FECpattern( void )
+Word16 BRATE2IDX_fx(
+ const Word32 brate )
{
- int16_t bfi = 0;
- /* FEC pattern file provided */
- if ( FEC_pattern != NULL )
- {
- int16_t tmp = 0;
- if ( fread( &tmp, sizeof( int16_t ), 1, FEC_pattern ) != 1 )
- {
- if ( feof( FEC_pattern ) != 0 )
- {
- tmp = 0;
- fseek( FEC_pattern, 0L, SEEK_SET );
- }
- else
- {
- fprintf( stderr, "\nError reading the FEC pattern file !" );
- exit( -1 );
- }
- }
-
- if ( tmp == 2609 || tmp == 1 || tmp == SYNC_BAD_FRAME )
- {
- bfi = 1;
- }
- else
- {
- bfi = 0;
- }
- }
+ Word32 L_temp;
+ Word32 L_idx;
+#define START 9
+ extern const Word16 bit_rates_div50[];
- /* random FEC simulation requested */
- else if ( FEC_random > 0 )
- {
- float ftmp = (float) /*own_random*/ Random( &FEC_seed ) + 32768.0f;
- if ( ftmp <= FEC_random / 100.0f * 65535.0f )
- {
- bfi = 1;
- }
- else
- {
- bfi = 0;
- }
- }
+ /* This is a Fast Bit Rate Value to Index Value Binary Search */
+ L_temp = L_msu0( brate, bit_rates_div50[START], 50 );
+ L_temp = L_min( 6, L_max( -6, L_temp ) );
+ L_idx = L_add( L_temp, START );
+ L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
+ L_temp = L_min( 3, L_max( -3, L_temp ) );
+ L_idx = L_add( L_temp, L_idx );
+ L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
+ L_temp = L_min( 1, L_max( -2, L_temp ) );
+ L_idx = L_add( L_temp, L_idx );
+ L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
+ if ( L_temp != 0 )
+ L_idx = L_add( L_idx, 1 );
- return bfi;
+ return (Word16) L_idx;
}
-#endif
+
+
/*-------------------------------------------------------------------*
- * pack_bit()
+ * BRATE2IDX16k_fx()
*
- * insert a bit into packed octet
+ * Convert Bitrate to Index Value
*-------------------------------------------------------------------*/
-void pack_bit(
- const Word16 bit, /* i: bit to be packed */
- UWord8 **pt, /* i/o: pointer to octet array into which bit will be placed */
- UWord8 *omask /* i/o: output mask to indicate where in the octet the bit is to be written */
-)
+
+Word16 BRATE2IDX16k_fx(
+ Word32 brate )
{
- if ( EQ_16( *omask, 0x80 ) )
- {
- **pt = 0;
- move16();
- }
- IF( bit != 0 )
+ Word32 L_temp, L_idx;
+#define START_16K 5
+ extern const Word16 bit_rates_16k_div50[];
+
+ if ( EQ_32( brate, ACELP_16k40 ) )
{
- **pt = (UWord8) s_or( **pt, *omask );
+ brate = ACELP_14k80;
move16();
}
- *omask = (UWord8) shr( *omask, 1 );
+
+ /* This is a Fast Bit Rate Value to Index Value Binary Search */
+ L_temp = L_msu0( brate, bit_rates_16k_div50[START_16K], 50 );
+ L_temp = L_min( 3, L_max( -3, L_temp ) );
+ L_idx = L_add( L_temp, START_16K );
+ L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
+ L_temp = L_min( 2, L_max( -2, L_temp ) );
+ L_idx = L_add( L_temp, L_idx );
+ L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
+ L_temp = L_min( 1, L_max( -1, L_temp ) );
+ L_idx = L_add( L_temp, L_idx );
+
+ return (Word16) L_idx;
+}
+
+
+/*-------------------------------------------------------------------*
+ * BIT_ALLOC_IDX_fx()
+ *-------------------------------------------------------------------*/
+
+Word32 BIT_ALLOC_IDX_fx(
+ const Word32 brate,
+ Word16 ctype,
+ const Word16 sfrm,
+ const Word16 tc )
+{
+ Word32 L_temp;
+ Word16 temp;
+
+ if ( ctype == INACTIVE ) /* no sub(ctype, INACTIVE) because it is '0' */
+ ctype = GENERIC;
move16();
- IF( *omask == 0 )
+ L_temp = L_mac0( -1l * 256, 1 * 256, ctype );
+
+ temp = BRATE2IDX_fx( brate );
+ L_temp = L_mac0( L_temp, 4 * 256, temp );
+ IF( tc >= 0 )
+ L_temp = L_mac0( L_temp, ( 10 - 4 ) * 256, temp );
+ /* So either 'temp' x 4 when 'tc < 0', 'temp' x 10 otherwise */
+
+ L_temp = L_mac0( L_temp, 1 * 256, s_max( 0, tc ) );
+
+ L_temp = L_mac0( L_temp, s_max( 0, sfrm ), 1 );
+ if ( sfrm < 0 )
+ L_temp = L_shr( L_temp, 2 );
+ L_temp = L_shr( L_temp, 6 );
+
+ return L_temp;
+}
+
+
+/*-------------------------------------------------------------------*
+ * BIT_ALLOC_IDX_16KHZ_fx()
+ *-------------------------------------------------------------------*/
+
+Word32 BIT_ALLOC_IDX_16KHZ_fx(
+ const Word32 brate,
+ const Word16 ctype,
+ const Word16 sfrm,
+ const Word16 tc )
+{
+ Word32 L_temp;
+ Word16 temp;
+ /* 'ctype' =
+ TRANSITION => 2
+ GENERIC => 1
+ ALL Other => 0
+ */
+ L_temp = L_and( shr( 0x0240l, shl( ctype, 1 ) ), 3 );
+
+ temp = BRATE2IDX16k_fx( brate );
+ L_temp = L_mac0( L_temp, 3, temp );
+ IF( tc >= 0 )
+ L_temp = L_mac0( L_temp, ( 7 - 3 ), temp );
+ /* So either 'temp' x 3 when 'tc < 0', 'temp' x 7 otherwise */
+
+ L_temp = L_mac0( L_temp, 1, s_max( 0, tc ) );
+
+ IF( sfrm >= 0 )
{
- *omask = 0x80;
- move16();
- ( *pt )++;
+ /* Mult by 5 */
+ L_temp = L_add( L_temp, L_shl( L_temp, 2 ) );
+ L_temp = L_mac0( L_temp, shr( sfrm, 6 ), 1 );
}
- return;
+ return L_temp;
}
@@ -147,13 +213,14 @@ void pack_bit(
*
* lookup AMRWB IO mode
*-------------------------------------------------------------------*/
+
static Word16 rate2AMRWB_IOmode(
- Word32 brate /* i: bitrate */
+ Word32 brate /* i : bitrate */
)
{
SWITCH( brate )
{
- /* EVS AMR-WB IO modes */
+ /* EVS AMR-WB IO modes */
case SID_1k75:
return AMRWB_IO_SID;
case ACELP_6k60:
@@ -177,16 +244,19 @@ static Word16 rate2AMRWB_IOmode(
default:
break;
}
+
return -1;
}
+
/*-------------------------------------------------------------------*
* rate2EVSmode()
*
* lookup EVS mode
*-------------------------------------------------------------------*/
+
Word16 rate2EVSmode(
- const Word32 brate, /* i: bitrate */
+ const Word32 brate, /* i : bitrate */
Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
)
{
@@ -195,9 +265,10 @@ Word16 rate2EVSmode(
*is_amr_wb = 0;
move16();
}
+
SWITCH( brate )
{
- /* EVS Primary modes */
+ /* EVS Primary modes */
case FRAME_NO_DATA:
return NO_DATA_TYPE;
case SID_2k40:
@@ -227,157 +298,3655 @@ Word16 rate2EVSmode(
case HQ_128k:
return PRIMARY_128000;
default:
- BREAK;
+ break;
}
+
if ( is_amr_wb != NULL )
{
*is_amr_wb = 1;
move16();
}
+
return rate2AMRWB_IOmode( brate );
}
-/*-------------------------------------------------------------------*
- * push_indice( )
- *
- * Push a new indice into the buffer
- *-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*
- * get_next_indice_fx( )
+ * ind_list_realloc()
*
- * Get the next indice from the buffer
+ * Re-allocate the list of indices
*-------------------------------------------------------------------*/
-UWord16 get_next_indice_fx( /* o : value of the indice */
- Decoder_State *st_fx, /* i/o: decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
+ivas_error ind_list_realloc(
+ INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */
+ const Word16 max_num_indices, /* i : new maximum number of allowed indices in the list */
+ Encoder_Struct *st_ivas /* i : IVAS encoder structure */
)
{
- UWord16 value;
- Word16 i;
- Word16 nbits_total;
+ Word16 i, n, ch, n_channels, ind_list_pos, is_metadata, ivas_max_num_indices;
+ INDICE_HANDLE new_ind_list;
+ BSTR_ENC_HANDLE hBstr;
- assert( nb_bits <= 16 );
- value = 0;
+ IF( st_ivas == NULL )
+ {
+ return IVAS_ERR_OK;
+ }
+
+ /* get the pointer to the beginning of the old buffer of indices (either metadata or core coders) */
+ IF( old_ind_list == st_ivas->ind_list_metadata )
+ {
+ is_metadata = 1;
+ ivas_max_num_indices = st_ivas->ivas_max_num_indices_metadata;
+ }
+ ELSE
+ {
+ is_metadata = 0;
+ ivas_max_num_indices = st_ivas->ivas_max_num_indices;
+ }
+ move16();
move16();
- nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
- /* detect corrupted bitstream */
- IF( GT_16( add( st_fx->next_bit_pos, nb_bits ), nbits_total ) )
+ /* allocate new buffer of indices */
+ IF( ( new_ind_list = (INDICE_HANDLE) malloc( max_num_indices * sizeof( Indice ) ) ) == NULL )
{
- st_fx->BER_detect = 1;
+ return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) );
+ }
+
+ /* move indices from the old list to the new list */
+ FOR( i = 0; i < s_min( max_num_indices, ivas_max_num_indices ); i++ )
+ {
+ IF( GT_16( old_ind_list[i].nb_bits, -1 ) )
+ {
+ new_ind_list[i].id = old_ind_list[i].id;
+ new_ind_list[i].value = old_ind_list[i].value;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
+#endif
+ move16();
+ move16();
+ }
+ new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
move16();
- return ( 0 );
}
- FOR( i = 0; i < nb_bits; i++ )
+ /* reset nb_bits of all other indices to -1 */
+ FOR( ; i < max_num_indices; i++ )
{
- value = (UWord16) L_shl( value, 1 );
- value = (UWord16) L_add( value, st_fx->bit_stream[add( st_fx->next_bit_pos, i )] );
+ new_ind_list[i].nb_bits = -1;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ sprintf( new_ind_list[i].function_name, "RESET in ind_list_realloc" );
+#endif
+ move16();
}
- /* update the position in the bitstream */
- st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
- move16();
- return value;
-}
+ /* update parameters in all SCE elements */
+ FOR( n = 0; n < st_ivas->nSCE; n++ )
+ {
+ /* get the pointer to hBstr */
+ IF( is_metadata )
+ {
+ hBstr = st_ivas->hSCE[n]->hMetaData;
+ }
+ ELSE
+ {
+ hBstr = st_ivas->hSCE[n]->hCoreCoder[0]->hBstr;
+ }
-/*-------------------------------------------------------------------*
- * get_next_indice_1_fx( )
- *
- * Get the next 1-bit indice from the buffer
- *-------------------------------------------------------------------*/
+ IF( hBstr != NULL )
+ {
+ /* get the current position inside the old list */
+ ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
-UWord16 get_next_indice_1_fx( /* o : value of the indice */
- Decoder_State *st_fx /* i/o: decoder state structure */
-)
-{
- Word16 nbits_total;
- nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
- /* detect corrupted bitstream */
- test();
- test();
- test();
- IF( ( GT_16( add( st_fx->next_bit_pos, 1 ), nbits_total ) && EQ_16( st_fx->codec_mode, MODE1 ) ) ||
- ( 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 */
- )
+ /* set pointers in the new list */
+ *( hBstr->ivas_ind_list_zero ) = new_ind_list;
+ hBstr->ind_list = &new_ind_list[ind_list_pos];
+
+ /* set the new maximum number of indices */
+ *( hBstr->ivas_max_num_indices ) = max_num_indices;
+ move16();
+ }
+ }
+
+ /* update parameters in all CPE elements */
+ FOR( n = 0; n < st_ivas->nCPE; n++ )
{
- st_fx->BER_detect = 1;
+ /* get the pointer to hBstr */
+ IF( is_metadata )
+ {
+ n_channels = 1;
+ }
+ ELSE
+ {
+ n_channels = CPE_CHANNELS;
+ }
move16();
- return ( 0 );
+
+ FOR( ch = 0; ch < n_channels; ch++ )
+ {
+ IF( is_metadata )
+ {
+ hBstr = st_ivas->hCPE[n]->hMetaData;
+ }
+ ELSE
+ {
+ hBstr = st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr;
+ }
+
+ IF( hBstr != NULL )
+ {
+ /* get the current position inside the old list */
+ ind_list_pos = (Word16) ( hBstr->ind_list - old_ind_list );
+
+ /* set pointers in the new list */
+ *( hBstr->ivas_ind_list_zero ) = new_ind_list;
+ hBstr->ind_list = &new_ind_list[ind_list_pos];
+
+ /* set the new maximum number of indices */
+ *( hBstr->ivas_max_num_indices ) = max_num_indices;
+ move16();
+ }
+ }
}
- return st_fx->bit_stream[st_fx->next_bit_pos++];
+ /* free the old list */
+ free( old_ind_list );
+
+ return IVAS_ERR_OK;
}
-/*-------------------------------------------------------------------*
- * get_next_indice_tmp()
+
+/*-----------------------------------------------------------------------*
+ * get_ivas_max_num_indices()
*
- * update the total number of bits and the position in the bitstream
+ * Get the maximum allowed number of indices in the encoder
+ *-----------------------------------------------------------------------*/
+
+/*! r: maximum number of indices */
+Word16 get_ivas_max_num_indices_fx(
+ const IVAS_FORMAT ivas_format, /* i : IVAS format */
+ const Word32 ivas_total_brate /* i : IVAS total bitrate */
+)
+{
+ test();
+ test();
+ IF( EQ_16( ivas_format, STEREO_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 300;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 450;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 650;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 750;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 850;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 950;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1350;
+ }
+ ELSE
+ {
+ return 1650;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) || EQ_16( ivas_format, MONO_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 250;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 350;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 450;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 550;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
+ {
+ return 620;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 670;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
+ {
+ return 780;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 880;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 950;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1100;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1300;
+ }
+ ELSE
+ {
+ return 1650;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 250;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 350;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 650;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 750;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 1020;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 1160;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 1220;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1300;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1720;
+ }
+ ELSE
+ {
+ return 2000;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 300;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 650;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 750;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 850;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 950;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1150;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1450;
+ }
+ ELSE
+ {
+ return 1650;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 300;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 650;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 750;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 1150;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 1250;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1650;
+ }
+ ELSE
+ {
+ return 1850;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 250;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 350;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 400;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 650;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
+ {
+ return 750;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_80k ) )
+ {
+ return 850;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 1150;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 1420;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 2120;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 2250;
+ }
+ ELSE
+ {
+ return 2450;
+ }
+ }
+
+ return 2450;
+}
+/*-----------------------------------------------------------------------*
+ * get_BWE_max_num_indices()
+ *
+ * Get the maximum number of indices in the BWE
+ *-----------------------------------------------------------------------*/
+
+/*! r: maximum number of indices */
+Word16 get_BWE_max_num_indices(
+ const Word32 extl_brate /* i : extensiona layer bitrate */
+)
+{
+ /* set the maximum number of indices in the BWE */
+ if ( extl_brate < SWB_BWE_16k )
+ {
+ return 30;
+ }
+ else
+ {
+ return 150;
+ }
+}
+
+
+/*-----------------------------------------------------------------------*
+ * get_ivas_max_num_indices_metadata()
+ *
+ * Set the maximum allowed number of metadata indices in the list
+ *-----------------------------------------------------------------------*/
+
+/*! r: maximum number of indices */
+Word16 get_ivas_max_num_indices_metadata_fx(
+ const IVAS_FORMAT ivas_format, /* i : IVAS format */
+ const Word32 ivas_total_brate /* i : IVAS total bitrate */
+)
+{
+ /* set the maximum required number of metadata indices */
+ test();
+ IF( EQ_16( ivas_format, MONO_FORMAT ) )
+ {
+ return 0;
+ }
+ ELSE IF( EQ_16( ivas_format, STEREO_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 60;
+ }
+ ELSE
+ {
+ return 80;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, ISM_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 20;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 65;
+ }
+ ELSE
+ {
+ return 80;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 100;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 200;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 300;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 500;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 1050;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 2000;
+ }
+ ELSE
+ {
+ return 2500;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MASA_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 80;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 125;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 205;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
+ {
+ return 240;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 305;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 425;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 630;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 850;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1000;
+ }
+ ELSE
+ {
+ return 1750;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_16k4 ) )
+ {
+ return 80;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_32k ) )
+ {
+ return 125 + 100;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_48k ) )
+ {
+ return 205 + 100;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
+ {
+ return 240 + 150;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_128k ) )
+ {
+ return 305 + 30;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_160k ) )
+ {
+ return 425 + 30;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_192k ) )
+ {
+ return 630 + 30;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_256k ) )
+ {
+ return 850 + 30;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_384k ) )
+ {
+ return 1000 + 30;
+ }
+ ELSE
+ {
+ return 1750 + 30;
+ }
+ }
+ ELSE IF( EQ_16( ivas_format, MC_FORMAT ) )
+ {
+ IF( LE_32( ivas_total_brate, IVAS_13k2 ) )
+ {
+ return 80;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_24k4 ) )
+ {
+ return 100;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_64k ) )
+ {
+ return 210;
+ }
+ ELSE IF( LE_32( ivas_total_brate, IVAS_96k ) )
+ {
+ return 220;
+ }
+ ELSE
+ {
+ return 300;
+ }
+ }
+
+ return 50;
+}
+
+
+/*-------------------------------------------------------------------*
+ * move_indices()
+ *
+ * Move indices inside the buffer or among two buffers
+ *-------------------------------------------------------------------*/
+
+void move_indices(
+ INDICE_HANDLE old_ind_list, /* i/o: old location of indices */
+ INDICE_HANDLE new_ind_list, /* i/o: new location of indices */
+ const Word16 nb_indices /* i : number of moved indices */
+)
+{
+ Word16 i;
+
+ IF( new_ind_list < old_ind_list )
+ {
+ FOR( i = 0; i < nb_indices; i++ )
+ {
+ new_ind_list[i].id = old_ind_list[i].id;
+ new_ind_list[i].value = old_ind_list[i].value;
+ new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
+ move16();
+ move16();
+ move16();
+
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
+#endif
+ old_ind_list[i].nb_bits = -1;
+ move16();
+ }
+ }
+ ELSE IF( new_ind_list > old_ind_list )
+ {
+ FOR( i = nb_indices - 1; i >= 0; i-- )
+ {
+ new_ind_list[i].id = old_ind_list[i].id;
+ new_ind_list[i].value = old_ind_list[i].value;
+ new_ind_list[i].nb_bits = old_ind_list[i].nb_bits;
+ move16();
+ move16();
+ move16();
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( new_ind_list[i].function_name, old_ind_list[i].function_name, 100 );
+#endif
+
+ old_ind_list[i].nb_bits = -1;
+ move16();
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ sprintf( old_ind_list[i].function_name, "RESET in move_indices" );
+#endif
+ }
+ }
+
+ return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * check_ind_list_limits()
+ *
+ * Check, if the maximum number of indices has been reached -> reallocate
+ * Check, if we will not overwrite an existing indice -> adjust the location
+ *-------------------------------------------------------------------*/
+
+ivas_error check_ind_list_limits(
+ BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */
+)
+{
+ Indice *ivas_ind_list_zero, *ivas_ind_list_last;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+ ivas_ind_list_zero = *( hBstr->ivas_ind_list_zero );
+
+ /* check, if the maximum number of indices has been reached and re-allocate the buffer */
+ /* the re-allocation can be avoided by increasing the limits in get_ivas_max_num_indices() or get_ivas_max_num_indices_metadata() */
+ IF( GE_16( (Word16) ( &hBstr->ind_list[hBstr->nb_ind_tot] - ivas_ind_list_zero ), *( hBstr->ivas_max_num_indices ) ) )
+ {
+
+ /* reallocate the buffer of indices with increased limit */
+ 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 ) )
+ {
+ return error;
+ }
+ }
+
+ /* check, if we will not overwrite an existing indice */
+ IF( hBstr->ind_list[hBstr->nb_ind_tot].nb_bits > 0 )
+ {
+ IF( hBstr->nb_ind_tot == 0 )
+ {
+ /* move the pointer to the next available empty slot */
+ ivas_ind_list_last = &ivas_ind_list_zero[*( hBstr->ivas_max_num_indices )];
+ WHILE( hBstr->ind_list[0].nb_bits > 0 && hBstr->ind_list < ivas_ind_list_last )
+ {
+ hBstr->ind_list++;
+ }
+
+ IF( hBstr->ind_list >= ivas_ind_list_last )
+ {
+
+ /* no available empty slot -> need to re-allocate the buffer */
+ 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 ) )
+ {
+ return error;
+ }
+ }
+ }
+ ELSE
+ {
+#ifdef DEBUGGING
+ 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 );
+#else
+ 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 );
+#endif
+ }
+ }
+
+ return error;
+}
+
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+const char *named_indices_table[] = {
+ "IND_IVAS_FORMAT",
+ "IND_SMODE_OMASA",
+ "IND_SMODE",
+ "IND_SID_TYPE",
+ "IND_BWIDTH",
+ "IND_CORE",
+ "IND_PPP_NELP_MODE",
+ "IND_ACELP_16KHZ",
+ "IND_ACELP_SIGNALLING",
+ "IND_SHARP_FLAG",
+ "IND_MDCT_CORE",
+ "IND_TCX_CORE",
+ "IND_BWE_FLAG",
+ "IND_HQ_SWITCHING_FLG",
+ "IND_LAST_L_FRAME",
+ "IND_VAD_FLAG",
+ "IND_HQ_BWIDTH",
+ "IND_TC_SUBFR",
+ "IND_TC_SUBFR",
+ "IND_TC_SUBFR",
+ "IND_TC_SUBFR",
+ "IND_GSC_IVAS_SP",
+ "IND_LSF_PREDICTOR_SELECT_BIT",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_LSF",
+ "IND_MID_FRAME_LSF_INDEX",
+ "IND_ISF_0_0",
+ "IND_ISF_0_1",
+ "IND_ISF_0_2",
+ "IND_ISF_0_3",
+ "IND_ISF_0_4",
+ "IND_ISF_1_0",
+ "IND_ISF_1_1",
+ "IND_ISF_1_2",
+ "IND_ISF_1_3",
+ "IND_ISF_1_4",
+ "IND_IC_LSF_PRED",
+ "IND_GSC_ATTACK",
+ "IND_GSC_SWB_SPEECH",
+ "IND_NOISE_LEVEL",
+ "IND_HF_NOISE",
+ "IND_PIT_CONTR_IDX",
+ "IND_FEC_CLAS",
+ "IND_FEC_ENR",
+ "IND_FEC_POS",
+ "IND_ES_PRED",
+ "IND_HARM_FLAG_ACELP",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "IND_ALG_CDBK_4T64_2_24KBIT",
+ "TAG_ALG_CDBK_4T64_24KBIT_END",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "IND_HF_GAIN_MODIFICATION",
+ "TAG_ACELP_SUBFR_LOOP_END",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_MEAN_GAIN2",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_TMP",
+ "IND_Y_GAIN_HF",
+ "IND_HQ_VOICING_FLAG",
+ "IND_HQ_SWB_CLAS",
+ "IND_NF_IDX",
+ "IND_LC_MODE",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_YNRM",
+ "IND_SWB_FENV_HQ",
+ "IND_SWB_FENV_HQ",
+ "IND_SWB_FENV_HQ",
+ "IND_SWB_FENV_HQ",
+ "IND_SWB_FENV_HQ",
+ "IND_FB_FENV_HQ",
+ "IND_FB_FENV_HQ",
+ "IND_FB_FENV_HQ",
+ "IND_FB_FENV_HQ",
+ "IND_FB_FENV_HQ",
+ "IND_DELTA_ENV_HQ",
+ "IND_HVQ_BWE_NL",
+ "IND_HVQ_BWE_NL",
+ "IND_NUM_PEAKS",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_POS_IDX",
+ "IND_FLAGN",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_PG_IDX",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_PEAKS",
+ "IND_HVQ_NF_GAIN",
+ "IND_HVQ_NF_GAIN",
+ "IND_HQ2_SWB_CLAS",
+ "IND_HQ2_DENG_MODE",
+ "IND_HQ2_DENG_8SMODE",
+ "IND_HQ2_DENG_8SMODE_N0",
+ "IND_HQ2_DENG_8SMODE_N1",
+ "IND_HQ2_DENG_8SPOS",
+ "IND_HQ2_DENG_8SDEPTH",
+ "IND_HQ2_DENG_HMODE",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_DIFF_ENERGY",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_P2A_FLAGS",
+ "IND_HQ2_LAST_BA_MAX_BAND",
+ "IND_HQ2_LAST_BA_MAX_BAND",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_START",
+ "IND_RC_END",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_HVQ_PVQ_GAIN",
+ "IND_NOISINESS",
+ "IND_ENERGY",
+ "IND_CNG_HO",
+ "IND_SID_BW",
+ "IND_CNG_ENV1",
+ "IND_WB_FENV",
+ "IND_WB_CLASS",
+ "IND_IG1",
+ "IND_IG2A",
+ "IND_IG2B",
+ "IND_NELP_FID",
+ "IND_DELTALAG",
+ "IND_POWER",
+ "IND_AMP0",
+ "IND_AMP1",
+ "IND_GLOBAL_ALIGNMENT",
+ "IND_PVQ_FINE_GAIN",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_UV_FLAG",
+ "IND_SHB_SUBGAIN",
+ "IND_SHB_FRAMEGAIN",
+ "IND_STEREO_ICBWE_MSFLAG",
+ "IND_SHB_ENER_SF",
+ "IND_SHB_RES_GS",
+ "IND_SHB_RES_GS",
+ "IND_SHB_RES_GS",
+ "IND_SHB_RES_GS",
+ "IND_SHB_RES_GS",
+ "IND_SHB_VF",
+ "IND_SHB_LSF",
+ "IND_SHB_LSF",
+ "IND_SHB_LSF",
+ "IND_SHB_LSF",
+ "IND_SHB_LSF",
+ "IND_SHB_MIRROR",
+ "IND_SHB_GRID",
+ "IND_SWB_CLASS",
+ "IND_SWB_TENV",
+ "IND_SWB_TENV",
+ "IND_SWB_TENV",
+ "IND_SWB_TENV",
+ "IND_SWB_FENV",
+ "IND_SWB_FENV",
+ "IND_SWB_FENV",
+ "IND_SWB_FENV",
+ "IND_SHB_CNG_GAIN",
+ "IND_DITHERING",
+ "IND_FB_SLOPE",
+ "IND_HQ2_SPT_SHORTEN",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_TCQ",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_SUBBAND_GAIN",
+ "IND_HQ2_DUMMY",
+ "IND_LAGINDICES",
+ "IND_NOISEG",
+ "IND_AUDIO_GAIN",
+ "IND_AUDIO_DELAY",
+ "IND_AUDIO_DELAY",
+ "IND_AUDIO_DELAY",
+ "IND_AUDIO_DELAY",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "IND_NQ2",
+ "TAG_HR_BWE_LOOP_END",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_CELP_SUBFRAME",
+ "IND_CORE_SWITCHING_AUDIO_DELAY",
+ "IND_CORE_SWITCHING_AUDIO_GAIN",
+ "IND_STEREO_ICBWE_REF",
+ "IND_STEREO_ICBWE_SP",
+ "IND_STEREO_ICBWE_GS",
+ "IND_STEREO_REFCHAN",
+ "IND_STEREO_CORRSTATS",
+ "IND_STEREO_GD",
+ "IND_STEREO_LRTD_FLAG",
+ "IND_STEREO_LPC_REUSE",
+ "IND_STEREO_TD_ALPHA",
+ "IND_STEREO_2ND_CODER_T",
+ "IND_UNUSED"
+};
+#endif
+
+
+/*-------------------------------------------------------------------*
+ * push_indice()
+ *
+ * Push a new indice into the buffer
+ *-------------------------------------------------------------------*/
+
+ivas_error push_indice(
+ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
+ Word16 id, /* i : ID of the indice */
+ UWord16 value, /* i : value of the quantized indice */
+ Word16 nb_bits /* i : number of bits used to quantize the indice */
+)
+{
+ Word16 i;
+ Word16 j;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+ /* check the limits of the list of indices */
+ IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
+ {
+#ifdef DEBUGGING
+ return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices (frame %d) !\n", frame );
+#else
+ return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices!\n" );
+#endif
+ }
+
+ /* find the location in the list of indices based on ID */
+ i = hBstr->nb_ind_tot;
+ move16();
+ test();
+ WHILE( i > 0 && ( id < hBstr->ind_list[i - 1].id ) )
+ {
+ test();
+ i = sub( i, 1 );
+ }
+
+ /* shift indices, if the new ID is to be written somewhere inside the list */
+ IF( i < hBstr->nb_ind_tot )
+ {
+ FOR( j = hBstr->nb_ind_tot; j > i; j-- )
+ {
+ hBstr->ind_list[j].id = hBstr->ind_list[j - 1].id;
+ hBstr->ind_list[j].nb_bits = hBstr->ind_list[j - 1].nb_bits;
+ hBstr->ind_list[j].value = hBstr->ind_list[j - 1].value;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[j - 1].function_name, 100 );
+#endif
+ move16();
+ move16();
+ move16();
+ }
+ }
+
+
+ /* store the new indice in the list */
+ hBstr->ind_list[i].id = id;
+ hBstr->ind_list[i].value = value;
+ hBstr->ind_list[i].nb_bits = nb_bits;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( hBstr->ind_list[i].function_name, named_indices_table[id], 100 );
+#endif
+ move16();
+ move16();
+ move16();
+
+ /* updates */
+ hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
+ hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
+ move16();
+ move16();
+
+ return error;
+}
+
+/*-------------------------------------------------------------------*
+ * push_next_indice()
+ *
+ * Push a new indice into the buffer at the next position
+ *-------------------------------------------------------------------*/
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ivas_error push_next_indice_(
+ const char *caller,
+#else
+ivas_error push_next_indice(
+#endif
+ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
+ UWord16 value, /* i : value of the quantized indice */
+ Word16 nb_bits /* i : number of bits used to quantize the indice */
+)
+{
+ Word16 prev_id;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+
+ /* check the limits of the list of indices */
+ IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
+ {
+ return error;
+ }
+
+ /* get the id of the previous indice -> it will be re-used */
+ IF( hBstr->nb_ind_tot > 0 )
+ {
+ prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
+ }
+ ELSE
+ {
+ prev_id = 0;
+ }
+ move16();
+
+ /* store the values in the list */
+ hBstr->ind_list[hBstr->nb_ind_tot].id = prev_id;
+ hBstr->ind_list[hBstr->nb_ind_tot].value = value;
+ hBstr->ind_list[hBstr->nb_ind_tot].nb_bits = nb_bits;
+ move16();
+ move16();
+ move16();
+
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( hBstr->ind_list[hBstr->nb_ind_tot].function_name, caller, 100 );
+#endif
+
+ /* updates */
+ hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
+ hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
+ move16();
+ move16();
+
+ return error;
+}
+
+
+/*-------------------------------------------------------------------*
+ * push_next_bits()
+ * Push a bit buffer into the buffer at the next position
+ *-------------------------------------------------------------------*/
+
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ivas_error push_next_bits_(
+ const char *caller,
+#else
+ivas_error push_next_bits(
+#endif
+ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
+ const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */
+ const Word16 nb_bits /* i : number of bits to pack */
+)
+{
+ UWord16 code;
+ Word16 i, nb_bits_m15;
+ Indice *ptr;
+ Word16 prev_id;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+ ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
+
+ /* get the id of the previous indice -> will be re-used */
+ IF( hBstr->nb_ind_tot > 0 )
+ {
+ prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id;
+ move16();
+ }
+ ELSE
+ {
+ prev_id = 0;
+ move16();
+ }
+ nb_bits_m15 = sub( nb_bits, 15 );
+
+ FOR( i = 0; i < nb_bits_m15; i += 16 )
+ {
+ 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] ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
+
+ /* check the limits of the list of indices */
+ IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
+ {
+#ifdef DEBUGGING
+ return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
+#else
+ return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
+#endif
+ }
+ ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
+
+ ptr->value = code;
+ ptr->nb_bits = 16;
+ ptr->id = prev_id;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( ptr->function_name, caller, 100 );
+#endif
+ hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
+ move16();
+ move16();
+ move16();
+ move16();
+
+ ++ptr;
+ }
+
+ FOR( ; i < nb_bits; ++i )
+ {
+ /* check the limits of the list of indices */
+ IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) )
+ {
+#ifdef DEBUGGING
+ return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n", frame );
+#else
+ return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices!\n" );
+#endif
+ }
+ ptr = &hBstr->ind_list[hBstr->nb_ind_tot];
+
+ ptr->value = bits[i];
+ ptr->nb_bits = 1;
+ ptr->id = prev_id;
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( ptr->function_name, caller, 100 );
+#endif
+ hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 );
+ move16();
+ move16();
+ move16();
+ move16();
+
+ ++ptr;
+ }
+
+ hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits );
+ move16();
+
+ return error;
+}
+
+
+/*-------------------------------------------------------------------*
+ * find_indice()
+ *
+ * Find indice based on its id
+ *-------------------------------------------------------------------*/
+
+/*! r: result: index of the indice in the list, -1 if not found */
+Word16 find_indice(
+ BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
+ const Word16 id, /* i : ID of the indice */
+ UWord16 *value, /* o : value of the quantized indice */
+ Word16 *nb_bits /* o : number of bits used to quantize the indice */
+)
+{
+ Word16 i;
+
+ for ( i = 0; i < hBstr->nb_ind_tot; i++ )
+ {
+ if ( hBstr->ind_list[i].id == id && hBstr->ind_list[i].nb_bits > 0 )
+ {
+ *value = hBstr->ind_list[i].value;
+ *nb_bits = hBstr->ind_list[i].nb_bits;
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------*
+ * delete_indice()
+ *
+ * Delete indice based on its id (note, that nb_ind_tot and nb_bits_tot are updated)
+ *-------------------------------------------------------------------*/
+
+/*! r: number of deleted indices */
+UWord16 delete_indice(
+ BSTR_ENC_HANDLE hBstr, /* i : encoder bitstream handle */
+ const Word16 id /* i : ID of the indice */
+)
+{
+ Word16 i, j;
+
+ j = 0;
+ FOR( i = 0; i < hBstr->nb_ind_tot; i++ )
+ {
+ IF( EQ_16( hBstr->ind_list[i].id, id ) )
+ {
+ hBstr->nb_bits_tot -= hBstr->ind_list[i].nb_bits;
+ move16();
+ continue;
+ }
+
+ IF( LT_16( j, i ) )
+ {
+ /* shift the indice left */
+ hBstr->ind_list[j].id = hBstr->ind_list[i].id;
+ hBstr->ind_list[j].value = hBstr->ind_list[i].value;
+ hBstr->ind_list[j].nb_bits = hBstr->ind_list[i].nb_bits;
+ move16();
+ move16();
+ move16();
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ strncpy( hBstr->ind_list[j].function_name, hBstr->ind_list[i].function_name, 100 );
+#endif
+ }
+
+ j++;
+ }
+
+ hBstr->nb_ind_tot = j;
+
+ FOR( ; j < i; j++ )
+ {
+ /* reset the shifted indices at the end of the list */
+ hBstr->ind_list[j].nb_bits = -1;
+ move16();
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ sprintf( hBstr->ind_list[j].function_name, "RESET in delete_indice" );
+#endif
+ }
+
+ return i - j;
+}
+
+
+/*-------------------------------------------------------------------*
+ * get_next_indice()
+ *
+ * Get the next indice from the buffer
+ *-------------------------------------------------------------------*/
+
+/*! r: value of the indice */
+UWord16 get_next_indice_fx(
+ Decoder_State *st_fx, /* i/o: decoder state structure */
+ Word16 nb_bits /* i : number of bits that were used to quantize the indice */
+)
+{
+ UWord16 value;
+ Word16 i;
+ Word16 nbits_total;
+
+ assert( nb_bits <= 16 );
+ value = 0;
+ move16();
+
+ nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
+
+ /* detect corrupted bitstream */
+ IF( GT_16( add( st_fx->next_bit_pos, nb_bits ), nbits_total ) )
+ {
+ st_fx->BER_detect = 1;
+ move16();
+ return ( 0 );
+ }
+
+ FOR( i = 0; i < nb_bits; i++ )
+ {
+ value = (UWord16) L_shl( value, 1 );
+ value = (UWord16) L_add( value, st_fx->bit_stream[add( st_fx->next_bit_pos, i )] );
+ }
+
+ /* update the position in the bitstream */
+ st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
+ move16();
+
+ return value;
+}
+
+
+/*-------------------------------------------------------------------*
+ * get_next_indice_1()
+ *
+ * Get the next 1-bit indice from the buffer
+ *-------------------------------------------------------------------*/
+
+/*! r: value of the indice */
+UWord16 get_next_indice_1_fx(
+ Decoder_State *st_fx /* i/o: decoder state structure */
+)
+{
+ Word16 nbits_total;
+ nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
+
+ /* detect corrupted bitstream */
+ test();
+ test();
+ test();
+ IF( ( GT_16( add( st_fx->next_bit_pos, 1 ), nbits_total ) && EQ_16( st_fx->codec_mode, MODE1 ) ) ||
+ ( 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 */
+ )
+ {
+ st_fx->BER_detect = 1;
+ move16();
+ return ( 0 );
+ }
+
+ return st_fx->bit_stream[st_fx->next_bit_pos++];
+}
+
+
+/*-------------------------------------------------------------------*
+ * get_next_indice_tmp()
+ *
+ * update the total number of bits and the position in the bitstream
+ *-------------------------------------------------------------------*/
+
+void get_next_indice_tmp_fx(
+ Decoder_State *st_fx, /* o : decoder state structure */
+ Word16 nb_bits /* i : number of bits that were used to quantize the indice */
+)
+{
+ /* update the position in the bitstream */
+ st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
+ move16();
+
+ return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * get_indice()
+ *
+ * Get indice at specific position in the buffer
*-------------------------------------------------------------------*/
-void get_next_indice_tmp_fx(
- Decoder_State *st_fx, /* o : decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
+/*! r: value of the indice */
+UWord16 get_indice_fx(
+ Decoder_State *st_fx, /* i/o: decoder state structure */
+ Word16 pos, /* i : absolute position in the bitstream (update after the read) */
+ Word16 nb_bits /* i : number of bits that were used to quantize the indice */
)
{
- /* update the position in the bitstream */
- st_fx->next_bit_pos = add( st_fx->next_bit_pos, nb_bits );
+ UWord16 value;
+ Word16 i;
+ Word32 nbits_total;
+
+ assert( nb_bits <= 16 );
+
+ nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
+
+ /* detect corrupted bitstream */
+ IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), nbits_total ) )
+ {
+ st_fx->BER_detect = 1;
+ move16();
+ return ( 0 );
+ }
+
+ value = 0;
+ move16();
+ FOR( i = 0; i < nb_bits; i++ )
+ {
+ value = lshl( value, 1 );
+ value = add( value, st_fx->bit_stream[pos + i] );
+ }
+
+ return value;
+}
+
+
+/*-------------------------------------------------------------------*
+ * get_indice_st()
+ *
+ * Get indice at specific position in the buffer
+ *-------------------------------------------------------------------*/
+
+/*! r: value of the indice */
+UWord16 get_indice_st(
+ Decoder_State *st, /* i/o: decoder state structure */
+ const Word32 element_brate, /* i : element bitrate */
+ const Word16 pos, /* i : absolute position in the bitstream */
+ const Word16 nb_bits /* i : number of bits to quantize the indice */
+)
+{
+ UWord16 value;
+ Word16 i;
+
+ assert( nb_bits <= 16 );
+
+ /* detect corrupted bitstream */
+ IF( GT_32( L_deposit_l( add( pos, nb_bits ) ), Mpy_32_32( element_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ) )
+ {
+ st->BER_detect = 1;
+ move16();
+ return ( 0 );
+ }
+
+ value = 0;
move16();
+ FOR( i = 0; i < nb_bits; i++ )
+ {
+ value = shl( value, 1 );
+ value = add( value, st->bit_stream[pos + i] );
+ }
+
+ return value;
}
+
/*-------------------------------------------------------------------*
* get_indice_1_fx( )
*
* Get a 1-bit indice at specific position in the buffer
*-------------------------------------------------------------------*/
-UWord16 get_indice_1_fx( /* o : value of the indice */
- Decoder_State *st_fx, /* i/o: decoder state structure */
- Word16 pos /* i : absolute position in the bitstream (update after the read) */
+/*! r: value of the indice */
+UWord16 get_indice_1_fx(
+ Decoder_State *st_fx, /* i/o: decoder state structure */
+ Word16 pos /* i : absolute position in the bitstream (update after the read) */
)
{
Word16 nbits_total;
+
nbits_total = extract_l( Mpy_32_32( st_fx->total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
+
/* detect corrupted bitstream */
IF( GT_16( add( pos, 1 ), nbits_total ) )
{
- st_fx->BER_detect = 1;
- move16();
- return ( 0 );
+ st_fx->BER_detect = 1;
+ move16();
+ return ( 0 );
+ }
+
+ return st_fx->bit_stream[pos];
+}
+
+
+/*-------------------------------------------------------------------*
+ * reset_indices_enc_fx()
+ *
+ * Reset the buffer of indices
+ *-------------------------------------------------------------------*/
+
+void reset_indices_enc_fx(
+ BSTR_ENC_HANDLE hBstr, /* i/o: encoder state structure */
+ const Word16 max_num_indices /* i : max number of indices */
+)
+{
+ Word16 i;
+
+ hBstr->nb_ind_tot = 0;
+ move16();
+ hBstr->nb_bits_tot = 0;
+ move16();
+ FOR( i = 0; i < max_num_indices; i++ )
+ {
+ hBstr->ind_list[i].nb_bits = -1;
+ move16();
+ }
+
+ return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * reset_indices_dec()
+ *
+ * Reset the buffer of decoder indices
+ *-------------------------------------------------------------------*/
+
+void reset_indices_dec(
+ Decoder_State *st )
+{
+ st->next_bit_pos = 0;
+ move16();
+
+ return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * write_indices_to_stream()
+ *
+ * writing forward or backward to a serial stream
+ *-------------------------------------------------------------------*/
+
+static Word16 write_indices_to_stream_fx(
+ Indice *ind_list,
+ UWord16 **pt_stream,
+ const Word16 inc,
+ const Word16 num_indices )
+{
+ Word16 i, k;
+ Word16 value, nb_bits;
+ UWord16 mask;
+
+ FOR( i = 0; i < num_indices; i++ )
+ {
+ value = ind_list[i].value;
+ nb_bits = ind_list[i].nb_bits;
+ move16();
+ move16();
+
+ IF( nb_bits > 0 )
+ {
+ /* mask from MSB to LSB */
+ mask = (UWord16) L_shl( 1, sub( nb_bits, 1 ) );
+
+ /* write bit by bit */
+ FOR( k = 0; k < nb_bits; k++ )
+ {
+ IF( L_and( value, mask ) )
+ {
+ **pt_stream = 1;
+ move16();
+ *pt_stream += inc;
+ }
+ ELSE
+ {
+ **pt_stream = 0;
+ move16();
+ *pt_stream += inc;
+ }
+
+ mask = (UWord16) L_shr( mask, 1 );
+ }
+ }
+ }
+
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------*
+ * write_indices_element()
+ *
+ * Bitstream writing function of one element (one SCE or one CPE)
+ *-------------------------------------------------------------------*/
+
+static ivas_error write_indices_element_fx(
+ Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */
+ UWord16 **pt_stream, /* i : pointer to bitstream buffer */
+ const Word16 is_SCE, /* i : flag to distingusih SCE and CPE */
+ const Word16 element_id /* i : id of the SCE or CPE */
+)
+{
+ Word16 ch;
+ Encoder_State **sts = NULL;
+ UWord16 *pt_stream_loc;
+ UWord16 *pt_stream_backup;
+ UWord16 *pt_stream_end;
+ Word16 nb_bits_tot_metadata;
+ Word16 nb_ind_tot_metadata;
+
+ Indice *ind_list_metadata;
+ Word16 n, n_channels;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+ ind_list_metadata = NULL;
+ nb_ind_tot_metadata = 0;
+ move16();
+
+ IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MONO_FORMAT ) )
+ {
+ sts = st_ivas->hSCE[0]->hCoreCoder;
+ nb_bits_tot_metadata = 0;
+ move16();
+ }
+ ELSE
+ {
+ nb_bits_tot_metadata = 0;
+ move16();
+ test();
+ test();
+ IF( is_SCE && st_ivas->hSCE[element_id] != NULL )
+ {
+ sts = st_ivas->hSCE[element_id]->hCoreCoder;
+
+ IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
+ {
+ nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot;
+ ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list;
+ nb_ind_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot;
+ move16();
+ move16();
+ }
+ }
+ ELSE IF( !is_SCE && st_ivas->hCPE[element_id] != NULL )
+ {
+ sts = st_ivas->hCPE[element_id]->hCoreCoder;
+
+ IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
+ {
+ nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot;
+ ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list;
+ nb_ind_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot;
+ move16();
+ move16();
+ }
+ }
+ }
+
+ n_channels = 1;
+ move16();
+ if ( GT_16( sts[0]->element_mode, IVAS_CPE_DFT ) )
+ {
+ n_channels = CPE_CHANNELS;
+ move16();
+ }
+
+ /*----------------------------------------------------------------*
+ * Bitstream packing (conversion of individual indices into a serial stream)
+ *----------------------------------------------------------------*/
+
+ pt_stream_loc = *pt_stream;
+ pt_stream_end = pt_stream_loc;
+
+ FOR( n = 0; n < n_channels; n++ )
+ {
+ /* write the metadata buffer */
+ test();
+ IF( n == 0 && nb_bits_tot_metadata != 0 )
+ {
+ pt_stream_backup = pt_stream_loc;
+
+ FOR( ch = 0; ch < n_channels; ch++ )
+ {
+ pt_stream_loc += sts[ch]->hBstr->nb_bits_tot;
+ }
+ pt_stream_loc += nb_bits_tot_metadata - 1;
+ pt_stream_end = pt_stream_loc + 1;
+
+ write_indices_to_stream_fx( ind_list_metadata, &pt_stream_loc, -1,
+ nb_ind_tot_metadata );
+
+ /* restore previous pointer position */
+ pt_stream_loc = pt_stream_backup;
+ }
+ write_indices_to_stream_fx( sts[n]->hBstr->ind_list, &pt_stream_loc, 1,
+ sts[n]->hBstr->nb_ind_tot );
+
+ if ( pt_stream_loc > pt_stream_end )
+ {
+ pt_stream_end = pt_stream_loc;
+ }
+ }
+
+#if defined( DEBUGGING ) && defined( DBG_BITSTREAM_ANALYSIS )
+ if ( is_SCE ) /* EVS and SCE */
+ {
+ static FILE *f1 = 0;
+
+ if ( f1 == 0 )
+ f1 = fopen( "bitstream_text", "w" );
+
+ for ( int16_t i = 0; i < sts[0]->hBstr->nb_ind_tot; i++ )
+ {
+ Indice *ind_list = sts[0]->hBstr->ind_list;
+ int16_t value = ind_list[i].value;
+ int16_t nb_bits = ind_list[i].nb_bits;
+ char *function_name = ind_list[i].function_name;
+
+ fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
+ }
+
+ if ( st_ivas->hSCE[element_id]->hMetaData != NULL )
+ {
+ for ( int16_t i = 0; i < st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot; i++ )
+ {
+ Indice *ind_list = st_ivas->hSCE[element_id]->hMetaData->ind_list;
+ int16_t value = ind_list[i].value;
+ int16_t nb_bits = ind_list[i].nb_bits;
+ char *function_name = ind_list[i].function_name;
+
+ fprintf( f1, "%d %d %d %s %d %d\n", frame, element_id, i, function_name, nb_bits, value );
+ }
+ }
+ }
+ else
+ {
+ static FILE *f1 = 0;
+
+ if ( f1 == 0 )
+ f1 = fopen( "bitstream_text", "w" );
+
+
+ for ( n = 0; n < n_channels; n++ )
+ {
+ for ( int16_t i = 0; i < sts[n]->hBstr->nb_ind_tot; i++ )
+ {
+ Indice *ind_list = sts[n]->hBstr->ind_list;
+ int16_t value = ind_list[i].value;
+ int16_t nb_bits = ind_list[i].nb_bits;
+ char *function_name = ind_list[i].function_name;
+
+ fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, n, i, function_name, nb_bits, value );
+ }
+ }
+
+ if ( st_ivas->hCPE[element_id]->hMetaData != NULL )
+ {
+ for ( int16_t i = 0; i < st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot; i++ )
+ {
+ Indice *ind_list = st_ivas->hCPE[element_id]->hMetaData->ind_list;
+ int16_t value = ind_list[i].value;
+ int16_t nb_bits = ind_list[i].nb_bits;
+ char *function_name = ind_list[i].function_name;
+
+ fprintf( f1, "%d %d %d %d %s %d %d\n", frame, element_id, -1, i, function_name, nb_bits, value );
+ }
+ }
+ }
+#endif
+
+ /*----------------------------------------------------------------*
+ * Clearing of indices
+ * Reset index pointers
+ *----------------------------------------------------------------*/
+
+ IF( is_SCE ) /* EVS and SCE */
+ {
+ IF( st_ivas->hSCE[element_id]->hMetaData != NULL )
+ {
+ reset_indices_enc_fx( st_ivas->hSCE[element_id]->hMetaData, st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot );
+ }
+
+ reset_indices_enc_fx( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot );
+ }
+ ELSE
+ {
+ IF( st_ivas->hCPE[element_id]->hMetaData != NULL )
+ {
+ reset_indices_enc_fx( st_ivas->hCPE[element_id]->hMetaData, st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot );
+ }
+
+ FOR( n = 0; n < n_channels; n++ )
+ {
+ reset_indices_enc_fx( sts[n]->hBstr, sts[n]->hBstr->nb_ind_tot );
+ }
+ }
+
+ /* update pointer */
+ *pt_stream = pt_stream_end;
+
+ return error;
+}
+
+
+/*-------------------------------------------------------------------*
+ * write_indices_ivas()
+ *
+ * Write the buffer of indices to a serial bitstream buffer,
+ * each bit represented as a uint16_t of value 0 or 1
+ *-------------------------------------------------------------------*/
+
+ivas_error write_indices_ivas_fx(
+ Encoder_Struct *st_ivas, /* i/o: encoder state structure */
+ UWord16 *bit_stream, /* i/o: output bitstream */
+ UWord16 *num_bits /* i : number of indices written to output */
+)
+{
+ Word16 i, n;
+ UWord16 *pt_stream;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+ pt_stream = bit_stream;
+ FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i )
+ {
+ bit_stream[i] = 0;
+ move16();
+ }
+
+ /*-----------------------------------------------------------------*
+ * Encode Payload
+ *-----------------------------------------------------------------*/
+
+ FOR( n = 0; n < st_ivas->nSCE; n++ )
+ {
+ write_indices_element_fx( st_ivas, &pt_stream, 1, n );
+ }
+
+ FOR( n = 0; n < st_ivas->nCPE; n++ )
+ {
+ write_indices_element_fx( st_ivas, &pt_stream, 0, n );
}
- return st_fx->bit_stream[pos];
+ *num_bits = (UWord16) ( pt_stream - bit_stream );
+ move16();
+
+ return error;
}
+
/*-------------------------------------------------------------------*
- * reset_indices_enc_fx()
+ * decoder_selectCodec()
+ *
*
- * Reset the buffer of indices
*-------------------------------------------------------------------*/
-void reset_indices_enc_fx(
- BSTR_ENC_HANDLE hBstr, /* i/o: encoder state structure */
- const Word16 max_num_indices /* i : max number of indices */
+static void decoder_selectCodec(
+ Decoder_State *st, /* i/o: decoder state structure */
+ const Word32 total_brate, /* i : total bitrate */
+ const Word16 bit0 /* i : first bit */
)
{
- Word16 i;
+ /* set the AMR-WB IO flag */
+ IF( rate2AMRWB_IOmode( total_brate ) != -1 )
+ {
+ st->Opt_AMR_WB = 1;
+ move16();
+ }
+ ELSE IF( total_brate != FRAME_NO_DATA )
+ {
+ st->Opt_AMR_WB = 0;
+ move16();
+ }
- hBstr->nb_ind_tot = 0;
- move16();
- hBstr->nb_bits_tot = 0;
- move16();
- FOR( i = 0; i < max_num_indices; i++ )
+ IF( st->Opt_AMR_WB )
{
- hBstr->ind_list[i].nb_bits = -1;
+ st->codec_mode = MODE1;
+ move16();
+ }
+ else
+ {
+ st->codec_mode = get_codec_mode( total_brate );
+
+ IF( st->codec_mode == -1 )
+ {
+ SWITCH( total_brate )
+ {
+ case 0:
+ st->codec_mode = st->last_codec_mode;
+ move16();
+ BREAK;
+ case 2400:
+ st->codec_mode = st->last_codec_mode;
+ move16();
+ BREAK;
+ case 2800:
+ st->codec_mode = MODE1;
+ move16();
+ break;
+ default: /* validate that total_brate (derived from RTP packet or a file header) is one of the defined bitrates */
+ st->codec_mode = st->last_codec_mode;
+ move16();
+ st->bfi = 1;
+ move16();
+ break;
+ }
+ }
+ }
+
+ IF( st->ini_frame == 0 )
+ {
+ if ( st->codec_mode == -1 )
+ {
+ st->codec_mode = MODE1;
+ move16();
+ }
+ st->last_codec_mode = st->codec_mode;
move16();
}
+ /* set SID/CNG type */
+ IF( total_brate == SID_2k40 )
+ {
+ IF( bit0 == 0 )
+ {
+ st->cng_type = LP_CNG;
+ move16();
+
+ /* force MODE1 when selecting LP_CNG */
+ st->codec_mode = MODE1;
+ move16();
+ }
+ ELSE IF( bit0 == 1 )
+ {
+ st->cng_type = FD_CNG;
+ move16();
+
+ test();
+ if ( st->last_codec_mode == MODE2 && st->last_total_brate == ACELP_13k20 )
+ {
+ st->codec_mode = MODE1;
+ move16();
+ }
+ }
+ }
+
return;
}
+/*-------------------------------------------------------------------*
+ * dec_prm_core()
+ *
+ *
+ *-------------------------------------------------------------------*/
+
static void dec_prm_core( Decoder_State *st )
{
Word16 n, frame_size_index, num_bits;
@@ -459,8 +4028,11 @@ static void dec_prm_core( Decoder_State *st )
move16();
}
}
+
+ return;
}
+
/*-----------------------------------------------------------------*
* decision_matrix_core_dec()
*
@@ -599,6 +4171,7 @@ static void decision_matrix_core_dec(
return;
}
+
/*-------------------------------------------------------------------*
* mdct_switching_dec()
*
@@ -671,172 +4244,517 @@ void mdct_switching_dec_fx(
}
ELSE IF( EQ_16( st->codec_mode, MODE2 ) && EQ_16( st->mdct_sw_enable, MODE2 ) )
{
- /* Read ahead core mode signaling */
- Word16 next_bit_pos_save;
- Word16 core_save;
- Word16 bwidth_save;
+ /* Read ahead core mode signaling */
+ Word16 next_bit_pos_save;
+ Word16 core_save;
+ Word16 bwidth_save;
+
+ next_bit_pos_save = st->next_bit_pos;
+ move16();
+ core_save = st->core;
+ move16();
+ bwidth_save = st->bwidth;
+ move16();
+
+ dec_prm_core( st ); /* sets st->core */
+
+ IF( EQ_16( st->core, HQ_CORE ) )
+ {
+ /* Trigger HQ_CORE */
+ st->codec_mode = MODE1;
+ move16();
+ st->mdct_sw = MODE2;
+ move16();
+ }
+ ELSE
+ {
+ /* Rewind bitstream */
+ st->next_bit_pos = next_bit_pos_save;
+ move16();
+ if ( st->bfi != 0 )
+ {
+ st->core = core_save;
+ move16();
+ }
+ /* always reset bwidth, to not interfere with BER logic */
+ st->bwidth = bwidth_save;
+ move16();
+ }
+ }
+ }
+
+ return;
+}
+
+
+/*-------------------------------------------------------------------*
+ * reset_elements()
+ *
+ * Simulate packet losses by reading FEC pattern from external file
+ *-------------------------------------------------------------------*/
+
+Decoder_State **reset_elements(
+ Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
+)
+{
+ Word16 k, n;
+ Decoder_State **sts = NULL; /* to avoid compilation warning */
+
+ FOR( k = 0; k < st_ivas->nSCE; k++ )
+ {
+ sts = st_ivas->hSCE[k]->hCoreCoder;
+
+ sts[0]->bfi = 0;
+ sts[0]->BER_detect = 0;
+ sts[0]->mdct_sw_enable = 0;
+ sts[0]->mdct_sw = 0;
+
+ move16();
+ move16();
+ move16();
+ move16();
+
+ reset_indices_dec( sts[0] );
+ }
+
+ FOR( k = 0; k < st_ivas->nCPE; k++ )
+ {
+ sts = st_ivas->hCPE[k]->hCoreCoder;
+
+ FOR( n = 0; n < CPE_CHANNELS; n++ )
+ {
+ sts[n]->bfi = 0;
+ sts[n]->BER_detect = 0;
+ sts[n]->mdct_sw_enable = 0;
+ sts[n]->mdct_sw = 0;
+
+ move16();
+ move16();
+ move16();
+ move16();
+
+ reset_indices_dec( sts[n] );
+ }
+ }
+
+ return sts; /* return last decoder state */
+}
+
+
+/*-------------------------------------------------------------------*
+ * ivas_set_bitstream_pointers()
+ *
+ * Set bitstream pointers for every SCE/CPE Core-Decoder
+ *-------------------------------------------------------------------*/
+
+void ivas_set_bitstream_pointers(
+ Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
+)
+{
+ Word16 k, num_bits;
+ Decoder_State **sts;
+
+ num_bits = 0;
+
+ /* set bitstream pointers for SCEs */
+ for ( k = 0; k < st_ivas->nSCE; k++ )
+ {
+ sts = st_ivas->hSCE[k]->hCoreCoder;
+ sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
+ num_bits += (Word16) ( st_ivas->hSCE[k]->element_brate / FRAMES_PER_SEC );
+ }
+
+ /* set bitstream pointers for CPEs */
+ for ( k = 0; k < st_ivas->nCPE; k++ )
+ {
+ sts = st_ivas->hCPE[k]->hCoreCoder;
+ sts[0]->bit_stream = st_ivas->bit_stream + num_bits;
+ num_bits += (Word16) ( st_ivas->hCPE[k]->element_brate / FRAMES_PER_SEC );
+ }
+
+ return;
+}
+
+#ifdef DEBUGGING
+
+/*-------------------------------------------------------------------*
+ * file_read_FECpattern()
+ *
+ * Simulate packet losses by reading FEC pattern from external file
+ *-------------------------------------------------------------------*/
+
+static ivas_error file_read_FECpattern(
+ Word16 *bfi )
+{
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ *bfi = 0;
+
+ /* FEC pattern file provided */
+ if ( FEC_pattern != NULL )
+ {
+ Word16 tmp = 0;
+ if ( fread( &tmp, sizeof( Word16 ), 1, FEC_pattern ) != 1 )
+ {
+ if ( feof( FEC_pattern ) != 0 )
+ {
+#ifdef WRAP_AS_EIDXOR
+ fseek( FEC_pattern, 0L, SEEK_SET );
+ fread( &tmp, sizeof( Word16 ), 1, FEC_pattern );
+#else
+ tmp = 0;
+ fseek( FEC_pattern, 0L, SEEK_SET );
+#endif
+ }
+ else
+ {
+ return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error reading the FEC pattern file !" );
+ }
+ }
+
+ if ( tmp == 2609 || tmp == 1 || tmp == (UWord16) 0x6B20 /* == G192_SYNC_BAD_FRAME */ )
+ {
+ *bfi = 1;
+ }
+ else
+ {
+ *bfi = 0;
+ }
+ }
+
+ return error;
+}
+
+#endif
+
+/*-------------------------------------------------------------------*
+ * read_indices()
+ *
+ * Detect SID, NO_DATA, BFI, etc. and set bitstream pointers
+ * Set ivas_total_brate
+ * Note: each bit is represented in bitsream buffer as a uint16_t of value 0 or 1
+ *-------------------------------------------------------------------*/
+
+/*! r: 1 = reading OK, 0 = problem */
+ivas_error read_indices_fx(
+ Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
+ UWord16 bit_stream[], /* i : bitstream buffer */
+ UWord16 num_bits, /* i : number of bits in bitstream */
+ Word16 *prev_ft_speech,
+ Word16 *CNG,
+ Word16 bfi /* i : bad frame indicator */
+)
+{
+ Word16 k;
+ Decoder_State **sts;
+ Word32 total_brate = 0;
+ move32();
+ Word16 curr_ft_good_sp, curr_ft_bad_sp;
+ Word16 g192_sid_first, sid_upd_bad, sid_update;
+ Word16 speech_bad, speech_lost;
+ Word16 n;
+ ivas_error error;
+
+ error = IVAS_ERR_OK;
+ move32();
+
+ st_ivas->BER_detect = 0;
+ move16();
+ st_ivas->num_bits = num_bits;
+ move16();
+ sts = reset_elements( st_ivas );
+
+#ifdef DEBUGGING
+ file_read_FECpattern( &st_ivas->bfi );
+ st_ivas->bfi |= bfi;
+
+ if ( bfi == FRAMEMODE_MISSING )
+ {
+ for ( k = 0; k < num_bits; k++ )
+ {
+ bit_stream[k] = 0;
+ }
+ }
+#else
+ st_ivas->bfi = bfi;
+ move16();
+#endif
+
+ /* convert the frame length to total bitrate */
+ total_brate = imult3216( num_bits, FRAMES_PER_SEC );
+ move32();
+
+ /* verify that a valid num bits value is present */
+ /* only AMRWB, EVS or IVAS bitrates or 0 (NO DATA) are allowed */
+ IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) )
+ {
+ k = 0;
+ move16();
+
+ test();
+ WHILE( LT_16( k, SIZE_IVAS_BRATE_TBL ) && NE_32( total_brate, ivas_brate_tbl[k] ) )
+ {
+ k = add( k, 1 );
+ }
+
+ test();
+ test();
+ test();
+ test();
+ IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && ( LT_16( k, SIZE_IVAS_BRATE_TBL ) || LE_32( total_brate, SID_2k40 ) ) )
+ {
+ st_ivas->element_mode_init = IVAS_SCE;
+ move16();
+ }
+ ELSE IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) && LE_32( total_brate, SID_2k40 ) )
+ {
+ st_ivas->element_mode_init = IVAS_SCE;
+ move16();
+ }
+ ELSE IF( EQ_16( k, SIZE_IVAS_BRATE_TBL ) )
+ {
+ return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) detected! Exiting ! \n", total_brate );
+ }
+ ELSE
+ {
+ st_ivas->element_mode_init = -1;
+ move16();
+ }
+ }
+ ELSE /* AMRWB or EVS */
+ {
+ st_ivas->element_mode_init = EVS_MONO;
+ move16();
+
+ IF( rate2EVSmode( total_brate, NULL ) < 0 ) /* negative value means that a valid rate was not found */
+ {
+ return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error, illegal bitrate (%d) detected! Exiting ! \n", total_brate );
+ }
+ }
- next_bit_pos_save = st->next_bit_pos;
- move16();
- core_save = st->core;
+ /* G.RX DTX handler*/
+ /* handle SID_FIRST, SID_BAD, SPEECH_LOST, NO_DATA */
+ /* (total_brate, bfi , st_CNG) = rx_handler(received frame type, [previous frame type], past CNG state, past core) */
+ curr_ft_good_sp = 0;
+ move16();
+ curr_ft_bad_sp = 0;
+ move16();
+
+ IF( is_DTXrate( total_brate ) == 0 )
+ {
+ IF( st_ivas->bfi == 0 )
+ {
+ curr_ft_good_sp = 1;
move16();
- bwidth_save = st->bwidth;
+ }
+ ELSE
+ {
+ curr_ft_bad_sp = 1;
move16();
-
- dec_prm_core( st ); /* sets st->core */
-
- IF( EQ_16( st->core, HQ_CORE ) )
- {
- /* Trigger HQ_CORE */
- st->codec_mode = MODE1;
- move16();
- st->mdct_sw = MODE2;
- move16();
- }
- ELSE
- {
- /* Rewind bitstream */
- st->next_bit_pos = next_bit_pos_save;
- move16();
- if ( st->bfi != 0 )
- {
- st->core = core_save;
- move16();
- }
- /* always reset bwidth, to not interfere with BER logic */
- st->bwidth = bwidth_save;
- move16();
- }
}
}
- return;
-}
-
+ sid_update = 0;
+ move16();
+ sid_upd_bad = 0;
+ move16();
+ IF( EQ_16( is_SIDrate( total_brate ), 1 ) )
+ {
+ IF( st_ivas->bfi == 0 )
+ {
+ sid_update = 1;
+ move16();
+ }
+ ELSE
+ {
+ sid_upd_bad = 1; /* this frame type may happen in ETSI/3GPP CS cases, a corrupt SID frames */
+ move16();
+ }
+ }
-/*-------------------------------------------------------------------*
- * BRATE2IDX_fx()
- *
- * Convert Bitrate to Index Value
- *-------------------------------------------------------------------*/
+ /* all zero indices/bits iSP AMRWB SID_update results in a valid LP filter with extremely high LP-filter-gain */
+ /* all zero indices/bits may be a result of CS bit errors and/or erroneously injected by gateways or by a bad dejitter handlers */
+ test();
+ IF( EQ_32( total_brate, SID_1k75 ) && EQ_16( sid_update, 1 ) )
+ {
+ /* valid sid_update received, check for very risky but formally valid content */
+ Word16 sum = 0;
+ move16();
+ FOR( k = 0; k < num_bits; ++k )
+ {
+ sum = add( sum, extract_l( EQ_32( bit_stream[k], 1 ) ) ); /* check of 35 zeroes */
+ }
+ if ( sum == 0 )
+ { /* all zeros */
+ sid_upd_bad = 1; /* initial signal as corrupt (BER likely) */
+ move16();
+ }
+ }
-Word16 BRATE2IDX_fx( Word32 brate )
-{
+ /* AMRWB 26.173 G.192 file reader (read_serial) does not declare/use SID_BAD ft,
+ it declares every bad synch marked frame initially as a lost_speech frame,
+ and then the RXDTX handler CNG state decides the decoding mode CNG/SPEECH.
+ While In the AMRWB ETSI/3GPP format eid a CRC error in a detected SID_UPDATE frames triggers SID_BAD.
+ Here we inhibit use of the SID-length info, even though it is available in the G.192 file format after STL/EID-XOR .
+ */
+ IF( sid_upd_bad )
+ {
+ sid_upd_bad = 0;
+ move16();
+ total_brate = FRAME_NO_DATA; /* treat SID_BAD as a stolen signaling frame --> SPEECH LOST */
+ move32();
+ }
- Word32 L_temp;
- Word32 L_idx;
-#define START 9
- extern const Word16 bit_rates_div50[];
+ g192_sid_first = 0;
+ move16();
- /* This is a Fast Bit Rate Value to Index Value Binary Search */
- L_temp = L_msu0( brate, bit_rates_div50[START], 50 );
- L_temp = L_min( 6, L_max( -6, L_temp ) );
- L_idx = L_add( L_temp, START );
- L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
- L_temp = L_min( 3, L_max( -3, L_temp ) );
- L_idx = L_add( L_temp, L_idx );
- L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
- L_temp = L_min( 1, L_max( -2, L_temp ) );
- L_idx = L_add( L_temp, L_idx );
- L_temp = L_msu0( brate, bit_rates_div50[L_idx], 50 );
- if ( L_temp != 0 )
- L_idx = L_add( L_idx, 1 );
- return (Word16) L_idx;
-}
+ test();
+ test();
+ test();
+ test();
+ 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 )
+ {
+ g192_sid_first = 1; /* SID_FIRST detected for previous AMRWB/AMRWBIO active frames only */
+ /* It is not possible to perfectly simulate rate switching conditions EVS->AMRWBIO where:
+ the very first SID_FIRST detection is based on a past EVS active frame
+ and a good length 0 "SID_FIRST"(NO_DATA) frame is sent in AMRWBIO,
+ due to the one frame state memory in the AMRWB legacy G.192 SID_FIRST encoding
+ */
+ move16();
+ }
+ speech_bad = 0;
+ move16();
-/*-------------------------------------------------------------------*
- * BRATE2IDX16k_fx()
- *
- * Convert Bitrate to Index Value
- *-------------------------------------------------------------------*/
+ test();
+ if ( st_ivas->bfi != 0 && ( is_DTXrate( total_brate ) == 0 ) )
+ {
+ speech_bad = 1; /* initial ft assumption, CNG_state decides what to do */
+ move16();
+ }
-Word16 BRATE2IDX16k_fx( Word32 brate )
-{
- Word32 L_temp, L_idx;
-#define START_16K 5
- extern const Word16 bit_rates_16k_div50[];
+ speech_lost = 0;
+ move16();
- if ( EQ_32( brate, ACELP_16k40 ) )
+ test();
+ if ( total_brate == FRAME_NO_DATA && st_ivas->bfi != 0 ) /* unsent NO_DATA or stolen NO_DATA/signaling frame */
{
- brate = ACELP_14k80;
+ speech_lost = 1; /* initial ft assumption, CNG_state decides what to do */
move16();
}
- /* This is a Fast Bit Rate Value to Index Value Binary Search */
- L_temp = L_msu0( brate, bit_rates_16k_div50[START_16K], 50 );
- L_temp = L_min( 3, L_max( -3, L_temp ) );
- L_idx = L_add( L_temp, START_16K );
- L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
- L_temp = L_min( 2, L_max( -2, L_temp ) );
- L_idx = L_add( L_temp, L_idx );
- L_temp = L_msu0( brate, bit_rates_16k_div50[L_idx], 50 );
- L_temp = L_min( 1, L_max( -1, L_temp ) );
- L_idx = L_add( L_temp, L_idx );
+ /* Do not allow decoder to enter CNG-synthesis for any instantly received GOOD+LENGTH==0 frame
+ as this frame was never transmitted, one can not know it is good and has a a length of zero ) */
+ IF( *CNG != 0 )
+ {
+ /* We were in CNG synthesis */
+ if ( curr_ft_good_sp != 0 )
+ {
+ /* only a good speech frame makes you leave CNG synthesis */
+ *CNG = 0;
+ move16();
+ }
+ }
+ ELSE
+ {
+ /* We were in SPEECH synthesis */
+ /* only a received/detected SID frame can make the decoder enter into CNG synthsis */
+ test();
+ test();
+ if ( g192_sid_first || sid_update || sid_upd_bad )
+ {
+ *CNG = 1;
+ move16();
+ }
+ }
- return (Word16) L_idx;
-}
+ /* set bfi, total_brate pair for proper decoding */
+ /* handle the G.192 _simulated_ untransmitted NO_DATA frame, setting for decoder SPEECH synthesis */
+ test();
+ test();
+ if ( *CNG == 0 && total_brate == FRAME_NO_DATA && st_ivas->bfi == 0 )
+ {
+ st_ivas->bfi = 1; /* SPEECH PLC code will now become active as in a real system */
+ /* total_brate= 0 */
+ move16();
+ }
-/*-------------------------------------------------------------------*
- * BIT_ALLOC_IDX_fx()
- *-------------------------------------------------------------------*/
+ /* handle bad/lost speech frame(and CS bad SID frame) in the decoders CNG synthesis settings pair (total_brate, bfi) */
+ test();
+ test();
+ test();
+ test();
+ IF( (
+ NE_16( bfi, FRAMEMODE_FUTURE ) &&
+ ( *CNG != 0 ) && ( ( speech_bad != 0 ) || ( speech_lost != 0 ) ) ) || /* SP_BAD or SPEECH_LOST) --> stay in CNG */
+ ( sid_upd_bad != 0 ) ) /* SID_UPD_BAD --> start CNG */
+ {
+ st_ivas->bfi = 0; /* bfi=0 needed to activate CNG code */
+ move16();
+ total_brate = FRAME_NO_DATA;
+ move32();
+ }
-Word32 BIT_ALLOC_IDX_fx( Word32 brate, Word16 ctype, Word16 sfrm, Word16 tc )
-{
- Word32 L_temp;
- Word16 temp;
- if ( ctype == INACTIVE ) /* no sub(ctype, INACTIVE) because it is '0' */
- ctype = GENERIC;
+ /* update for next frame's G.192 file format's odd SID_FIRST detection (primarily for AMRWBIO) */
+ test();
+ *prev_ft_speech = ( ( curr_ft_good_sp != 0 ) || ( curr_ft_bad_sp != 0 ) );
move16();
- L_temp = L_mac0( -1l * 256, 1 * 256, ctype );
-
- temp = BRATE2IDX_fx( brate );
- L_temp = L_mac0( L_temp, 4 * 256, temp );
- IF( tc >= 0 )
- L_temp = L_mac0( L_temp, ( 10 - 4 ) * 256, temp );
- /* So either 'temp' x 4 when 'tc < 0', 'temp' x 10 otherwise */
-
- L_temp = L_mac0( L_temp, 1 * 256, s_max( 0, tc ) );
- L_temp = L_mac0( L_temp, s_max( 0, sfrm ), 1 );
- if ( sfrm < 0 )
- L_temp = L_shr( L_temp, 2 );
- L_temp = L_shr( L_temp, 6 );
+ /* st->total brate= total_brate; updated in a good frame below */
- return L_temp;
-}
+ FOR( k = 0; k < st_ivas->nCPE; k++ )
+ {
+ sts = st_ivas->hCPE[k]->hCoreCoder;
+ FOR( n = 0; n < CPE_CHANNELS; n++ )
+ {
+ sts[n]->bfi = st_ivas->bfi;
+ move16();
+ }
+ }
-/*-------------------------------------------------------------------*
- * BIT_ALLOC_IDX_16KHZ_fx()
- *-------------------------------------------------------------------*/
+ FOR( k = 0; k < st_ivas->nSCE; k++ )
+ {
+ sts = st_ivas->hSCE[k]->hCoreCoder;
+ sts[0]->bfi = st_ivas->bfi;
+ move16();
+ }
-Word32 BIT_ALLOC_IDX_16KHZ_fx( Word32 brate, Word16 ctype, Word16 sfrm, Word16 tc )
-{
- Word32 L_temp;
- Word16 temp;
- /* 'ctype' =
- TRANSITION => 2
- GENERIC => 1
- ALL Other => 0
- */
- L_temp = L_and( shr( 0x0240l, shl( ctype, 1 ) ), 3 );
+ IF( st_ivas->bfi == 0 )
+ {
+ /* select Mode 1 or Mode 2 */
+ IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) /* EVS mono */
+ {
+ decoder_selectCodec( sts[0], total_brate, bit_stream[0] );
+ st_ivas->hDecoderConfig->Opt_AMR_WB = sts[0]->Opt_AMR_WB;
+ move16();
+ }
+ ELSE /* IVAS */
+ {
+ st_ivas->codec_mode = MODE1;
+ move16();
+ st_ivas->hDecoderConfig->Opt_AMR_WB = 0;
+ move16();
+ }
+ }
- temp = BRATE2IDX16k_fx( brate );
- L_temp = L_mac0( L_temp, 3, temp );
- IF( tc >= 0 )
- L_temp = L_mac0( L_temp, ( 7 - 3 ), temp );
- /* So either 'temp' x 3 when 'tc < 0', 'temp' x 7 otherwise */
+ /* GOOD frame */
+ test();
+ if ( st_ivas->bfi == 0 || EQ_16( st_ivas->bfi, FRAMEMODE_FUTURE ) )
+ {
+ /* GOOD frame - convert ITU-T G.192 words to short values */
+ st_ivas->hDecoderConfig->ivas_total_brate = total_brate;
+ move32();
+ }
- L_temp = L_mac0( L_temp, 1, s_max( 0, tc ) );
+ st_ivas->bit_stream = bit_stream;
- IF( sfrm >= 0 )
+ IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) )
{
- /* Mult by 5 */
- L_temp = L_add( L_temp, L_shl( L_temp, 2 ) );
- L_temp = L_mac0( L_temp, shr( sfrm, 6 ), 1 );
+ ivas_set_bitstream_pointers( st_ivas );
}
- return L_temp;
+ return error;
}
@@ -875,6 +4793,7 @@ static void berCheck(
return;
}
+
/*-------------------------------------------------------------------*
* getPartialCopyInfo()
*
@@ -940,8 +4859,11 @@ void getPartialCopyInfo(
get_next_indice_tmp_fx( st, nBits );
}
+
+ return;
}
+
/*-------------------------------------------------------------------*
* get_rfFlag()
*
@@ -950,7 +4872,7 @@ void getPartialCopyInfo(
void get_rfFlag(
Decoder_State *st, /* i: decoder state structure */
- Word16 *rf_flag, /* o : check for the RF flag */
+ Word16 *rf_flag, /* o : check for the RF flag */
Word16 *nBits,
Word16 *ind )
{
@@ -983,7 +4905,7 @@ void get_rfFlag(
move16();
/* retrieve the signalling indice */
- ind_tmp = (Word16) acelp_sig_tbl[add( start_idx, get_indice( st, 0, nBits_tmp ) )];
+ ind_tmp = (Word16) acelp_sig_tbl[add( start_idx, get_indice_fx( st, 0, nBits_tmp ) )];
move16();
/* convert signalling indice into RF flag. */
@@ -1002,8 +4924,11 @@ void get_rfFlag(
move16();
}
}
+
+ return;
}
+
/*-------------------------------------------------------------------*
* get_rfFrameType()
*
@@ -1035,7 +4960,7 @@ void get_rfFrameType(
}
/* the last three bits in a packet is the RF frame type */
- *rf_frame_type = get_indice( st, sub( num_bits, 3 ), 3 );
+ *rf_frame_type = get_indice_fx( st, sub( num_bits, 3 ), 3 );
move16();
}
ELSE
@@ -1043,8 +4968,11 @@ void get_rfFrameType(
*rf_frame_type = 0;
move16();
}
+
+ return;
}
+
/*-------------------------------------------------------------------*
* get_rf_fec_offset()
*
@@ -1075,7 +5003,7 @@ void get_rf_fec_offset(
}
/* the two bits before the rf frame type contain the fec offset */
- tmp = get_indice( st, sub( num_bits, 5 ), 2 );
+ tmp = get_indice_fx( st, sub( num_bits, 5 ), 2 );
IF( tmp == 0 )
{
@@ -1093,8 +5021,11 @@ void get_rf_fec_offset(
*rf_fec_offset = 0;
move16();
}
+
+ return;
}
+
/*-------------------------------------------------------------------*
* get_rfTargetBits()
*
@@ -1106,9 +5037,7 @@ void get_rfTargetBits(
Word16 *rf_target_bits /* o : Number of RF target bits */
)
{
-
/* Number of RF bits for different RF coder types */
-
SWITCH( rf_frame_type )
{
case RF_NO_DATA:
@@ -1148,6 +5077,8 @@ void get_rfTargetBits(
move16();
BREAK;
}
+
+ return;
}
@@ -1168,7 +5099,6 @@ void get_NextCoderType_fx(
Word8 bit_stream[ACELP_13k20 / 50];
UWord16 tmp;
-
FOR( k = 0; k < ACELP_13k20 / 50; k++ )
{
bit_stream[k] = (UWord8) s_and( shr( bitsteam[k / 8], sub( 7, s_and( k, 7 ) ) ), 0x1 );
@@ -1194,16 +5124,21 @@ void get_NextCoderType_fx(
tmp = lshl( tmp, 1 );
tmp = add( tmp, bit_stream[k] );
}
+
/* retrieve the signalling indice */
*next_coder_type = s_and( extract_l( acelp_sig_tbl[start_idx + tmp] ), 0x7 );
move16();
+
+ return;
}
+
/*-------------------------------------------------------------------*
* get_indice_preview()
*
* Indices preview to parse for the presence of partial copy
*-------------------------------------------------------------------*/
+
static UWord16 get_indice_preview(
UWord8 *bitstream,
Word16 bitstreamSize,
@@ -1231,14 +5166,17 @@ static UWord16 get_indice_preview(
value = shl( value, 1 );
value = add( value, bitstreamShort[pos + i] );
}
+
return value;
}
+
/*-------------------------------------------------------------------*
* evs_dec_previewFrame()
*
* Signalling index preview
*-------------------------------------------------------------------*/
+
void evs_dec_previewFrame(
UWord8 *bitstream,
Word16 bitstreamSize,
@@ -1295,8 +5233,11 @@ void evs_dec_previewFrame(
move16();
}
}
+
+ return;
}
+
void dtx_read_padding_bits_fx(
DEC_CORE_HANDLE st,
const Word16 num_bits )
diff --git a/lib_com/ivas_arith_fx.c b/lib_com/ivas_arith_fx.c
index 311bccff8e206cbdb862bba20cd4f6e89d62ecc2..c708976dac8552562abb21fd47637ec18a9eb61f 100644
--- a/lib_com/ivas_arith_fx.c
+++ b/lib_com/ivas_arith_fx.c
@@ -191,7 +191,7 @@ void ivas_ari_done_decoding_14bits_ext_1_lfe(
Decoder_State *st,
const Word16 extra_bits_read )
{
- get_next_indice_tmp( st, negate( sub( cbitsnew - 2, extra_bits_read ) ) );
+ get_next_indice_tmp_fx( st, negate( sub( cbitsnew - 2, extra_bits_read ) ) );
return;
}
diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h
index e9f09230b41239b6cc855b62b46d1c02eed2c070..e982007664b02402a275872746b4da08d01c50b5 100644
--- a/lib_com/prot_fx.h
+++ b/lib_com/prot_fx.h
@@ -1248,11 +1248,6 @@ UWord16 get_next_indice_fx(
Word16 nb_bits /* i : number of bits that were used to quantize the indice */
);
-Word16 rate2EVSmode(
- const Word32 brate, /* i : bitrate */
- Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
-);
-
/* o : value of the indice */
UWord16 get_next_indice_1_fx(
Decoder_State *st_fx /* i/o: decoder state structure */
@@ -1274,11 +1269,23 @@ void reset_indices_enc_fx(
const Word16 max_num_indices /* i : max number of indices */
);
-Word16 BRATE2IDX_fx( Word32 brate );
-Word16 BRATE2IDX16k_fx( Word32 brate );
+Word16 BRATE2IDX_fx(
+ const Word32 brate );
+
+Word16 BRATE2IDX16k_fx(
+ Word32 brate );
-Word32 BIT_ALLOC_IDX_fx( Word32 brate, Word16 ctype, Word16 sfrm, Word16 tc );
-Word32 BIT_ALLOC_IDX_16KHZ_fx( Word32 brate, Word16 ctype, Word16 sfrm, Word16 tc );
+Word32 BIT_ALLOC_IDX_fx(
+ const Word32 brate,
+ Word16 ctype,
+ const Word16 sfrm,
+ const Word16 tc );
+
+Word32 BIT_ALLOC_IDX_16KHZ_fx(
+ const Word32 brate,
+ const Word16 ctype,
+ const Word16 sfrm,
+ const Word16 tc );
void getPartialCopyInfo(
Decoder_State *st, /* i : decoder state structure */
@@ -10427,6 +10434,7 @@ Word32 sum2_32_fx(
const Word32 *vec, /* i : input vector */
const Word16 lvec, /* i : length of input vector */
Word16 *e );
+
void ProcessStereoIGF_fx(
STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct,
Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */
@@ -10444,6 +10452,7 @@ void ProcessStereoIGF_fx(
const Word16 sp_aud_decision0, /* i : sp_aud_decision0 */
const Word32 element_brate, /* i : element bitrate */
const Word16 mct_on );
+
/*igf_enc.c*/
void IGFEncApplyStereo_fx(
STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */
@@ -10467,6 +10476,7 @@ void IGFSaveSpectrumForITF_ivas_fx(
const Word16 igfGridIdx, /* i : IGF grid index */
const Word32 *pITFSpectrum, /* i : MDCT spectrum */
Word16 exp_pITFSpectrum );
+
Word16 IGFEncWriteBitstream_ivas_fx(
const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */
BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */
@@ -10474,6 +10484,7 @@ Word16 IGFEncWriteBitstream_ivas_fx(
const Word16 igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */
const Word16 isIndepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */
);
+
/*igf_scf_enc.c*/
Word16 IGFSCFEncoderEncode_ivas_fx(
IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */
@@ -10483,6 +10494,7 @@ Word16 IGFSCFEncoderEncode_ivas_fx(
const Word16 igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */
const Word16 indepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */
);
+
/*ari_enc.c*/
Word16 ari_encode_14bits_ext_ivas_fx(
Word16 *ptr, /* Q0 */
@@ -10491,6 +10503,7 @@ Word16 ari_encode_14bits_ext_ivas_fx(
Word32 symbol, /* Q0 */
UWord16 const *cum_freq /* Q0 */
);
+
Word16 ari_encode_14bits_sign_ivas_fx(
Word16 *ptr, /* Q0 */
Word16 bp, /* Q0 */
@@ -10498,22 +10511,18 @@ Word16 ari_encode_14bits_sign_ivas_fx(
Tastat *s,
Word16 sign /* Q0 */
);
+
Word16 ari_done_encoding_14bits_ivas_fx(
Word16 *ptr, /* Q0 */
Word16 bp, /* Q0 */
Tastat *s );
-void pack_bit(
- const Word16 bit, /* i: bit to be packed */
- UWord8 **pt, /* i/o: pointer to octet array into which bit will be placed */
- UWord8 *omask /* i/o: output mask to indicate where in the octet the bit is to be written */
-);
+
void IGFEncConcatenateBitstream(
const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */
const Word16 bsBits, /* i : number of IGF bits written to list of indices */
BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */
);
-
void hq_generic_hf_encoding_fx(
const Word32 *coefs_fx, /* i : MDCT coefficients of weighted original */
Word16 *hq_generic_fenv_fx, /* i/o: energy of SWB envelope */
@@ -10521,6 +10530,7 @@ void hq_generic_hf_encoding_fx(
Encoder_State *st_fx, /* i/o: encoder state structure */
Word16 *hq_generic_exc_clas, /* o : bwe excitation class */
Word16 length );
+
Word16 ari_decode_14bits_pow_ivas(
Word16 *ptr,
Word16 bp,
@@ -10988,18 +10998,7 @@ UWord16 delete_indice(
);
/*! r: value of the indice */
-UWord16 get_next_indice(
- Decoder_State *st, /* i/o: decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
-);
-
-void get_next_indice_tmp(
- Decoder_State *st, /* o : decoder state structure */
- Word16 nb_bits /* i : number of bits that were used to quantize the indice */
-);
-
-/*! r: value of the indice */
-UWord16 get_indice(
+UWord16 get_indice_fx(
Decoder_State *st, /* i/o: decoder state structure */
Word16 pos, /* i : absolute position in the bitstream */
Word16 nb_bits /* i : number of bits that were used to quantize the indice */
@@ -11009,12 +11008,11 @@ void reset_indices_dec(
Decoder_State *st /* i/o: decoder state structure */
);
-Word16 rate2EVSmode_float(
+Word16 rate2EVSmode(
const Word32 brate, /* i : bitrate */
Word16 *is_amr_wb /* o : (flag) does the bitrate belong to AMR-WB? Can be NULL */
);
-
/*! r: 1 = OK, 0 = something wrong */
ivas_error read_indices_fx(
Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */
@@ -11025,7 +11023,6 @@ ivas_error read_indices_fx(
Word16 bfi /* i : bad frame indicator */
);
-
void ivas_set_bitstream_pointers(
Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */
);
diff --git a/lib_dec/FEC_clas_estim_fx.c b/lib_dec/FEC_clas_estim_fx.c
index 2bd38153a3c533568ec9b21792b3d21df478853b..595e750f49e710ae9d93a00654cc8aed40850b8d 100644
--- a/lib_dec/FEC_clas_estim_fx.c
+++ b/lib_dec/FEC_clas_estim_fx.c
@@ -864,7 +864,7 @@ Word16 FEC_pos_dec_fx(
bit_pos_pitch_index = add( bit_pos_pitch_index, 1 );
}
/* retrieve the pitch index */
- pitch_index = (Word16) get_indice( st_fx, bit_pos_pitch_index, nBits );
+ pitch_index = (Word16) get_indice_fx( st_fx, bit_pos_pitch_index, nBits );
/* decode pitch period */
T0_min = PIT_MIN;
diff --git a/lib_dec/amr_wb_dec_fx.c b/lib_dec/amr_wb_dec_fx.c
index 96ae82ddee71c1e6a9a0115bce5ce2e84dea8334..d5a3cf71a2f35b0b650407150d408758869ea412 100644
--- a/lib_dec/amr_wb_dec_fx.c
+++ b/lib_dec/amr_wb_dec_fx.c
@@ -463,7 +463,7 @@ ivas_error amr_wb_dec_fx(
* Extracts VAD information from the bitstream in AMR-WB IO mode
*------------------------------------------------------------*/
- vad_flag = (Word16) get_next_indice( st_fx, 1 );
+ vad_flag = (Word16) get_next_indice_fx( st_fx, 1 );
move16();
st_fx->coder_type = GENERIC;
diff --git a/lib_dec/dec_acelp_tcx_main_fx.c b/lib_dec/dec_acelp_tcx_main_fx.c
index eea558914c2af6701f3cca58975eaa6ed3a5a4d7..3ff22158846d47df64e98b4e00fcaf84eb034bd9 100644
--- a/lib_dec/dec_acelp_tcx_main_fx.c
+++ b/lib_dec/dec_acelp_tcx_main_fx.c
@@ -61,7 +61,7 @@ static void decode_frame_type_fx( Decoder_State *st )
/* SID frame */
ELSE IF( EQ_32( st->total_brate, SID_2k40 ) )
{
- st->cng_type = get_next_indice( st, 1 );
+ st->cng_type = get_next_indice_fx( st, 1 );
move16();
if ( NE_16( st->cng_type, FD_CNG ) )
{
@@ -72,10 +72,10 @@ static void decode_frame_type_fx( Decoder_State *st )
move16();
frame_size_index = 1;
move16();
- st->bwidth = get_next_indice( st, 2 );
+ st->bwidth = get_next_indice_fx( st, 2 );
move16();
- frame_len_indicator = get_next_indice( st, 1 );
+ frame_len_indicator = get_next_indice_fx( st, 1 );
IF( EQ_16( st->bwidth, NB ) )
{
if ( frame_len_indicator )
@@ -146,7 +146,7 @@ static void decode_frame_type_fx( Decoder_State *st )
{
/* Get bandwidth mode */
- st->bwidth = get_next_indice( st, FrameSizeConfig[frame_size_index].bandwidth_bits );
+ st->bwidth = get_next_indice_fx( st, FrameSizeConfig[frame_size_index].bandwidth_bits );
move16();
st->bwidth = add( st->bwidth, FrameSizeConfig[frame_size_index].bandwidth_min );
@@ -180,7 +180,7 @@ static void decode_frame_type_fx( Decoder_State *st )
IF( FrameSizeConfig[frame_size_index].reserved_bits && st->rf_flag == 0 )
{
Word16 dummyBit;
- dummyBit = (Word8) get_next_indice( st, 1 );
+ dummyBit = (Word8) get_next_indice_fx( st, 1 );
move16();
if ( dummyBit != 0 )
{
diff --git a/lib_dec/dec_amr_wb_fx.c b/lib_dec/dec_amr_wb_fx.c
index 500fe34bab921a2c385caf751d34616d63e0045f..c5b08a784c0f3fa6cd8fd63f925dbc23dc60c16e 100644
--- a/lib_dec/dec_amr_wb_fx.c
+++ b/lib_dec/dec_amr_wb_fx.c
@@ -127,7 +127,7 @@ void decod_amr_wb_fx(
IF( EQ_32( st_fx->core_brate, ACELP_23k85 ) )
{
- hf_gain_fx[i_subfr / 64] = (Word16) get_next_indice( st_fx, 4 );
+ hf_gain_fx[i_subfr / 64] = (Word16) get_next_indice_fx( st_fx, 4 );
move16();
}
diff --git a/lib_dec/hq_classifier_dec_fx.c b/lib_dec/hq_classifier_dec_fx.c
index c8dac0a0bc934199a60e6bf05c50e91235d4e3fc..4bbe3c5bc06e392d746c60b807bdf084474cebed 100644
--- a/lib_dec/hq_classifier_dec_fx.c
+++ b/lib_dec/hq_classifier_dec_fx.c
@@ -105,7 +105,7 @@ Word16 hq_classifier_dec_fx( /* o : Consumed bits
test();
IF( ( EQ_16( length, L_SPEC32k ) || EQ_16( length, L_FRAME48k ) ) && LE_32( core_brate, max_brate ) )
{
- *hqswb_clas = get_next_indice( st_fx, 2 ); /* Q0 */
+ *hqswb_clas = get_next_indice_fx( st_fx, 2 ); /* Q0 */
move16();
bits = 2;
move16();
@@ -119,7 +119,7 @@ Word16 hq_classifier_dec_fx( /* o : Consumed bits
}
ELSE
{
- *hqswb_clas = get_next_indice( st_fx, 1 ); /* Q0 */
+ *hqswb_clas = get_next_indice_fx( st_fx, 1 ); /* Q0 */
move16();
bits = 1;
move16();
diff --git a/lib_dec/hq_core_dec_fx.c b/lib_dec/hq_core_dec_fx.c
index 0161cbac0e1ad5b6f95c233ca22f1ba665229c56..3e76603326f099a1a1485188f8253a172f196385 100644
--- a/lib_dec/hq_core_dec_fx.c
+++ b/lib_dec/hq_core_dec_fx.c
@@ -103,7 +103,7 @@ void hq_core_dec_fx(
test();
IF( !( core_switching_flag ) && GT_32( st_fx->core_brate, MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) )
{
- hHQ_core->HqVoicing = get_next_indice( st_fx, 1 ); /* Q0 */
+ hHQ_core->HqVoicing = get_next_indice_fx( st_fx, 1 ); /* Q0 */
move16();
num_bits = sub( num_bits, 1 ); /* Q0 */
}
diff --git a/lib_dec/hq_hr_dec_fx.c b/lib_dec/hq_hr_dec_fx.c
index 6423015bc4f8afe008e206801dc367770e8d32d8..27b352cd34e29cf546dd68ac15ff087d2f1a8311 100644
--- a/lib_dec/hq_hr_dec_fx.c
+++ b/lib_dec/hq_hr_dec_fx.c
@@ -477,7 +477,7 @@ void hq_hr_dec_fx(
test();
IF( !*is_transient && NE_16( *hqswb_clas, HQ_HVQ ) && !( EQ_16( length, L_FRAME16k ) && LE_32( st_fx->core_brate, HQ_32k ) ) )
{
- nf_idx = get_next_indice( st_fx, 2 ); /* Q0 */
+ nf_idx = get_next_indice_fx( st_fx, 2 ); /* Q0 */
}
/*------------------------------------------------------------------*
diff --git a/lib_dec/range_dec_fx.c b/lib_dec/range_dec_fx.c
index 7f62e0dd351583588e04b0e65efa6bcbefa3354c..e63435f5b5a96163243d3ca186d01c25f123c0f6 100644
--- a/lib_dec/range_dec_fx.c
+++ b/lib_dec/range_dec_fx.c
@@ -147,16 +147,16 @@ Word32 rc_dec_bits_fx( /* i : Decoded value */
{
hPVQ->rc_offset = sub( hPVQ->rc_offset, sub( bits, 16 ) );
move16();
- value = UL_lshl( UL_deposit_l( get_indice( st_fx, hPVQ->rc_offset, sub( bits, 16 ) ) ), 16 );
+ value = UL_lshl( UL_deposit_l( get_indice_fx( st_fx, hPVQ->rc_offset, sub( bits, 16 ) ) ), 16 );
hPVQ->rc_offset = sub( hPVQ->rc_offset, 16 );
move16();
- value = UL_or( value, UL_deposit_l( get_indice( st_fx, hPVQ->rc_offset, 16 ) ) );
+ value = UL_or( value, UL_deposit_l( get_indice_fx( st_fx, hPVQ->rc_offset, 16 ) ) );
}
ELSE
{
hPVQ->rc_offset = sub( hPVQ->rc_offset, bits );
move16();
- value = UL_deposit_l( get_indice( st_fx, hPVQ->rc_offset, bits ) );
+ value = UL_deposit_l( get_indice_fx( st_fx, hPVQ->rc_offset, bits ) );
}
return value;
diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c
index 0a01dfe6667897772df2872ff2d6089504db72c5..ee4f439961553f7ca4603a9fc67e862fdd89aef8 100644
--- a/lib_enc/igf_enc.c
+++ b/lib_enc/igf_enc.c
@@ -2360,11 +2360,6 @@ void IGFEncSetMode_ivas_fx(
return;
}
-/*-------------------------------------------------------------------*
- * pack_bit_ivas()
- *
- * insert a bit into packed octet
- *-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*
* IGFEncConcatenateBitstream()
diff --git a/lib_enc/igf_enc_fx.c b/lib_enc/igf_enc_fx.c
index e0562467a93c60abef056c29d59cf5a67a193c8c..c57f5ffb014c41b53f7a2caeff06cac9fcd422e3 100644
--- a/lib_enc/igf_enc_fx.c
+++ b/lib_enc/igf_enc_fx.c
@@ -1534,7 +1534,7 @@ void IGFEncSetMode_fx(
* insert a bit into packed octet
*-------------------------------------------------------------------*/
-static void pack_bit_ivas_fx(
+static void pack_bit_fx(
const Word16 bit, /* i : bit to be packed */
UWord8 **pt, /* i/o: pointer to octet array into which bit will be placed */
UWord8 *omask /* i/o: output mask to indicate where in the octet the bit is to be written */
@@ -1607,7 +1607,7 @@ void IGFEncConcatenateBitstream_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc,
/* write bit by bit */
FOR( k = 0; k < ind_list[i].nb_bits; k++ )
{
- pack_bit_ivas_fx( extract_l( L_and( ind_list[i].value, imask ) ), &pFrame, &omask );
+ pack_bit_fx( extract_l( L_and( ind_list[i].value, imask ) ), &pFrame, &omask );
imask = L_shr( imask, 1 );
}
nb_bits_written = add( nb_bits_written, ind_list[i].nb_bits );
diff --git a/lib_util/mime_io.c b/lib_util/mime_io.c
index 2976e1895feea86a4a9d03cdca6571ee8ebd3d5a..03ff3bbb705300ec3f07856f8b683470378d746f 100644
--- a/lib_util/mime_io.c
+++ b/lib_util/mime_io.c
@@ -201,8 +201,8 @@ MIME_ERROR MIME_WriteFrame(
{
int16_t mode;
int16_t cmi;
- mode = rate2EVSmode_float( numBits * FRAMES_PER_SEC, &isAmrWb );
- cmi = rate2EVSmode_float( totalBrate, &isAmrWb );
+ mode = rate2EVSmode( numBits * FRAMES_PER_SEC, &isAmrWb );
+ cmi = rate2EVSmode( totalBrate, &isAmrWb );
ToC = (uint8_t) ( isAmrWb << 5 | isAmrWb << 4 | mode );
writeByte( hMIME->file, ToC );