LCOV - code coverage report
Current view: top level - lib_dec - init_dec_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main @ da9cc8ead0679b4682d329fdff98cf1616159273 Lines: 916 1002 91.4 %
Date: 2025-10-13 22:24:20 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /*====================================================================================
       2             :     EVS Codec 3GPP TS26.452 Aug 12, 2021. Version 16.3.0
       3             :   ====================================================================================*/
       4             : 
       5             : #include "options.h" /* Compilation switches                   */
       6             : #include "prot_fx.h"
       7             : #include "cnst.h"    /* Common constants                       */
       8             : #include "rom_com.h" /* Static table prototypes                */
       9             : #include "stl.h"     /* required for wmc_tool */
      10             : #include "basop_util.h"
      11             : #include "ivas_prot_fx.h"
      12             : 
      13             : /*----------------------------------------------------------------------*
      14             :  * init_decoder()
      15             :  *
      16             :  * Initialization of static variables for the decoder
      17             :  *----------------------------------------------------------------------*/
      18             : 
      19           3 : ivas_error init_decoder_fx(
      20             :     Decoder_State *st_fx, /* o:   Decoder static variables structure */
      21             :     const Word16 idchan   /* i  : channel ID                          */
      22             : )
      23             : {
      24             :     Word16 i;
      25             :     ivas_error error;
      26             : 
      27           3 :     error = IVAS_ERR_OK;
      28           3 :     move16();
      29             :     Word16 newCldfbBands;
      30           3 :     st_fx->total_num_bits = -1;
      31           3 :     move16();
      32             : 
      33             :     /*-----------------------------------------------------------------*
      34             :      * ACELP core parameters
      35             :      *-----------------------------------------------------------------*/
      36             : 
      37           3 :     st_fx->codec_mode = MODE1;
      38           3 :     move16();
      39           3 :     st_fx->last_codec_mode = MODE1;
      40           3 :     move16();
      41           3 :     st_fx->core = ACELP_CORE;
      42           3 :     move16();
      43           3 :     st_fx->L_frame = L_FRAME;
      44           3 :     move16();
      45           3 :     st_fx->extl = -1;
      46           3 :     move16();
      47           3 :     st_fx->total_brate = 8000;
      48           3 :     move16();
      49           3 :     st_fx->last_total_brate = -1;
      50           3 :     move16();
      51           3 :     st_fx->last_total_brate_ber = -1;
      52           3 :     move32();
      53           3 :     st_fx->core_brate = 8000;
      54           3 :     move16();
      55           3 :     st_fx->ini_frame = 0;
      56           3 :     move16();
      57           3 :     st_fx->bwidth = NB;
      58           3 :     move16();
      59           3 :     st_fx->extl_brate = 0;
      60           3 :     move16();
      61             : 
      62             : 
      63           3 :     st_fx->last_coder_type = GENERIC;
      64           3 :     move16();
      65           3 :     st_fx->last_L_frame = st_fx->L_frame;
      66           3 :     move16();
      67           3 :     st_fx->last_core_brate = st_fx->core_brate;
      68           3 :     move16();
      69             : 
      70           3 :     st_fx->last_core = -1;
      71           3 :     move16();
      72           3 :     st_fx->last_extl = st_fx->extl;
      73           3 :     move16();
      74             : 
      75             : 
      76             :     /* LSF initilaizations */
      77           3 :     Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
      78             : 
      79           3 :     init_lvq_fx( st_fx->offset_scale1_fx, st_fx->offset_scale2_fx, st_fx->offset_scale1_p_fx, st_fx->offset_scale2_p_fx, st_fx->no_scales_fx, st_fx->no_scales_p_fx );
      80             : 
      81           3 :     set16_fx( st_fx->mem_MA_fx, 0, M );
      82             : 
      83           3 :     st_fx->dm_fx.prev_state = 0;                    // Q0
      84           3 :     move16();                                       /* This corresponds to st_fx->dispMem in FLP */
      85           3 :     st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 ); // Q16
      86          21 :     FOR( i = 2; i < 8; i++ )
      87             :     {
      88          18 :         st_fx->dm_fx.prev_gain_pit[i - 2] = 0; // Q14
      89          18 :         move16();
      90             :     }
      91             : 
      92           3 :     st_fx->tilt_code_fx = 0; // Q15
      93           3 :     move16();
      94           3 :     st_fx->gc_threshold_fx = L_deposit_l( 0 ); // Q16
      95           3 :     st_fx->last_good = UNVOICED_CLAS;
      96           3 :     move16();
      97           3 :     st_fx->clas_dec = UNVOICED_CLAS;
      98           3 :     move16();
      99             : 
     100           3 :     st_fx->lp_gainp_fx = 0; // Q14
     101           3 :     move16();
     102           3 :     st_fx->lp_gainc_fx = 0; // Q3
     103           3 :     move16();
     104             : 
     105           3 :     set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC ); // Q_exc
     106             : 
     107             :     /* AVQ pre-quantizer memory */
     108           3 :     st_fx->mem_preemp_preQ_fx = 0;
     109           3 :     move16();
     110           3 :     st_fx->last_nq_preQ = 0;
     111           3 :     move16();
     112           3 :     st_fx->use_acelp_preq = 0;
     113           3 :     move16();
     114             : 
     115           3 :     st_fx->mem_deemph_fx = 0; // Q_syn
     116           3 :     move16();
     117             :     /*-----------------------------------------------------------------*
     118             :      * SWB BWE parameters
     119             :      *-----------------------------------------------------------------*/
     120             : 
     121           3 :     test();
     122           3 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     123             :     {
     124           3 :         IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL )
     125             :         {
     126           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
     127             :         }
     128             : 
     129           3 :         fd_bwe_dec_init_fx( st_fx->hBWE_FD );
     130             :     }
     131             :     ELSE
     132             :     {
     133           0 :         st_fx->hBWE_FD = NULL;
     134             :     }
     135             : 
     136             :     /*-----------------------------------------------------------------*
     137             :      * IGF
     138             :      *-----------------------------------------------------------------*/
     139             : 
     140           3 :     test();
     141           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     142             :     {
     143           3 :         IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
     144             :         {
     145           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
     146             :         }
     147             : 
     148           3 :         st_fx->igf = 0;
     149           3 :         move16();
     150           3 :         init_igf_dec( st_fx->hIGFDec );
     151             :     }
     152             :     ELSE
     153             :     {
     154           0 :         st_fx->hIGFDec = NULL;
     155             :     }
     156             : 
     157             :     /*-----------------------------------------------------------------*
     158             :      * HR SWB BWE parameters
     159             :      *-----------------------------------------------------------------*/
     160             : 
     161           3 :     IF( st_fx->element_mode == EVS_MONO )
     162             :     {
     163           3 :         IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL )
     164             :         {
     165           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) );
     166             :         }
     167             : 
     168           3 :         hr_bwe_dec_init( st_fx->hBWE_FD_HR );
     169             :     }
     170             :     ELSE
     171             :     {
     172           0 :         st_fx->hBWE_FD_HR = NULL;
     173             :     }
     174           3 :     set16_fx( st_fx->mem_syn1_fx, 0, M );
     175           3 :     set16_fx( st_fx->mem_syn2_fx, 0, M );
     176           3 :     st_fx->stab_fac_fx = 0; // Q15
     177           3 :     move16();
     178           3 :     st_fx->stab_fac_smooth_fx = 0; // Q15
     179           3 :     move16();
     180           3 :     set16_fx( st_fx->agc_mem_fx, 0, 2 ); // Q0
     181           3 :     set32_fx( st_fx->L_mem_hp_out_fx, 0, 5 );
     182           3 :     set16_fx( st_fx->mem_syn3_fx, 0, M );
     183             : 
     184             : 
     185           3 :     Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
     186           3 :     lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_FX );
     187           3 :     st_fx->mid_lsf_int = 0;
     188           3 :     move16();
     189           3 :     st_fx->safety_net = 0;
     190           3 :     move16();
     191           3 :     st_fx->GSC_noisy_speech = 0;
     192           3 :     move16();
     193           3 :     st_fx->last_voice_factor_fx = 0; // Q6
     194           3 :     move16();
     195             : 
     196             : 
     197           3 :     test();
     198           3 :     test();
     199           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     200             :     {
     201           3 :         IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL )
     202             :         {
     203           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
     204             :         }
     205             : 
     206           3 :         GSC_dec_init( st_fx->hGSCDec );
     207             :     }
     208             :     ELSE
     209             :     {
     210           0 :         st_fx->hGSCDec = NULL;
     211             :     }
     212             : 
     213             :     /*-----------------------------------------------------------------*
     214             :      * parameters for fast recovery (WI)
     215             :      *-----------------------------------------------------------------*/
     216           3 :     test();
     217           3 :     IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) )
     218             :     {
     219           0 :         IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL )
     220             :         {
     221           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) );
     222             :         }
     223             : 
     224           0 :         set16_fx( st_fx->hWIDec->old_exc2_fx, 0, L_EXC_MEM );
     225           0 :         set16_fx( st_fx->hWIDec->old_syn2_fx, 0, L_EXC_MEM );
     226             :     }
     227             :     ELSE
     228             :     {
     229           3 :         st_fx->hWIDec = NULL;
     230             :     }
     231             : 
     232             :     /* NB post-filter */
     233             :     /*-----------------------------------------------------------------*
     234             :      * NB/formant post-filter
     235             :      *-----------------------------------------------------------------*/
     236           3 :     test();
     237           3 :     test();
     238           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     239             :     {
     240           3 :         IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL )
     241             :         {
     242           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) );
     243             :         }
     244             : 
     245           3 :         Init_post_filter_fx( st_fx->hPFstat );
     246           3 :         st_fx->psf_lp_noise_fx = 0; // Q8
     247           3 :         move16();
     248             :     }
     249             :     ELSE
     250             :     {
     251           0 :         st_fx->hPFstat = NULL;
     252             :     }
     253           3 :     st_fx->psf_lp_noise_fx = 0; // Q8
     254           3 :     move16();
     255             : 
     256             :     /* FEC */
     257           3 :     st_fx->scaling_flag = 0;
     258           3 :     move16();
     259           3 :     st_fx->lp_ener_FEC_av = 500000; // Q0
     260           3 :     move32();
     261           3 :     st_fx->lp_ener_FEC_max = 500000; // Q0
     262           3 :     move32();
     263           3 :     st_fx->prev_bfi = 0;
     264           3 :     move16();
     265           3 :     st_fx->lp_ener_FER_fx = 15360; // Q8
     266           3 :     move16();                      /*60 in Q8*/
     267           3 :     st_fx->old_enr_LP = 0;         // Q5
     268           3 :     move16();
     269           3 :     st_fx->lp_ener_fx = L_deposit_l( 0 ); // Q6
     270           3 :     st_fx->enr_old_fx = L_deposit_l( 0 ); // Q0
     271           3 :     st_fx->bfi_pitch_fx = L_SUBFR_Q6;
     272           3 :     move16();
     273           3 :     st_fx->bfi_pitch_frame = L_SUBFR;
     274           3 :     move16();
     275           3 :     set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
     276           3 :     st_fx->classifier_Q_mem_syn = 0;
     277           3 :     move16();
     278           3 :     st_fx->last_con_tcx = 0;
     279           3 :     move16();
     280             : 
     281          33 :     FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
     282             :     {
     283          30 :         st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; // Q16
     284          30 :         move32();                                   /*15Q16*/
     285             :     }
     286             : 
     287           3 :     st_fx->upd_cnt = MAX_UPD_CNT;
     288           3 :     move16();
     289           3 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
     290           3 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
     291           3 :     Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
     292             : 
     293           3 :     st_fx->seed_acelp = RANDOM_INITSEED;
     294           3 :     move16();
     295           3 :     st_fx->seed = RANDOM_INITSEED;
     296           3 :     move16();
     297           3 :     st_fx->nbLostCmpt = 0;
     298           3 :     move16();
     299           3 :     st_fx->decision_hyst = 0;
     300           3 :     move16();
     301             : 
     302             : 
     303             :     /* Stationary noise UV modification */
     304           3 :     st_fx->unv_cnt = 0;
     305           3 :     move16();
     306           3 :     st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
     307           3 :     st_fx->uv_count = 0;
     308           3 :     move16();
     309           3 :     st_fx->act_count = 3;
     310           3 :     move16();
     311           3 :     Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M ); // Q15
     312           3 :     st_fx->noimix_seed = RANDOM_INITSEED;
     313           3 :     move16();
     314           3 :     st_fx->min_alpha_fx = 32767; // Q15
     315           3 :     move16();                    /*1; Q15*/
     316           3 :     st_fx->exc_pe_fx = 0;        // Q_stat_noise
     317           3 :     move16();
     318           3 :     st_fx->Q_stat_noise = 31;
     319           3 :     move16();
     320             :     /*-----------------------------------------------------------------*
     321             :      * LD music post-filter
     322             :      *-----------------------------------------------------------------*/
     323           3 :     test();
     324           3 :     test();
     325           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     326             :     {
     327           3 :         IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL )
     328             :         {
     329           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) );
     330             :         }
     331             : 
     332           3 :         music_postfilt_init( st_fx->hMusicPF );
     333             :     }
     334             :     ELSE
     335             :     {
     336           0 :         st_fx->hMusicPF = NULL;
     337             :     }
     338             : 
     339             :     /* CNG and DTX */
     340           3 :     test();
     341           3 :     test();
     342           3 :     test();
     343           3 :     IF( idchan == 0 && ( ( st_fx->element_mode == EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) )
     344             :     {
     345           3 :         IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL )
     346             :         {
     347           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
     348             :         }
     349             : 
     350           3 :         td_cng_dec_init_fx( st_fx );
     351             :     }
     352             :     ELSE
     353             :     {
     354           0 :         st_fx->hTdCngDec = NULL;
     355             :     }
     356           3 :     st_fx->cng_type = -1;
     357           3 :     move16();
     358           3 :     st_fx->first_CNG = 0;
     359           3 :     move16();
     360           3 :     Copy( st_fx->lsp_old_fx, st_fx->lspCNG_fx, M ); // Q15
     361             : 
     362           3 :     st_fx->CNG_mode = -1;
     363           3 :     move16();
     364           3 :     st_fx->last_active_brate = ACELP_7k20;
     365           3 :     move32();
     366           3 :     st_fx->last_CNG_L_frame = L_FRAME;
     367           3 :     move16();
     368             : 
     369             : 
     370           3 :     st_fx->last_vad_fx = 0;
     371           3 :     move16();
     372             : 
     373             :     /* HF (6-7kHz) BWE */
     374           3 :     move16();
     375           3 :     st_fx->Q_stat_noise_ge = GE_SHIFT; // Q of ge_sm_fx
     376           3 :     move16();
     377           3 :     st_fx->cngTDLevel = 0;
     378           3 :     move16();
     379           3 :     st_fx->cngTDLevel_e = 0;
     380           3 :     move16();
     381             : 
     382             : 
     383             :     /*-----------------------------------------------------------------*
     384             :      * HQ core parameters
     385             :      *-----------------------------------------------------------------*/
     386           3 :     test();
     387           3 :     test();
     388           3 :     test();
     389           3 :     test();
     390           3 :     test();
     391           3 :     test();
     392           3 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, IVAS_SCE ) || ( st_fx->element_mode == EVS_MONO ) ) )
     393             :     {
     394           3 :         IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL )
     395             :         {
     396           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
     397             :         }
     398             : 
     399             :         /* HQ core initialization */
     400           3 :         HQ_core_dec_init_fx( st_fx->hHQ_core );
     401             : 
     402           3 :         IF( st_fx->element_mode == EVS_MONO )
     403             :         {
     404             :             /* HQ NB FEC initialization */
     405           3 :             IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL )
     406             :             {
     407           0 :                 return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) );
     408             :             }
     409           3 :             HQ_nbfec_init_fx( st_fx->hHQ_nbfec );
     410             :         }
     411             :         ELSE
     412             :         {
     413           0 :             st_fx->hHQ_nbfec = NULL;
     414             :         }
     415             :     }
     416             :     ELSE
     417             :     {
     418           0 :         st_fx->hHQ_core = NULL;
     419           0 :         st_fx->hHQ_nbfec = NULL;
     420             :     }
     421           3 :     st_fx->Qprev_synth_buffer_fx = 15;
     422           3 :     move16();
     423           3 :     st_fx->old_bfi_cnt = 0;
     424           3 :     move16();
     425           3 :     st_fx->prev_old_bfi = 0;
     426           3 :     move16();
     427           3 :     set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
     428           3 :     set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
     429           3 :     IF( st_fx->element_mode == EVS_MONO )
     430             :     {
     431           3 :         set16_fx( st_fx->old_synth_sw_fx, 0, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) );
     432             :     }
     433             :     /*-----------------------------------------------------------------*
     434             :      * TCX core
     435             :      *-----------------------------------------------------------------*/
     436             : 
     437             :     /* TCX-LTP */
     438           3 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
     439             :     {
     440           3 :         IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL )
     441             :         {
     442           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) );
     443             :         }
     444             :     }
     445             :     ELSE
     446             :     {
     447           0 :         st_fx->hTcxLtpDec = NULL;
     448             :     }
     449             : 
     450             :     /* TCX core */
     451           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     452             :     {
     453           3 :         IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL )
     454             :         {
     455           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) );
     456             :         }
     457             : 
     458           3 :         set16_fx( st_fx->hTcxDec->FBTCXdelayBuf, 0, 111 );
     459             : 
     460           3 :         st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
     461           3 :         st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS );
     462             :     }
     463             :     ELSE
     464             :     {
     465           0 :         st_fx->hTcxDec = NULL;
     466             :     }
     467             :     /* TCX config. data structure */
     468           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     469             :     {
     470           3 :         IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
     471             :         {
     472           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
     473             :         }
     474             :     }
     475             :     ELSE
     476             :     {
     477           0 :         st_fx->hTcxCfg = NULL;
     478             :     }
     479             : 
     480             :     /* Tonal MDCT concealment data structure */
     481             : 
     482           3 :     if ( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
     483             :     {
     484           0 :         return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
     485             :     }
     486             : 
     487           3 :     st_fx->prev_coder_type = GENERIC;
     488           3 :     move16();
     489             : 
     490           3 :     move16();
     491           3 :     st_fx->tilt_wb_fx = 0; // Q11
     492           3 :     move16();
     493             : 
     494           3 :     set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) );
     495           3 :     set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) );
     496           3 :     st_fx->old_bwe_delay = -1; /*Q0*/
     497           3 :     move16();
     498             : 
     499             :     /*-----------------------------------------------------------------*
     500             :      * TBE parameters
     501             :      *-----------------------------------------------------------------*/
     502             : 
     503           3 :     test();
     504           3 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     505             :     {
     506           3 :         IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL )
     507             :         {
     508           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
     509             :         }
     510             : 
     511           3 :         td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
     512             : 
     513           3 :         st_fx->prev_Q_bwe_exc = 31;
     514           3 :         move16();
     515             :     }
     516             :     ELSE
     517             :     {
     518           0 :         st_fx->hBWE_TD = NULL;
     519             :     }
     520             : 
     521           3 :     st_fx->tilt_swb_fx = 0; // Q24
     522           3 :     move16();
     523           3 :     st_fx->tilt_wb_fx = 0; // Q11
     524           3 :     move16();
     525             : 
     526           3 :     st_fx->prev_ener_shb_fx = 0; // Q1
     527           3 :     move16();
     528           3 :     st_fx->prev_enerLH_fx = 0; // Q1
     529           3 :     move16();
     530           3 :     st_fx->enerLH_fx = L_deposit_l( 0 );
     531           3 :     st_fx->enerLL_fx = L_deposit_l( 0 );
     532           3 :     st_fx->prev_enerLL_fx = 0;
     533           3 :     move16();
     534           3 :     st_fx->prev_fractive = 0;
     535           3 :     move16();
     536           3 :     st_fx->prev_bws_cnt = 0;
     537           3 :     move16();
     538           3 :     st_fx->bws_cnt = N_WS2N_FRAMES;
     539           3 :     move16();
     540           3 :     st_fx->bws_cnt1 = N_NS2W_FRAMES;
     541           3 :     move16();
     542           3 :     st_fx->attenu_fx = 3277; // Q15
     543           3 :     move16();
     544           3 :     st_fx->last_inner_frame = L_FRAME8k;
     545           3 :     move16();
     546           3 :     st_fx->last_bwidth = 0;
     547           3 :     move16();
     548             : 
     549             :     /*-----------------------------------------------------------------*
     550             :      * channel-aware mode parameters
     551             :      *-----------------------------------------------------------------*/
     552             : 
     553           3 :     set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
     554             : 
     555           3 :     st_fx->use_partial_copy = 0;
     556           3 :     move16();
     557           3 :     st_fx->prev_use_partial_copy = 0;
     558           3 :     move16();
     559           3 :     st_fx->rf_flag = 0;
     560           3 :     move16();
     561           3 :     st_fx->rf_flag_last = 0;
     562           3 :     st_fx->prev_rf_frame_type = 0;
     563           3 :     move16();
     564           3 :     st_fx->next_coder_type = 0;
     565           3 :     move16();
     566             : 
     567           3 :     st_fx->rf_target_bits = 0;
     568           3 :     move16();
     569             : 
     570           3 :     st_fx->rf_indx_nelp_fid = 0;
     571           3 :     move16();
     572           3 :     st_fx->rf_indx_nelp_iG1 = 0;
     573           3 :     move16();
     574           3 :     st_fx->rf_indx_nelp_iG2[0] = 0;
     575           3 :     move16();
     576           3 :     st_fx->rf_indx_nelp_iG2[1] = 0;
     577           3 :     move16();
     578           3 :     st_fx->rf_indx_tbeGainFr = 0;
     579           3 :     move16();
     580             : 
     581             :     /*----------------------------------------------------------------------------------*
     582             :      * AMR-WB IO mode parameters
     583             :      *----------------------------------------------------------------------------------*/
     584           3 :     test();
     585           3 :     IF( st_fx->Opt_AMR_WB || ( st_fx->element_mode == EVS_MONO ) )
     586             :     {
     587           3 :         IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL )
     588             :         {
     589           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
     590             :         }
     591             : 
     592             :         /* AMR-WB IO init */
     593           3 :         amr_wb_dec_init_fx( st_fx->hAmrwb_IO );
     594             : 
     595             :         /* AMR-WB IO HF synth init */
     596           3 :         hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
     597             :     }
     598             :     ELSE
     599             :     {
     600           0 :         st_fx->hAmrwb_IO = NULL;
     601             :     }
     602             :     /*-----------------------------------------------------------------*
     603             :      * HF (6-7kHz) (zero) BWE parameters
     604             :      *-----------------------------------------------------------------*/
     605           3 :     test();
     606           3 :     test();
     607           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     608             :     {
     609           3 :         IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL )
     610             :         {
     611           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) );
     612             :         }
     613             : 
     614           3 :         hf_synth_init_fx( st_fx->hBWE_zero );
     615             :         /* TBV  Hack for bit exactness with 26.452, Issue should be corrected there as the the reset is not perform on all values  of mem_hp400_fx*/
     616           3 :         set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
     617             :     }
     618             :     ELSE
     619             :     {
     620           0 :         st_fx->hBWE_zero = NULL;
     621             :     }
     622             : 
     623             :     /* HF synth init */
     624           3 :     hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
     625             : 
     626             : 
     627           3 :     st_fx->bpf_off = 0;
     628           3 :     move16();
     629             :     /*-----------------------------------------------------------------*
     630             :      * Bass post-filter parameters
     631             :      *-----------------------------------------------------------------*/
     632           3 :     test();
     633           3 :     test();
     634           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     635             :     {
     636           3 :         IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL )
     637             :         {
     638           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) );
     639             :         }
     640             : 
     641           3 :         bass_psfilter_init_fx( st_fx->hBPF );
     642             :     }
     643             :     ELSE
     644             :     {
     645           0 :         st_fx->hBPF = NULL;
     646             :     }
     647             :     /*-----------------------------------------------------------------*
     648             :      * FD BPF & resampling tools parameters
     649             :      *-----------------------------------------------------------------*/
     650             :     /* open analysis for max. SR 48kHz */
     651           3 :     IF( NE_32( ( error = openCldfb( &st_fx->cldfbAna, CLDFB_ANALYSIS, CLDFB_getNumChannels( 48000 ), 320 ) ), IVAS_ERR_OK ) )
     652             :     {
     653           0 :         return error;
     654             :     }
     655             : 
     656             :     /* open analysis BPF for max. SR 16kHz */
     657           3 :     IF( NE_32( ( error = openCldfb( &st_fx->cldfbBPF, CLDFB_ANALYSIS, CLDFB_getNumChannels( 16000 ), 320 ) ), IVAS_ERR_OK ) )
     658             :     {
     659           0 :         return error;
     660             :     }
     661             :     /* open synthesis for output SR */
     662           3 :     IF( NE_32( ( error = openCldfb( &st_fx->cldfbSyn, CLDFB_SYNTHESIS, CLDFB_getNumChannels( st_fx->output_Fs ), st_fx->output_frame_fx ) ), IVAS_ERR_OK ) )
     663             :     {
     664           0 :         return error;
     665             :     }
     666           3 :     move16();
     667           3 :     move16();
     668           3 :     move16();
     669           3 :     move16();
     670           3 :     move16();
     671           3 :     move16();
     672           3 :     move32();
     673           3 :     st_fx->last_active_bandsToZero_bwdec = 0;
     674           3 :     st_fx->perc_bwddec = 0;
     675           3 :     st_fx->last_flag_filter_NB = 0;
     676           3 :     st_fx->active_frame_cnt_bwddec = 0;
     677           3 :     st_fx->total_frame_cnt_bwddec = 0;
     678           3 :     set16_fx( st_fx->flag_buffer, 0, 20 );
     679           3 :     st_fx->avg_nrg_LT = 0;
     680             : 
     681           3 :     st_fx->Ng_ener_ST_fx = -13056;
     682           3 :     move16(); /*-51 IN Q8*/
     683           3 :     st_fx->old_Es_pred_fx = 0;
     684           3 :     move16();
     685           3 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
     686           3 :     st_fx->old_Aq_12_8_fx[0] = 4096;
     687           3 :     move16(); /*1 in Q12*/
     688             : 
     689             :     /*-----------------------------------------------------------------*
     690             :      * SC-VBR parameters
     691             :      *-----------------------------------------------------------------*/
     692             : 
     693           3 :     IF( st_fx->element_mode == EVS_MONO )
     694             :     {
     695           3 :         IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL )
     696             :         {
     697           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
     698             :         }
     699             : 
     700           3 :         sc_vbr_dec_init( st_fx->hSC_VBR );
     701             :     }
     702             :     ELSE
     703             :     {
     704           0 :         st_fx->hSC_VBR = NULL;
     705             :     }
     706             : 
     707           3 :     st_fx->last_ppp_mode_dec = 0;
     708           3 :     move16();
     709           3 :     st_fx->old_ppp_mode = 0;
     710           3 :     move16();
     711           3 :     st_fx->ppp_mode_dec = 0;
     712           3 :     move16();
     713           3 :     st_fx->last_nelp_mode_dec = 0;
     714           3 :     move16();
     715           3 :     st_fx->nelp_mode_dec = 0;
     716           3 :     move16();
     717           3 :     st_fx->prev_gain_pit_dec_fx = 0;
     718           3 :     move16();
     719           3 :     st_fx->prev_tilt_code_dec_fx = 0;
     720           3 :     move16();
     721           3 :     st_fx->vbr_hw_BWE_disable_dec = 0;
     722           3 :     move16();
     723           3 :     st_fx->last_vbr_hw_BWE_disable_dec = 0;
     724           3 :     move16();
     725             : 
     726             :     /*-----------------------------------------------------------------*
     727             :      * Mode 2 initialization
     728             :      *-----------------------------------------------------------------*/
     729             : 
     730           3 :     IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
     731             :     {
     732           0 :         return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
     733             :     }
     734             : 
     735           3 :     st_fx->enablePlcWaveadjust = 0;
     736           3 :     move16();
     737             : 
     738             :     /* Init Decoder */
     739           3 :     open_decoder_LPD_fx( st_fx, st_fx->total_brate, st_fx->bwidth );
     740             : 
     741           3 :     st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
     742           3 :     move16();
     743           3 :     st_fx->m_frame_type = ACTIVE_FRAME;
     744           3 :     move16();
     745           3 :     st_fx->m_old_frame_type = ACTIVE_FRAME;
     746           3 :     move16();
     747             : 
     748             : 
     749           3 :     newCldfbBands = CLDFB_getNumChannels( L_mult0( st_fx->L_frame, 50 ) );
     750             : 
     751           3 :     resampleCldfb( st_fx->cldfbAna, newCldfbBands, st_fx->L_frame, 1 );
     752           3 :     resampleCldfb( st_fx->cldfbBPF, newCldfbBands, st_fx->L_frame, 1 );
     753             : 
     754           3 :     test();
     755           3 :     IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || idchan == 0 ) /*&& mc_mode != MC_MODE_MCT && mc_mode != MC_MODE_PARAMUPMIX*/ )
     756             :     {
     757             :         /* Create FD_CNG instance */
     758             : 
     759           3 :         IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
     760             :         {
     761           0 :             return error;
     762             :         }
     763             : 
     764             :         /* Init FD-CNG */
     765           3 :         initFdCngDec_fx( st_fx, st_fx->cldfbSyn->scale );
     766             :     }
     767             :     ELSE
     768             :     {
     769           0 :         st_fx->hFdCngDec = NULL;
     770             :     }
     771             : 
     772           3 :     st_fx->lp_noise = -167772160l /*-20.f Q23*/;
     773           3 :     move32();
     774           3 :     st_fx->force_lpd_reset = 0;
     775           3 :     move16();
     776             : 
     777             :     /*-----------------------------------------------------------------*
     778             :      * initialzie Q values
     779             :      *-----------------------------------------------------------------*/
     780             : 
     781           3 :     st_fx->Q_syn2 = 0;
     782           3 :     move16();
     783           3 :     st_fx->Q_exc = 8;
     784           3 :     st_fx->prev_Q_exc = 0;
     785           3 :     move16();
     786           3 :     st_fx->Q_syn = 0;
     787           3 :     move16();
     788           3 :     st_fx->prev_Q_syn = 0;
     789           3 :     move16();
     790             : 
     791          18 :     FOR( i = 0; i < L_Q_MEM; i++ )
     792             :     {
     793          15 :         st_fx->Q_subfr[i] = 8;
     794          15 :         move16();
     795             :     }
     796             : 
     797           3 :     st_fx->prev_Q_exc_fr = 0;
     798           3 :     move16();
     799           3 :     st_fx->prev_Q_syn_fr = 0;
     800           3 :     move16();
     801             : 
     802             :     /*----------------------------------------------------------------------------------*
     803             :      * Stereo/IVAS parameters
     804             :      *----------------------------------------------------------------------------------*/
     805           3 :     st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
     806           3 :     move16();
     807           3 :     st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
     808           3 :     move16();
     809           3 :     st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
     810           3 :     move16();
     811           3 :     st_fx->element_mode = EVS_MONO; /* element mode */
     812           3 :     move16();
     813           3 :     st_fx->element_brate = -1; /* element bitrate */
     814           3 :     move16();
     815           3 :     st_fx->low_rate_mode = 0; /* low-rate mode flag */
     816           3 :     move16();
     817           3 :     st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
     818           3 :     move16();
     819             : 
     820             : #ifdef DEBUGGING
     821             :     st_fx->id_element = -1; /* element ID */
     822             : #endif
     823           3 :     st_fx->extl_orig = -1; /* extension layer */
     824           3 :     move16();
     825           3 :     st_fx->extl_brate_orig = 0; /* extension layer bitrate */
     826           3 :     move16();
     827             : 
     828           3 :     return error;
     829             : }
     830             : 
     831             : 
     832             : /*----------------------------------------------------------------------*
     833             :  * init_decoder_ivas_fx()
     834             :  *
     835             :  * Initialization of static variables for the IVAS decoder
     836             :  *----------------------------------------------------------------------*/
     837             : 
     838        8161 : ivas_error init_decoder_ivas_fx(
     839             :     Decoder_State *st_fx, /* o:   Decoder static variables structure */
     840             :     const Word16 idchan,  /* i  : channel ID                          */
     841             :     const MC_MODE mc_mode /* i  : MC mode                             */
     842             : )
     843             : {
     844             :     Word16 i;
     845             :     ivas_error error;
     846             : 
     847        8161 :     error = IVAS_ERR_OK;
     848        8161 :     move32();
     849             : 
     850             :     /*-----------------------------------------------------------------*
     851             :      * General parameters
     852             :      *-----------------------------------------------------------------*/
     853             : 
     854        8161 :     st_fx->codec_mode = MODE1;
     855        8161 :     move16();
     856        8161 :     st_fx->last_codec_mode = MODE1;
     857        8161 :     move16();
     858        8161 :     st_fx->core = ACELP_CORE;
     859        8161 :     move16();
     860        8161 :     st_fx->L_frame = L_FRAME;
     861        8161 :     move16();
     862        8161 :     st_fx->extl = -1;
     863        8161 :     move16();
     864        8161 :     st_fx->extl_orig = -1; /* extension layer */
     865        8161 :     move16();
     866        8161 :     st_fx->extl_brate_orig = 0; /* extension layer bitrate */
     867        8161 :     move16();
     868        8161 :     st_fx->last_bits_frame_nominal = -1;
     869        8161 :     move16();
     870        8161 :     st_fx->total_brate = ACELP_8k00;
     871        8161 :     move16();
     872        8161 :     st_fx->last_total_brate = -1;
     873        8161 :     move16();
     874        8161 :     st_fx->last_total_brate_ber = -1;
     875        8161 :     move32();
     876        8161 :     st_fx->core_brate = ACELP_8k00;
     877        8161 :     move16();
     878        8161 :     st_fx->ini_frame = 0;
     879        8161 :     move16();
     880        8161 :     st_fx->bwidth = NB;
     881        8161 :     move16();
     882        8161 :     st_fx->last_bwidth = NB;
     883        8161 :     move16();
     884        8161 :     st_fx->extl_brate = 0;
     885        8161 :     move16();
     886        8161 :     st_fx->coder_type = GENERIC; /* low-rate mode flag */
     887        8161 :     move16();
     888        8161 :     st_fx->last_coder_type = GENERIC;
     889        8161 :     move16();
     890        8161 :     st_fx->inactive_coder_type_flag = 0;
     891        8161 :     move16();
     892        8161 :     st_fx->last_L_frame = st_fx->L_frame;
     893        8161 :     move16();
     894        8161 :     st_fx->last_core_brate = st_fx->core_brate;
     895        8161 :     move16();
     896        8161 :     st_fx->last_core = -1;
     897        8161 :     move16();
     898        8161 :     st_fx->last_extl = st_fx->extl;
     899        8161 :     move16();
     900             : 
     901        8161 :     st_fx->flag_ACELP16k = set_ACELP_flag( st_fx->element_mode, st_fx->total_brate, st_fx->total_brate, idchan, 0, -1, -1 );
     902        8161 :     move16();
     903             : 
     904             :     /*-----------------------------------------------------------------*
     905             :      * ACELP core parameters
     906             :      *-----------------------------------------------------------------*/
     907             : 
     908             :     /* LSF initilaizations */
     909        8161 :     Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
     910             : 
     911        8161 :     init_lvq_fx( st_fx->offset_scale1_fx, st_fx->offset_scale2_fx, st_fx->offset_scale1_p_fx, st_fx->offset_scale2_p_fx, st_fx->no_scales_fx, st_fx->no_scales_p_fx );
     912             : 
     913        8161 :     set16_fx( st_fx->mem_MA_fx, 0, M );
     914             : 
     915        8161 :     st_fx->dm_fx.prev_state = 0; /* This corresponds to st_fx->dispMem in FLP */
     916        8161 :     move16();
     917        8161 :     st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 );
     918       57127 :     FOR( i = 2; i < 8; i++ )
     919             :     {
     920       48966 :         st_fx->dm_fx.prev_gain_pit[i - 2] = 0;
     921       48966 :         move16();
     922             :     }
     923        8161 :     st_fx->tilt_code_fx = 0;
     924        8161 :     move16();
     925        8161 :     st_fx->gc_threshold_fx = 0;
     926        8161 :     move32();
     927        8161 :     st_fx->last_good = UNVOICED_CLAS;
     928        8161 :     move16();
     929        8161 :     st_fx->clas_dec = UNVOICED_CLAS;
     930        8161 :     move16();
     931        8161 :     st_fx->low_rate_mode = 0; /* low-rate mode flag */
     932        8161 :     move16();
     933        8161 :     st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
     934        8161 :     move16();
     935        8161 :     st_fx->lp_gainp_fx = 0;
     936        8161 :     move16();
     937        8161 :     st_fx->lp_gainc_fx = 0;
     938        8161 :     move16();
     939             : 
     940        8161 :     set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC );
     941             : 
     942             :     /* AVQ pre-quantizer memory */
     943        8161 :     st_fx->mem_preemp_preQ_fx = 0;
     944        8161 :     move16();
     945        8161 :     st_fx->last_nq_preQ = 0;
     946        8161 :     move16();
     947        8161 :     st_fx->use_acelp_preq = 0;
     948        8161 :     move16();
     949             : 
     950        8161 :     st_fx->mem_deemph_fx = 0;
     951        8161 :     move16();
     952             : 
     953        8161 :     set16_fx( st_fx->mem_syn1_fx, 0, M );
     954        8161 :     set16_fx( st_fx->mem_syn2_fx, 0, M );
     955        8161 :     st_fx->stab_fac_fx = 0;
     956        8161 :     move16();
     957        8161 :     st_fx->stab_fac_smooth_fx = 0;
     958        8161 :     move16();
     959        8161 :     set16_fx( st_fx->agc_mem_fx, 0, 2 );
     960        8161 :     set16_fx( st_fx->mem_syn3_fx, 0, M );
     961             : 
     962        8161 :     st_fx->stab_fac_smooth_lt_fx = 0;
     963        8161 :     move16();
     964        8161 :     st_fx->log_energy_diff_lt_fx = 0;
     965        8161 :     move32();
     966        8161 :     st_fx->log_energy_old_fx = 0;
     967        8161 :     move32();
     968             : 
     969        8161 :     Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
     970        8161 :     lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_12k8 );
     971             : 
     972        8161 :     st_fx->mid_lsf_int = 0;
     973        8161 :     move16();
     974        8161 :     st_fx->safety_net = 0;
     975        8161 :     move16();
     976             : 
     977             :     /* FEC */
     978        8161 :     st_fx->scaling_flag = 0;
     979        8161 :     move16();
     980        8161 :     st_fx->lp_ener_FEC_av = 500000;
     981        8161 :     move32();
     982        8161 :     st_fx->lp_ener_FEC_max = 500000;
     983        8161 :     move32();
     984        8161 :     st_fx->prev_bfi = 0;
     985        8161 :     move16();
     986        8161 :     st_fx->lp_ener_FER_fx = 15360; /*60 in Q8*/
     987        8161 :     move16();
     988        8161 :     st_fx->old_enr_LP = 0;
     989        8161 :     move16();
     990        8161 :     st_fx->lp_ener_fx = L_deposit_l( 0 );
     991        8161 :     st_fx->enr_old_fx = L_deposit_l( 0 );
     992        8161 :     st_fx->bfi_pitch_fx = L_SUBFR_Q6;
     993        8161 :     move16();
     994        8161 :     st_fx->bfi_pitch_frame = L_FRAME;
     995        8161 :     move16();
     996        8161 :     set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
     997        8161 :     st_fx->classifier_Q_mem_syn = 0;
     998        8161 :     move16();
     999        8161 :     st_fx->last_con_tcx = 0;
    1000        8161 :     move16();
    1001             : 
    1002       89771 :     FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
    1003             :     {
    1004       81610 :         st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; /*15Q16*/
    1005       81610 :         move32();
    1006             :     }
    1007             : 
    1008        8161 :     st_fx->upd_cnt = MAX_UPD_CNT;
    1009        8161 :     move16();
    1010        8161 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
    1011        8161 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
    1012        8161 :     Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
    1013             : 
    1014        8161 :     st_fx->seed_acelp = RANDOM_INITSEED;
    1015        8161 :     move16();
    1016        8161 :     st_fx->seed = RANDOM_INITSEED;
    1017        8161 :     move16();
    1018        8161 :     st_fx->nbLostCmpt = 0;
    1019        8161 :     move16();
    1020        8161 :     st_fx->decision_hyst = 0;
    1021        8161 :     move16();
    1022        8161 :     st_fx->unv_cnt = 0;
    1023        8161 :     move16();
    1024        8161 :     st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
    1025        8161 :     st_fx->uv_count = 0;
    1026        8161 :     move16();
    1027        8161 :     st_fx->act_count = 3;
    1028        8161 :     move16();
    1029        8161 :     Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
    1030        8161 :     st_fx->noimix_seed = RANDOM_INITSEED;
    1031        8161 :     move16();
    1032        8161 :     st_fx->min_alpha_fx = 32767; /*1; Q15*/
    1033        8161 :     move16();
    1034        8161 :     st_fx->exc_pe_fx = 0;
    1035        8161 :     move16();
    1036        8161 :     st_fx->Q_stat_noise = 31;
    1037        8161 :     move16();
    1038        8161 :     st_fx->prev_coder_type = GENERIC;
    1039        8161 :     move16();
    1040             : 
    1041        8161 :     st_fx->tilt_wb_fx = 0; // Q11
    1042        8161 :     move16();
    1043             : 
    1044        8161 :     st_fx->last_voice_factor_fx = 0;
    1045        8161 :     move16();
    1046             : 
    1047        8161 :     set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
    1048        8161 :     st_fx->Qprev_synth_buffer_fx = 15;
    1049        8161 :     move16();
    1050        8161 :     set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
    1051             : 
    1052        8161 :     st_fx->old_bfi_cnt = 0;
    1053        8161 :     move16();
    1054             : 
    1055             :     /*-----------------------------------------------------------------*
    1056             :      * parameters for AC mode (GSC)
    1057             :      *-----------------------------------------------------------------*/
    1058             : 
    1059        8161 :     st_fx->GSC_noisy_speech = 0;
    1060        8161 :     move16();
    1061        8161 :     st_fx->GSC_IVAS_mode = 0;
    1062        8161 :     move16();
    1063        8161 :     st_fx->Last_GSC_noisy_speech_flag = 0;
    1064        8161 :     move16();
    1065             : 
    1066        8161 :     test();
    1067        8161 :     test();
    1068        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1069             :     {
    1070        2677 :         IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL )
    1071             :         {
    1072           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
    1073             :         }
    1074             : 
    1075        2677 :         GSC_dec_init_ivas_fx( st_fx->hGSCDec );
    1076             :     }
    1077             :     ELSE
    1078             :     {
    1079        5484 :         st_fx->hGSCDec = NULL;
    1080             :     }
    1081             : 
    1082             :     /*-----------------------------------------------------------------*
    1083             :      * parameters for fast recovery (WI)
    1084             :      *-----------------------------------------------------------------*/
    1085             : 
    1086        8161 :     test();
    1087        8161 :     IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) )
    1088             :     {
    1089           0 :         IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL )
    1090             :         {
    1091           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) );
    1092             :         }
    1093           0 :         set16_fx( st_fx->hWIDec->old_exc2_fx, 0, L_EXC_MEM );
    1094           0 :         set16_fx( st_fx->hWIDec->old_syn2_fx, 0, L_EXC_MEM );
    1095             :     }
    1096             :     ELSE
    1097             :     {
    1098        8161 :         st_fx->hWIDec = NULL;
    1099             :     }
    1100             : 
    1101             :     /* NB post-filter */
    1102             :     /*-----------------------------------------------------------------*
    1103             :      * NB/formant post-filter
    1104             :      *-----------------------------------------------------------------*/
    1105        8161 :     test();
    1106        8161 :     test();
    1107        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1108             :     {
    1109        2677 :         IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL )
    1110             :         {
    1111           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) );
    1112             :         }
    1113             : 
    1114        2677 :         Init_post_filter_fx( st_fx->hPFstat );
    1115        2677 :         st_fx->psf_lp_noise_fx = 0;
    1116        2677 :         move16();
    1117             :     }
    1118             :     ELSE
    1119             :     {
    1120        5484 :         st_fx->hPFstat = NULL;
    1121             :     }
    1122             : 
    1123             :     /*-----------------------------------------------------------------*
    1124             :      * HF (6-7kHz) (zero) BWE parameters
    1125             :      *-----------------------------------------------------------------*/
    1126             : 
    1127        8161 :     test();
    1128        8161 :     test();
    1129        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1130             :     {
    1131        2677 :         IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL )
    1132             :         {
    1133           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) );
    1134             :         }
    1135             : 
    1136        2677 :         hf_synth_init_fx( st_fx->hBWE_zero );
    1137        2677 :         set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
    1138             :     }
    1139             :     ELSE
    1140             :     {
    1141        5484 :         st_fx->hBWE_zero = NULL;
    1142             :     }
    1143             : 
    1144             :     /*-----------------------------------------------------------------*
    1145             :      * LD music post-filter
    1146             :      *-----------------------------------------------------------------*/
    1147        8161 :     test();
    1148        8161 :     test();
    1149        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1150             :     {
    1151        2677 :         IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL )
    1152             :         {
    1153           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) );
    1154             :         }
    1155             : 
    1156        2677 :         music_postfilt_init( st_fx->hMusicPF );
    1157             :     }
    1158             :     ELSE
    1159             :     {
    1160        5484 :         st_fx->hMusicPF = NULL;
    1161             :     }
    1162             : 
    1163             :     /*-----------------------------------------------------------------*
    1164             :      * CNG and DTX
    1165             :      *-----------------------------------------------------------------*/
    1166             : 
    1167        8161 :     st_fx->first_CNG = 0;
    1168        8161 :     move16();
    1169        8161 :     st_fx->cng_type = -1;
    1170        8161 :     move16();
    1171        8161 :     st_fx->last_active_brate = ACELP_7k20;
    1172        8161 :     move32();
    1173        8161 :     st_fx->last_CNG_L_frame = L_FRAME;
    1174        8161 :     move16();
    1175        8161 :     st_fx->last_vad_fx = 0;
    1176        8161 :     move16();
    1177        8161 :     st_fx->active_cnt = CNG_TYPE_HO;
    1178        8161 :     move16();
    1179             : 
    1180        8161 :     test();
    1181        8161 :     test();
    1182        8161 :     test();
    1183        8161 :     IF( idchan == 0 && ( ( st_fx->element_mode == EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) )
    1184             :     {
    1185          98 :         IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL )
    1186             :         {
    1187           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
    1188             :         }
    1189             : 
    1190          98 :         td_cng_dec_init_fx( st_fx );
    1191             :     }
    1192             :     ELSE
    1193             :     {
    1194        8063 :         st_fx->hTdCngDec = NULL;
    1195             :     }
    1196             : 
    1197        8161 :     st_fx->masa_sid_format = 0;
    1198        8161 :     move16();
    1199        8161 :     st_fx->Q_stat_noise_ge = GE_SHIFT;
    1200        8161 :     move16();
    1201             : 
    1202             :     /*-----------------------------------------------------------------*
    1203             :      * HQ core parameters
    1204             :      *-----------------------------------------------------------------*/
    1205             : 
    1206        8161 :     st_fx->prev_old_bfi = 0;
    1207        8161 :     move16();
    1208             : 
    1209        8161 :     set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
    1210        8161 :     set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
    1211             : 
    1212        8161 :     set32_fx( st_fx->delay_buf_out32_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
    1213        8161 :     set32_fx( st_fx->previoussynth_fx_32, 0, L_FRAME48k );
    1214             : 
    1215        8161 :     IF( st_fx->element_mode == EVS_MONO )
    1216             :     {
    1217           0 :         set16_fx( st_fx->old_synth_sw_fx, 0, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) );
    1218             :     }
    1219             : 
    1220        8161 :     test();
    1221        8161 :     test();
    1222        8161 :     test();
    1223        8161 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, IVAS_SCE ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) )
    1224             :     {
    1225        8063 :         IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL )
    1226             :         {
    1227           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
    1228             :         }
    1229             : 
    1230             :         /* HQ core initialization */
    1231        8063 :         HQ_core_dec_init_fx( st_fx->hHQ_core );
    1232             : 
    1233        8063 :         IF( st_fx->element_mode == EVS_MONO )
    1234             :         {
    1235             :             /* HQ NB FEC initialization */
    1236           0 :             IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL )
    1237             :             {
    1238           0 :                 return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) );
    1239             :             }
    1240             : 
    1241           0 :             HQ_nbfec_init_fx( st_fx->hHQ_nbfec );
    1242             :         }
    1243             :         ELSE
    1244             :         {
    1245        8063 :             st_fx->hHQ_nbfec = NULL;
    1246             :         }
    1247             :     }
    1248             :     ELSE
    1249             :     {
    1250          98 :         st_fx->hHQ_core = NULL;
    1251          98 :         st_fx->hHQ_nbfec = NULL;
    1252             :     }
    1253             : 
    1254             :     /*-----------------------------------------------------------------*
    1255             :      * TBE parameters
    1256             :      *-----------------------------------------------------------------*/
    1257             : 
    1258        8161 :     test();
    1259        8161 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1260             :     {
    1261        2677 :         IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL )
    1262             :         {
    1263           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
    1264             :         }
    1265             : 
    1266        2677 :         td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
    1267             : 
    1268        2677 :         st_fx->prev_Q_bwe_exc = 31;
    1269        2677 :         move16();
    1270             :     }
    1271             :     ELSE
    1272             :     {
    1273        5484 :         st_fx->hBWE_TD = NULL;
    1274             :     }
    1275             : 
    1276        8161 :     st_fx->old_bwe_delay = -1; /*Q0*/
    1277        8161 :     move16();
    1278        8161 :     set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) );
    1279             : 
    1280             :     /*-----------------------------------------------------------------*
    1281             :      * SWB BWE parameters
    1282             :      *-----------------------------------------------------------------*/
    1283        8161 :     test();
    1284        8161 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1285             :     {
    1286        2677 :         IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL )
    1287             :         {
    1288           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
    1289             :         }
    1290             : 
    1291        2677 :         fd_bwe_dec_init_fx( st_fx->hBWE_FD );
    1292             :     }
    1293             :     ELSE
    1294             :     {
    1295        5484 :         st_fx->hBWE_FD = NULL;
    1296             :     }
    1297             : 
    1298             :     /*-----------------------------------------------------------------*
    1299             :      * WB/SWB bandwidth switching parameters
    1300             :      *-----------------------------------------------------------------*/
    1301             : 
    1302        8161 :     st_fx->tilt_swb_fx = 0; // Q24
    1303        8161 :     move16();
    1304        8161 :     st_fx->prev_ener_shb_fx = 0; // Q1
    1305        8161 :     move16();
    1306        8161 :     st_fx->prev_enerLH_fx = 0; // Q1
    1307        8161 :     move16();
    1308        8161 :     st_fx->enerLH_fx = L_deposit_l( 0 );
    1309        8161 :     st_fx->enerLL_fx = L_deposit_l( 0 );
    1310        8161 :     st_fx->prev_enerLL_fx = 0;
    1311        8161 :     move16();
    1312        8161 :     st_fx->prev_fractive = 0;
    1313        8161 :     move16();
    1314        8161 :     st_fx->prev_bws_cnt = 0;
    1315        8161 :     move16();
    1316        8161 :     st_fx->bws_cnt = N_WS2N_FRAMES;
    1317        8161 :     move16();
    1318        8161 :     st_fx->bws_cnt1 = N_NS2W_FRAMES;
    1319        8161 :     move16();
    1320        8161 :     st_fx->attenu_fx = 3277; // Q15
    1321        8161 :     move16();
    1322        8161 :     st_fx->last_inner_frame = L_FRAME8k;
    1323        8161 :     move16();
    1324             : 
    1325             :     /*-----------------------------------------------------------------*
    1326             :      * HR SWB BWE parameters
    1327             :      *-----------------------------------------------------------------*/
    1328             : 
    1329        8161 :     IF( ( st_fx->element_mode == EVS_MONO ) )
    1330             :     {
    1331           0 :         IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL )
    1332             :         {
    1333           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) );
    1334             :         }
    1335             : 
    1336           0 :         hr_bwe_dec_init( st_fx->hBWE_FD_HR );
    1337             :     }
    1338             :     ELSE
    1339             :     {
    1340        8161 :         st_fx->hBWE_FD_HR = NULL;
    1341             :     }
    1342             : 
    1343             :     /*----------------------------------------------------------------------------------*
    1344             :      * AMR-WB IO mode parameters
    1345             :      *----------------------------------------------------------------------------------*/
    1346        8161 :     test();
    1347        8161 :     IF( st_fx->Opt_AMR_WB || ( st_fx->element_mode == EVS_MONO ) )
    1348             :     {
    1349           0 :         IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL )
    1350             :         {
    1351           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
    1352             :         }
    1353             : 
    1354             :         /* AMR-WB IO init */
    1355           0 :         amr_wb_dec_init_fx( st_fx->hAmrwb_IO );
    1356             : 
    1357             :         /* AMR-WB IO HF synth init */
    1358           0 :         hf_synth_amr_wb_init_fx( st_fx->hAmrwb_IO );
    1359             :     }
    1360             :     ELSE
    1361             :     {
    1362        8161 :         st_fx->hAmrwb_IO = NULL;
    1363             :     }
    1364             : 
    1365             :     /*-----------------------------------------------------------------*
    1366             :      * channel-aware mode parameters
    1367             :      *-----------------------------------------------------------------*/
    1368             : 
    1369        8161 :     set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
    1370        8161 :     st_fx->use_partial_copy = 0;
    1371        8161 :     move16();
    1372        8161 :     st_fx->prev_use_partial_copy = 0;
    1373        8161 :     move16();
    1374        8161 :     st_fx->rf_flag = 0;
    1375        8161 :     move16();
    1376        8161 :     st_fx->rf_flag_last = 0;
    1377        8161 :     move16();
    1378        8161 :     st_fx->prev_rf_frame_type = 0;
    1379        8161 :     move16();
    1380        8161 :     st_fx->next_coder_type = 0;
    1381        8161 :     move16();
    1382        8161 :     st_fx->rf_target_bits = 0;
    1383        8161 :     move16();
    1384        8161 :     st_fx->rf_indx_nelp_fid = 0;
    1385        8161 :     move16();
    1386        8161 :     st_fx->rf_indx_nelp_iG1 = 0;
    1387        8161 :     move16();
    1388        8161 :     st_fx->rf_indx_nelp_iG2[0] = 0;
    1389        8161 :     move16();
    1390        8161 :     st_fx->rf_indx_nelp_iG2[1] = 0;
    1391        8161 :     move16();
    1392        8161 :     st_fx->rf_indx_tbeGainFr = 0;
    1393        8161 :     move16();
    1394             : 
    1395             :     /*-----------------------------------------------------------------*
    1396             :      * Bass post-filter parameters
    1397             :      *-----------------------------------------------------------------*/
    1398             : 
    1399        8161 :     st_fx->bpf_off = 0;
    1400        8161 :     move16();
    1401             : 
    1402        8161 :     test();
    1403        8161 :     test();
    1404        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1405             :     {
    1406        2677 :         IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL )
    1407             :         {
    1408           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) );
    1409             :         }
    1410             : 
    1411        2677 :         bass_psfilter_init_fx( st_fx->hBPF );
    1412             :     }
    1413             :     ELSE
    1414             :     {
    1415        5484 :         st_fx->hBPF = NULL;
    1416             :     }
    1417             : 
    1418             :     /*-----------------------------------------------------------------*
    1419             :      * FD BPF & resampling tools parameters
    1420             :      *-----------------------------------------------------------------*/
    1421        8161 :     test();
    1422        8161 :     test();
    1423        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1424             :     {
    1425             :         /* open analysis for max. SR 48kHz */
    1426        2677 :         IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
    1427             :         {
    1428           0 :             return error;
    1429             :         }
    1430             : 
    1431             :         /* open analysis BPF for max. SR 16kHz */
    1432        2677 :         IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
    1433             :         {
    1434           0 :             return error;
    1435             :         }
    1436             :     }
    1437             :     ELSE
    1438             :     {
    1439        5484 :         st_fx->cldfbAna = NULL;
    1440        5484 :         st_fx->cldfbBPF = NULL;
    1441             :     }
    1442             : 
    1443             :     /* open synthesis for output SR */
    1444        8161 :     IF( NE_32( ( error = openCldfb_ivas_fx( &st_fx->cldfbSyn, CLDFB_SYNTHESIS, st_fx->output_Fs, CLDFB_PROTOTYPE_1_25MS, DEC ) ), IVAS_ERR_OK ) )
    1445             :     {
    1446           0 :         return error;
    1447             :     }
    1448             : 
    1449        8161 :     st_fx->cldfbSynHB = NULL;
    1450        8161 :     st_fx->last_active_bandsToZero_bwdec = 0;
    1451        8161 :     move16();
    1452        8161 :     st_fx->perc_bwddec = 0;
    1453        8161 :     move16();
    1454        8161 :     st_fx->last_flag_filter_NB = 0;
    1455        8161 :     move16();
    1456        8161 :     st_fx->active_frame_cnt_bwddec = 0;
    1457        8161 :     move16();
    1458        8161 :     st_fx->total_frame_cnt_bwddec = 0;
    1459        8161 :     move16();
    1460        8161 :     set16_fx( st_fx->flag_buffer, 0, 20 );
    1461        8161 :     st_fx->avg_nrg_LT = 0;
    1462        8161 :     move32();
    1463             : 
    1464             :     /*-----------------------------------------------------------------*
    1465             :      * Noise gate parameters
    1466             :      *-----------------------------------------------------------------*/
    1467             : 
    1468        8161 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
    1469        8161 :     st_fx->old_Aq_12_8_fx[0] = ONE_IN_Q12;
    1470        8161 :     move16();
    1471        8161 :     st_fx->Ng_ener_ST_fx = -13056; /*-51 IN Q8*/
    1472        8161 :     move16();
    1473        8161 :     st_fx->old_Es_pred_fx = 0;
    1474        8161 :     move16();
    1475        8161 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
    1476        8161 :     st_fx->old_Aq_12_8_fx[0] = 4096; /*1 in Q12*/
    1477        8161 :     move16();
    1478             : 
    1479             :     /*-----------------------------------------------------------------*
    1480             :      * SC-VBR parameters
    1481             :      *-----------------------------------------------------------------*/
    1482             : 
    1483        8161 :     IF( st_fx->element_mode == EVS_MONO )
    1484             :     {
    1485           0 :         IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL )
    1486             :         {
    1487           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
    1488             :         }
    1489             : 
    1490           0 :         sc_vbr_dec_init( st_fx->hSC_VBR );
    1491             :     }
    1492             :     ELSE
    1493             :     {
    1494        8161 :         st_fx->hSC_VBR = NULL;
    1495             :     }
    1496             : 
    1497        8161 :     st_fx->last_ppp_mode_dec = 0;
    1498        8161 :     move16();
    1499        8161 :     st_fx->old_ppp_mode = 0;
    1500        8161 :     move16();
    1501        8161 :     st_fx->ppp_mode_dec = 0;
    1502        8161 :     move16();
    1503        8161 :     st_fx->last_nelp_mode_dec = 0;
    1504        8161 :     move16();
    1505        8161 :     st_fx->nelp_mode_dec = 0;
    1506        8161 :     move16();
    1507        8161 :     st_fx->prev_gain_pit_dec_fx = 0;
    1508        8161 :     move16();
    1509        8161 :     st_fx->prev_tilt_code_dec_fx = 0;
    1510        8161 :     move16();
    1511        8161 :     st_fx->vbr_hw_BWE_disable_dec = 0;
    1512        8161 :     move16();
    1513        8161 :     st_fx->last_vbr_hw_BWE_disable_dec = 0;
    1514        8161 :     move16();
    1515             : 
    1516             :     /*-----------------------------------------------------------------*
    1517             :      * TCX core
    1518             :      *-----------------------------------------------------------------*/
    1519             : 
    1520             :     /* TCX-LTP */
    1521        8161 :     test();
    1522        8161 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1523             :     {
    1524        8063 :         IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL )
    1525             :         {
    1526           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) );
    1527             :         }
    1528             :     }
    1529             :     ELSE
    1530             :     {
    1531          98 :         st_fx->hTcxLtpDec = NULL;
    1532             :     }
    1533             : 
    1534             :     /* TCX core */
    1535        8161 :     test();
    1536        8161 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1537             :     {
    1538        8063 :         IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL )
    1539             :         {
    1540           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) );
    1541             :         }
    1542             : 
    1543        8063 :         set32_fx( st_fx->hTcxDec->FBTCXdelayBuf_32, 0, 111 );
    1544             : 
    1545        8063 :         st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
    1546        8063 :         st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS );
    1547             :     }
    1548             :     ELSE
    1549             :     {
    1550          98 :         st_fx->hTcxDec = NULL;
    1551             :     }
    1552             : 
    1553             :     /* TCX config. data structure */
    1554        8161 :     test();
    1555        8161 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1556             :     {
    1557        8063 :         IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
    1558             :         {
    1559           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
    1560             :         }
    1561        8063 :         st_fx->hTcxCfg->tcx_mdct_window_length = L_FRAME32k / 2;
    1562        8063 :         move16();
    1563             :     }
    1564             :     ELSE
    1565             :     {
    1566          98 :         st_fx->hTcxCfg = NULL;
    1567             :     }
    1568             : 
    1569             :     /* Tonal MDCT concealment data structure */
    1570        8161 :     test();
    1571        8161 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1572             :     {
    1573        8063 :         IF( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
    1574             :         {
    1575           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
    1576             :         }
    1577             :     }
    1578             :     ELSE
    1579             :     {
    1580          98 :         st_fx->hTonalMDCTConc = NULL;
    1581             :     }
    1582             : 
    1583             :     /*-----------------------------------------------------------------*
    1584             :      * IGF
    1585             :      *-----------------------------------------------------------------*/
    1586             : 
    1587        8161 :     test();
    1588        8161 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1589             :     {
    1590        8063 :         IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
    1591             :         {
    1592           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
    1593             :         }
    1594             : 
    1595        8063 :         st_fx->igf = 0;
    1596        8063 :         move16();
    1597        8063 :         init_igf_dec( st_fx->hIGFDec );
    1598             :     }
    1599             :     ELSE
    1600             :     {
    1601          98 :         st_fx->hIGFDec = NULL;
    1602             :     }
    1603             : 
    1604             :     /*-----------------------------------------------------------------*
    1605             :      * Mode 2 initialization
    1606             :      *-----------------------------------------------------------------*/
    1607        8161 :     IF( ( st_fx->element_mode == EVS_MONO ) )
    1608             :     {
    1609           0 :         IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
    1610             :         {
    1611           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
    1612             :         }
    1613             :     }
    1614             :     ELSE
    1615             :     {
    1616        8161 :         st_fx->hPlcInfo = NULL;
    1617             :     }
    1618             : 
    1619        8161 :     IF( st_fx->element_mode == EVS_MONO )
    1620             :     {
    1621           0 :         IF( ( st_fx->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL )
    1622             :         {
    1623           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
    1624             :         }
    1625             :     }
    1626             :     ELSE
    1627             :     {
    1628        8161 :         st_fx->hTECDec = NULL;
    1629             :     }
    1630             : 
    1631             : 
    1632             :     /* Init Decoder */
    1633        8161 :     Word16 Q_syn_Overl_TDAC = 0, Q_fer_samples = 0, Q_syn_Overl = 0, Q_syn_Overl_TDACFB = 0, Q_syn_OverlFB = 0, Q_old_out = 0, Q_old_outLB = 0, Q_old_Aq_12_8 = 0;
    1634        8161 :     move16();
    1635        8161 :     move16();
    1636        8161 :     move16();
    1637        8161 :     move16();
    1638        8161 :     move16();
    1639        8161 :     move16();
    1640        8161 :     move16();
    1641        8161 :     move16();
    1642        8161 :     open_decoder_LPD_ivas_fx( st_fx, st_fx->total_brate, st_fx->last_total_brate, st_fx->bwidth, 0, st_fx->element_mode, 1, &Q_syn_Overl_TDAC, &Q_fer_samples, &Q_syn_Overl, &Q_syn_Overl_TDACFB, &Q_syn_OverlFB, &Q_old_out, &Q_old_outLB, &Q_old_Aq_12_8 );
    1643             : 
    1644             :     /* PLC mode initialization */
    1645        8161 :     st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
    1646        8161 :     move16();
    1647             : 
    1648             :     /* Init bandwidth / frame_type */
    1649        8161 :     st_fx->m_frame_type = ACTIVE_FRAME;
    1650        8161 :     move16();
    1651        8161 :     st_fx->m_old_frame_type = ACTIVE_FRAME;
    1652        8161 :     move16();
    1653             : 
    1654        8161 :     test();
    1655        8161 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1656             :     {
    1657        2677 :         resampleCldfb_ivas_fx( st_fx->cldfbAna, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
    1658        2677 :         resampleCldfb_ivas_fx( st_fx->cldfbBPF, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
    1659             :     }
    1660             : 
    1661             :     /*-----------------------------------------------------------------*
    1662             :      * FD-CNG decoder
    1663             :      *-----------------------------------------------------------------*/
    1664             : 
    1665        8161 :     test();
    1666        8161 :     test();
    1667        8161 :     test();
    1668        8161 :     IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || idchan == 0 ) && NE_16( mc_mode, MC_MODE_MCT ) && NE_16( mc_mode, MC_MODE_PARAMUPMIX ) )
    1669             :     {
    1670             :         /* Create FD_CNG instance */
    1671             : 
    1672        6051 :         IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
    1673             :         {
    1674           0 :             return error;
    1675             :         }
    1676             : 
    1677             :         /* Init FD-CNG */
    1678        6051 :         initFdCngDec_ivas_fx( st_fx, st_fx->cldfbSyn->scale );
    1679             :     }
    1680             :     ELSE
    1681             :     {
    1682        2110 :         st_fx->hFdCngDec = NULL;
    1683             :     }
    1684             : 
    1685        8161 :     st_fx->cngTDLevel = 0;
    1686        8161 :     move16();
    1687        8161 :     st_fx->cngTDLevel_e = 0;
    1688        8161 :     move16();
    1689        8161 :     st_fx->lp_noise = -167772160l /*-20.f Q23*/;
    1690        8161 :     move32();
    1691        8161 :     st_fx->force_lpd_reset = 0;
    1692        8161 :     move16();
    1693             : 
    1694             : 
    1695             :     /*-----------------------------------------------------------------*
    1696             :      * initialzie Q values
    1697             :      *-----------------------------------------------------------------*/
    1698             : 
    1699        8161 :     st_fx->Q_syn2 = 0;
    1700        8161 :     move16();
    1701        8161 :     st_fx->Q_exc = 8;
    1702        8161 :     move16();
    1703        8161 :     st_fx->prev_Q_exc = 0;
    1704        8161 :     move16();
    1705        8161 :     st_fx->Q_syn = 0;
    1706        8161 :     move16();
    1707        8161 :     st_fx->prev_Q_syn = 0;
    1708        8161 :     move16();
    1709             : 
    1710       48966 :     FOR( i = 0; i < L_Q_MEM; i++ )
    1711             :     {
    1712       40805 :         st_fx->Q_subfr[i] = 8;
    1713       40805 :         move16();
    1714             :     }
    1715             : 
    1716        8161 :     st_fx->prev_Q_exc_fr = 0;
    1717        8161 :     move16();
    1718        8161 :     st_fx->prev_Q_syn_fr = 0;
    1719        8161 :     move16();
    1720             : 
    1721             :     /*-----------------------------------------------------------------*
    1722             :      * IVAS parameters
    1723             :      *-----------------------------------------------------------------*/
    1724             : 
    1725        8161 :     st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
    1726        8161 :     move16();
    1727        8161 :     st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
    1728        8161 :     move16();
    1729        8161 :     st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
    1730        8161 :     move16();
    1731        8161 :     st_fx->cng_ism_flag = 0;
    1732        8161 :     move16();
    1733             : 
    1734        8161 :     return error;
    1735             : }
    1736             : 
    1737             : 
    1738             : /*----------------------------------------------------------------------*
    1739             :  * reset_preecho_dec()
    1740             :  *
    1741             :  * Initialization of static variables for pre-echo
    1742             :  *----------------------------------------------------------------------*/
    1743     1089436 : void reset_preecho_dec_fx(
    1744             :     HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle  */
    1745             : )
    1746             : {
    1747     1089436 :     hHQ_core->memfilt_lb_fx = 0;
    1748     1089436 :     move16();
    1749     1089436 :     hHQ_core->mean_prev_hb_fx = L_deposit_l( 0 );
    1750     1089436 :     hHQ_core->smoothmem_fx = 32767;
    1751     1089436 :     move16();
    1752     1089436 :     hHQ_core->mean_prev_fx = L_deposit_l( 0 );
    1753     1089436 :     hHQ_core->mean_prev_nc_fx = L_deposit_l( 0 );
    1754     1089436 :     hHQ_core->wmold_hb_fx = 32767;
    1755     1089436 :     move16();
    1756     1089436 :     hHQ_core->prevflag = 0;
    1757     1089436 :     move16();
    1758     1089436 :     hHQ_core->pastpre = 0;
    1759     1089436 :     move16();
    1760             : 
    1761     1089436 :     return;
    1762             : }
    1763             : 
    1764             : /*----------------------------------------------------------------------*
    1765             :  * destroy_cldfb_decoder_fx()
    1766             :  *
    1767             :  * Free memory which was allocated in init_decoder()
    1768             :  *----------------------------------------------------------------------*/
    1769             : 
    1770           3 : void destroy_cldfb_decoder_fx(
    1771             :     Decoder_State *st_fx /* o:   Decoder static variables structure */
    1772             : )
    1773             : {
    1774             : 
    1775             :     /* CLDFB BPF & resampling tools */
    1776             : 
    1777             :     /* delete analysis for max. SR 16kHz */
    1778           3 :     deleteCldfb( &st_fx->cldfbAna );
    1779             : 
    1780             :     /* delete analysis BPF for max. SR 16kHz */
    1781           3 :     deleteCldfb( &st_fx->cldfbBPF );
    1782             : 
    1783             :     /* delete synthesis for output SR */
    1784           3 :     deleteCldfb( &st_fx->cldfbSyn );
    1785             : 
    1786           3 :     deleteFdCngDec_fx( &st_fx->hFdCngDec );
    1787             : 
    1788           3 :     return;
    1789             : }
    1790             : 
    1791        8161 : void destroy_cldfb_decoder_ivas_fx(
    1792             :     Decoder_State *st /* o  :   Decoder static variables structure */
    1793             : )
    1794             : {
    1795             :     /* CLDFB BPF & resampling tools */
    1796        8161 :     deleteCldfb_ivas_fx( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */
    1797        8161 :     deleteCldfb_ivas_fx( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */
    1798        8161 :     deleteCldfb_ivas_fx( &st->cldfbSyn ); /* delete synthesis at output sampling rate */
    1799        8161 :     deleteCldfb_ivas_fx( &st->cldfbSynHB );
    1800             : 
    1801        8161 :     deleteFdCngDec_fx( &st->hFdCngDec );
    1802             : 
    1803        8161 :     return;
    1804             : }

Generated by: LCOV version 1.14