LCOV - code coverage report
Current view: top level - lib_dec - init_dec_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 914 1000 91.4 %
Date: 2025-05-03 01:55:50 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        7233 : 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        7233 :     error = IVAS_ERR_OK;
     848        7233 :     move32();
     849             : 
     850             :     /*-----------------------------------------------------------------*
     851             :      * General parameters
     852             :      *-----------------------------------------------------------------*/
     853             : 
     854        7233 :     st_fx->codec_mode = MODE1;
     855        7233 :     move16();
     856        7233 :     st_fx->last_codec_mode = MODE1;
     857        7233 :     move16();
     858        7233 :     st_fx->core = ACELP_CORE;
     859        7233 :     move16();
     860        7233 :     st_fx->L_frame = L_FRAME;
     861        7233 :     move16();
     862        7233 :     st_fx->extl = -1;
     863        7233 :     move16();
     864        7233 :     st_fx->extl_orig = -1; /* extension layer */
     865        7233 :     move16();
     866        7233 :     st_fx->extl_brate_orig = 0; /* extension layer bitrate */
     867        7233 :     move16();
     868        7233 :     st_fx->last_bits_frame_nominal = -1;
     869        7233 :     move16();
     870        7233 :     st_fx->total_brate = ACELP_8k00;
     871        7233 :     move16();
     872        7233 :     st_fx->last_total_brate = -1;
     873        7233 :     move16();
     874        7233 :     st_fx->last_total_brate_ber = -1;
     875        7233 :     move32();
     876        7233 :     st_fx->core_brate = ACELP_8k00;
     877        7233 :     move16();
     878        7233 :     st_fx->ini_frame = 0;
     879        7233 :     move16();
     880        7233 :     st_fx->bwidth = NB;
     881        7233 :     move16();
     882        7233 :     st_fx->last_bwidth = NB;
     883        7233 :     move16();
     884        7233 :     st_fx->extl_brate = 0;
     885        7233 :     move16();
     886        7233 :     st_fx->coder_type = GENERIC; /* low-rate mode flag */
     887        7233 :     move16();
     888        7233 :     st_fx->last_coder_type = GENERIC;
     889        7233 :     move16();
     890        7233 :     st_fx->inactive_coder_type_flag = 0;
     891        7233 :     move16();
     892        7233 :     st_fx->last_L_frame = st_fx->L_frame;
     893        7233 :     move16();
     894        7233 :     st_fx->last_core_brate = st_fx->core_brate;
     895        7233 :     move16();
     896        7233 :     st_fx->last_core = -1;
     897        7233 :     move16();
     898        7233 :     st_fx->last_extl = st_fx->extl;
     899        7233 :     move16();
     900             : 
     901        7233 :     st_fx->flag_ACELP16k = set_ACELP_flag( st_fx->element_mode, st_fx->total_brate, st_fx->total_brate, idchan, 0, -1, -1 );
     902        7233 :     move16();
     903             : 
     904             :     /*-----------------------------------------------------------------*
     905             :      * ACELP core parameters
     906             :      *-----------------------------------------------------------------*/
     907             : 
     908             :     /* LSF initilaizations */
     909        7233 :     Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
     910             : 
     911        7233 :     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        7233 :     set16_fx( st_fx->mem_MA_fx, 0, M );
     914             : 
     915        7233 :     st_fx->dm_fx.prev_state = 0; /* This corresponds to st_fx->dispMem in FLP */
     916        7233 :     move16();
     917        7233 :     st_fx->dm_fx.prev_gain_code = L_deposit_l( 0 );
     918       50631 :     FOR( i = 2; i < 8; i++ )
     919             :     {
     920       43398 :         st_fx->dm_fx.prev_gain_pit[i - 2] = 0;
     921       43398 :         move16();
     922             :     }
     923        7233 :     st_fx->tilt_code_fx = 0;
     924        7233 :     move16();
     925        7233 :     st_fx->gc_threshold_fx = 0;
     926        7233 :     move32();
     927        7233 :     st_fx->last_good = UNVOICED_CLAS;
     928        7233 :     move16();
     929        7233 :     st_fx->clas_dec = UNVOICED_CLAS;
     930        7233 :     move16();
     931        7233 :     st_fx->low_rate_mode = 0; /* low-rate mode flag */
     932        7233 :     move16();
     933        7233 :     st_fx->last_low_rate_mode = 0; /* low-rate mode flag */
     934        7233 :     move16();
     935        7233 :     st_fx->lp_gainp_fx = 0;
     936        7233 :     move16();
     937        7233 :     st_fx->lp_gainc_fx = 0;
     938        7233 :     move16();
     939             : 
     940        7233 :     set16_fx( st_fx->old_exc_fx, 0, L_EXC_MEM_DEC );
     941             : 
     942             :     /* AVQ pre-quantizer memory */
     943        7233 :     st_fx->mem_preemp_preQ_fx = 0;
     944        7233 :     move16();
     945        7233 :     st_fx->last_nq_preQ = 0;
     946        7233 :     move16();
     947        7233 :     st_fx->use_acelp_preq = 0;
     948        7233 :     move16();
     949             : 
     950        7233 :     st_fx->mem_deemph_fx = 0;
     951        7233 :     move16();
     952             : 
     953        7233 :     set16_fx( st_fx->mem_syn1_fx, 0, M );
     954        7233 :     set16_fx( st_fx->mem_syn2_fx, 0, M );
     955        7233 :     st_fx->stab_fac_fx = 0;
     956        7233 :     move16();
     957        7233 :     st_fx->stab_fac_smooth_fx = 0;
     958        7233 :     move16();
     959        7233 :     set16_fx( st_fx->agc_mem_fx, 0, 2 );
     960        7233 :     set16_fx( st_fx->mem_syn3_fx, 0, M );
     961             : 
     962        7233 :     st_fx->stab_fac_smooth_lt_fx = 0;
     963        7233 :     move16();
     964        7233 :     st_fx->log_energy_diff_lt_fx = 0;
     965        7233 :     move32();
     966        7233 :     st_fx->log_energy_old_fx = 0;
     967        7233 :     move32();
     968             : 
     969        7233 :     Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
     970        7233 :     lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old_fx, M, INT_FS_12k8 );
     971             : 
     972        7233 :     st_fx->mid_lsf_int = 0;
     973        7233 :     move16();
     974        7233 :     st_fx->safety_net = 0;
     975        7233 :     move16();
     976             : 
     977             :     /* FEC */
     978        7233 :     st_fx->scaling_flag = 0;
     979        7233 :     move16();
     980        7233 :     st_fx->lp_ener_FEC_av = 500000;
     981        7233 :     move32();
     982        7233 :     st_fx->lp_ener_FEC_max = 500000;
     983        7233 :     move32();
     984        7233 :     st_fx->prev_bfi = 0;
     985        7233 :     move16();
     986        7233 :     st_fx->lp_ener_FER_fx = 15360; /*60 in Q8*/
     987        7233 :     move16();
     988        7233 :     st_fx->old_enr_LP = 0;
     989        7233 :     move16();
     990        7233 :     st_fx->lp_ener_fx = L_deposit_l( 0 );
     991        7233 :     st_fx->enr_old_fx = L_deposit_l( 0 );
     992        7233 :     st_fx->bfi_pitch_fx = L_SUBFR_Q6;
     993        7233 :     move16();
     994        7233 :     st_fx->bfi_pitch_frame = L_FRAME;
     995        7233 :     move16();
     996        7233 :     set16_fx( st_fx->mem_syn_clas_estim_fx, 0, L_SYN_MEM_CLAS_ESTIM );
     997        7233 :     st_fx->classifier_Q_mem_syn = 0;
     998        7233 :     move16();
     999        7233 :     st_fx->last_con_tcx = 0;
    1000        7233 :     move16();
    1001             : 
    1002       79563 :     FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
    1003             :     {
    1004       72330 :         st_fx->old_pitch_buf_fx[i] = L_SUBFR << 16; /*15Q16*/
    1005       72330 :         move32();
    1006             :     }
    1007             : 
    1008        7233 :     st_fx->upd_cnt = MAX_UPD_CNT;
    1009        7233 :     move16();
    1010        7233 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
    1011        7233 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
    1012        7233 :     Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
    1013             : 
    1014        7233 :     st_fx->seed_acelp = RANDOM_INITSEED;
    1015        7233 :     move16();
    1016        7233 :     st_fx->seed = RANDOM_INITSEED;
    1017        7233 :     move16();
    1018        7233 :     st_fx->nbLostCmpt = 0;
    1019        7233 :     move16();
    1020        7233 :     st_fx->decision_hyst = 0;
    1021        7233 :     move16();
    1022        7233 :     st_fx->unv_cnt = 0;
    1023        7233 :     move16();
    1024        7233 :     st_fx->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
    1025        7233 :     st_fx->uv_count = 0;
    1026        7233 :     move16();
    1027        7233 :     st_fx->act_count = 3;
    1028        7233 :     move16();
    1029        7233 :     Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
    1030        7233 :     st_fx->noimix_seed = RANDOM_INITSEED;
    1031        7233 :     move16();
    1032        7233 :     st_fx->min_alpha_fx = 32767; /*1; Q15*/
    1033        7233 :     move16();
    1034        7233 :     st_fx->exc_pe_fx = 0;
    1035        7233 :     move16();
    1036        7233 :     st_fx->Q_stat_noise = 31;
    1037        7233 :     move16();
    1038        7233 :     st_fx->prev_coder_type = GENERIC;
    1039        7233 :     move16();
    1040             : 
    1041        7233 :     st_fx->tilt_wb_fx = 0; // Q11
    1042        7233 :     move16();
    1043             : 
    1044        7233 :     st_fx->last_voice_factor_fx = 0;
    1045        7233 :     move16();
    1046             : 
    1047        7233 :     set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
    1048        7233 :     st_fx->Qprev_synth_buffer_fx = 15;
    1049        7233 :     move16();
    1050        7233 :     set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) );
    1051             : 
    1052        7233 :     st_fx->old_bfi_cnt = 0;
    1053        7233 :     move16();
    1054             : 
    1055             :     /*-----------------------------------------------------------------*
    1056             :      * parameters for AC mode (GSC)
    1057             :      *-----------------------------------------------------------------*/
    1058             : 
    1059        7233 :     st_fx->GSC_noisy_speech = 0;
    1060        7233 :     move16();
    1061        7233 :     st_fx->GSC_IVAS_mode = 0;
    1062        7233 :     move16();
    1063        7233 :     st_fx->Last_GSC_noisy_speech_flag = 0;
    1064        7233 :     move16();
    1065             : 
    1066        7233 :     test();
    1067        7233 :     test();
    1068        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1069             :     {
    1070        2528 :         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        2528 :         GSC_dec_init_ivas_fx( st_fx->hGSCDec );
    1076             :     }
    1077             :     ELSE
    1078             :     {
    1079        4705 :         st_fx->hGSCDec = NULL;
    1080             :     }
    1081             : 
    1082             :     /*-----------------------------------------------------------------*
    1083             :      * parameters for fast recovery (WI)
    1084             :      *-----------------------------------------------------------------*/
    1085             : 
    1086        7233 :     test();
    1087        7233 :     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        7233 :         st_fx->hWIDec = NULL;
    1099             :     }
    1100             : 
    1101             :     /* NB post-filter */
    1102             :     /*-----------------------------------------------------------------*
    1103             :      * NB/formant post-filter
    1104             :      *-----------------------------------------------------------------*/
    1105        7233 :     test();
    1106        7233 :     test();
    1107        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1108             :     {
    1109        2528 :         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        2528 :         Init_post_filter_fx( st_fx->hPFstat );
    1115        2528 :         st_fx->psf_lp_noise_fx = 0;
    1116        2528 :         move16();
    1117             :     }
    1118             :     ELSE
    1119             :     {
    1120        4705 :         st_fx->hPFstat = NULL;
    1121             :     }
    1122             : 
    1123             :     /*-----------------------------------------------------------------*
    1124             :      * HF (6-7kHz) (zero) BWE parameters
    1125             :      *-----------------------------------------------------------------*/
    1126             : 
    1127        7233 :     test();
    1128        7233 :     test();
    1129        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1130             :     {
    1131        2528 :         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        2528 :         hf_synth_init_fx( st_fx->hBWE_zero );
    1137        2528 :         set16_fx( st_fx->hBWE_zero->mem_hp400_fx, 0, 6 );
    1138             :     }
    1139             :     ELSE
    1140             :     {
    1141        4705 :         st_fx->hBWE_zero = NULL;
    1142             :     }
    1143             : 
    1144             :     /*-----------------------------------------------------------------*
    1145             :      * LD music post-filter
    1146             :      *-----------------------------------------------------------------*/
    1147        7233 :     test();
    1148        7233 :     test();
    1149        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1150             :     {
    1151        2528 :         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        2528 :         music_postfilt_init( st_fx->hMusicPF );
    1157             :     }
    1158             :     ELSE
    1159             :     {
    1160        4705 :         st_fx->hMusicPF = NULL;
    1161             :     }
    1162             : 
    1163             :     /*-----------------------------------------------------------------*
    1164             :      * CNG and DTX
    1165             :      *-----------------------------------------------------------------*/
    1166             : 
    1167        7233 :     st_fx->first_CNG = 0;
    1168        7233 :     move16();
    1169        7233 :     st_fx->cng_type = -1;
    1170        7233 :     move16();
    1171        7233 :     st_fx->last_active_brate = ACELP_7k20;
    1172        7233 :     move32();
    1173        7233 :     st_fx->last_CNG_L_frame = L_FRAME;
    1174        7233 :     move16();
    1175        7233 :     st_fx->last_vad_fx = 0;
    1176        7233 :     move16();
    1177        7233 :     st_fx->active_cnt = 20;
    1178        7233 :     move16();
    1179             : 
    1180        7233 :     test();
    1181        7233 :     test();
    1182        7233 :     test();
    1183        7233 :     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          97 :         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          97 :         td_cng_dec_init_fx( st_fx );
    1191             :     }
    1192             :     ELSE
    1193             :     {
    1194        7136 :         st_fx->hTdCngDec = NULL;
    1195             :     }
    1196             : 
    1197        7233 :     st_fx->masa_sid_format = 0;
    1198        7233 :     move16();
    1199        7233 :     st_fx->Q_stat_noise_ge = GE_SHIFT;
    1200        7233 :     move16();
    1201             : 
    1202             :     /*-----------------------------------------------------------------*
    1203             :      * HQ core parameters
    1204             :      *-----------------------------------------------------------------*/
    1205             : 
    1206        7233 :     st_fx->prev_old_bfi = 0;
    1207        7233 :     move16();
    1208             : 
    1209        7233 :     set16_fx( st_fx->delay_buf_out_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
    1210        7233 :     set16_fx( st_fx->previoussynth_fx, 0, L_FRAME48k );
    1211             : 
    1212        7233 :     set32_fx( st_fx->delay_buf_out32_fx, 0, HQ_DELTA_MAX * HQ_DELAY_COMP );
    1213        7233 :     set32_fx( st_fx->previoussynth_fx_32, 0, L_FRAME48k );
    1214             : 
    1215        7233 :     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        7233 :     test();
    1221        7233 :     test();
    1222        7233 :     test();
    1223        7233 :     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        7136 :         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        7136 :         HQ_core_dec_init_fx( st_fx->hHQ_core );
    1232             : 
    1233        7136 :         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        7136 :             st_fx->hHQ_nbfec = NULL;
    1246             :         }
    1247             :     }
    1248             :     ELSE
    1249             :     {
    1250          97 :         st_fx->hHQ_core = NULL;
    1251          97 :         st_fx->hHQ_nbfec = NULL;
    1252             :     }
    1253             : 
    1254             :     /*-----------------------------------------------------------------*
    1255             :      * TBE parameters
    1256             :      *-----------------------------------------------------------------*/
    1257             : 
    1258        7233 :     test();
    1259        7233 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1260             :     {
    1261        2528 :         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        2528 :         td_bwe_dec_init_fx( st_fx->hBWE_TD, st_fx->extl, st_fx->output_Fs );
    1267             : 
    1268        2528 :         st_fx->prev_Q_bwe_exc = 31;
    1269        2528 :         move16();
    1270             :     }
    1271             :     ELSE
    1272             :     {
    1273        4705 :         st_fx->hBWE_TD = NULL;
    1274             :     }
    1275             : 
    1276        7233 :     st_fx->old_bwe_delay = -1; /*Q0*/
    1277        7233 :     move16();
    1278        7233 :     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        7233 :     test();
    1284        7233 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1285             :     {
    1286        2528 :         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        2528 :         fd_bwe_dec_init_fx( st_fx->hBWE_FD );
    1292             :     }
    1293             :     ELSE
    1294             :     {
    1295        4705 :         st_fx->hBWE_FD = NULL;
    1296             :     }
    1297             : 
    1298             :     /*-----------------------------------------------------------------*
    1299             :      * WB/SWB bandwidth switching parameters
    1300             :      *-----------------------------------------------------------------*/
    1301             : 
    1302        7233 :     st_fx->tilt_swb_fx = 0; // Q24
    1303        7233 :     move16();
    1304        7233 :     st_fx->prev_ener_shb_fx = 0; // Q1
    1305        7233 :     move16();
    1306        7233 :     st_fx->prev_enerLH_fx = 0; // Q1
    1307        7233 :     move16();
    1308        7233 :     st_fx->enerLH_fx = L_deposit_l( 0 );
    1309        7233 :     st_fx->enerLL_fx = L_deposit_l( 0 );
    1310        7233 :     st_fx->prev_enerLL_fx = 0;
    1311        7233 :     move16();
    1312        7233 :     st_fx->prev_fractive = 0;
    1313        7233 :     move16();
    1314        7233 :     st_fx->prev_bws_cnt = 0;
    1315        7233 :     move16();
    1316        7233 :     st_fx->bws_cnt = N_WS2N_FRAMES;
    1317        7233 :     move16();
    1318        7233 :     st_fx->bws_cnt1 = N_NS2W_FRAMES;
    1319        7233 :     move16();
    1320        7233 :     st_fx->attenu_fx = 3277; // Q15
    1321        7233 :     move16();
    1322        7233 :     st_fx->last_inner_frame = L_FRAME8k;
    1323        7233 :     move16();
    1324             : 
    1325             :     /*-----------------------------------------------------------------*
    1326             :      * HR SWB BWE parameters
    1327             :      *-----------------------------------------------------------------*/
    1328             : 
    1329        7233 :     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        7233 :         st_fx->hBWE_FD_HR = NULL;
    1341             :     }
    1342             : 
    1343             :     /*----------------------------------------------------------------------------------*
    1344             :      * AMR-WB IO mode parameters
    1345             :      *----------------------------------------------------------------------------------*/
    1346        7233 :     test();
    1347        7233 :     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        7233 :         st_fx->hAmrwb_IO = NULL;
    1363             :     }
    1364             : 
    1365             :     /*-----------------------------------------------------------------*
    1366             :      * channel-aware mode parameters
    1367             :      *-----------------------------------------------------------------*/
    1368             : 
    1369        7233 :     set16_fx( st_fx->tilt_code_dec_fx, 0, NB_SUBFR16k );
    1370        7233 :     st_fx->use_partial_copy = 0;
    1371        7233 :     move16();
    1372        7233 :     st_fx->prev_use_partial_copy = 0;
    1373        7233 :     move16();
    1374        7233 :     st_fx->rf_flag = 0;
    1375        7233 :     move16();
    1376        7233 :     st_fx->rf_flag_last = 0;
    1377        7233 :     move16();
    1378        7233 :     st_fx->prev_rf_frame_type = 0;
    1379        7233 :     move16();
    1380        7233 :     st_fx->next_coder_type = 0;
    1381        7233 :     move16();
    1382        7233 :     st_fx->rf_target_bits = 0;
    1383        7233 :     move16();
    1384        7233 :     st_fx->rf_indx_nelp_fid = 0;
    1385        7233 :     move16();
    1386        7233 :     st_fx->rf_indx_nelp_iG1 = 0;
    1387        7233 :     move16();
    1388        7233 :     st_fx->rf_indx_nelp_iG2[0] = 0;
    1389        7233 :     move16();
    1390        7233 :     st_fx->rf_indx_nelp_iG2[1] = 0;
    1391        7233 :     move16();
    1392        7233 :     st_fx->rf_indx_tbeGainFr = 0;
    1393        7233 :     move16();
    1394             : 
    1395             :     /*-----------------------------------------------------------------*
    1396             :      * Bass post-filter parameters
    1397             :      *-----------------------------------------------------------------*/
    1398             : 
    1399        7233 :     st_fx->bpf_off = 0;
    1400        7233 :     move16();
    1401             : 
    1402        7233 :     test();
    1403        7233 :     test();
    1404        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
    1405             :     {
    1406        2528 :         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        2528 :         bass_psfilter_init_fx( st_fx->hBPF );
    1412             :     }
    1413             :     ELSE
    1414             :     {
    1415        4705 :         st_fx->hBPF = NULL;
    1416             :     }
    1417             : 
    1418             :     /*-----------------------------------------------------------------*
    1419             :      * FD BPF & resampling tools parameters
    1420             :      *-----------------------------------------------------------------*/
    1421        7233 :     test();
    1422        7233 :     test();
    1423        7233 :     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        2528 :         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        2528 :         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        4705 :         st_fx->cldfbAna = NULL;
    1440        4705 :         st_fx->cldfbBPF = NULL;
    1441             :     }
    1442             : 
    1443             :     /* open synthesis for output SR */
    1444        7233 :     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        7233 :     st_fx->cldfbSynHB = NULL;
    1450        7233 :     st_fx->last_active_bandsToZero_bwdec = 0;
    1451        7233 :     move16();
    1452        7233 :     st_fx->perc_bwddec = 0;
    1453        7233 :     move16();
    1454        7233 :     st_fx->last_flag_filter_NB = 0;
    1455        7233 :     move16();
    1456        7233 :     st_fx->active_frame_cnt_bwddec = 0;
    1457        7233 :     move16();
    1458        7233 :     st_fx->total_frame_cnt_bwddec = 0;
    1459        7233 :     move16();
    1460        7233 :     set16_fx( st_fx->flag_buffer, 0, 20 );
    1461        7233 :     st_fx->avg_nrg_LT = 0;
    1462        7233 :     move32();
    1463             : 
    1464             :     /*-----------------------------------------------------------------*
    1465             :      * Noise gate parameters
    1466             :      *-----------------------------------------------------------------*/
    1467             : 
    1468        7233 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
    1469        7233 :     st_fx->old_Aq_12_8_fx[0] = ONE_IN_Q12;
    1470        7233 :     move16();
    1471        7233 :     st_fx->Ng_ener_ST_fx = -13056; /*-51 IN Q8*/
    1472        7233 :     move16();
    1473        7233 :     st_fx->old_Es_pred_fx = 0;
    1474        7233 :     move16();
    1475        7233 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
    1476        7233 :     st_fx->old_Aq_12_8_fx[0] = 4096; /*1 in Q12*/
    1477        7233 :     move16();
    1478             : 
    1479             :     /*-----------------------------------------------------------------*
    1480             :      * SC-VBR parameters
    1481             :      *-----------------------------------------------------------------*/
    1482             : 
    1483        7233 :     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        7233 :         st_fx->hSC_VBR = NULL;
    1495             :     }
    1496             : 
    1497        7233 :     st_fx->last_ppp_mode_dec = 0;
    1498        7233 :     move16();
    1499        7233 :     st_fx->old_ppp_mode = 0;
    1500        7233 :     move16();
    1501        7233 :     st_fx->ppp_mode_dec = 0;
    1502        7233 :     move16();
    1503        7233 :     st_fx->last_nelp_mode_dec = 0;
    1504        7233 :     move16();
    1505        7233 :     st_fx->nelp_mode_dec = 0;
    1506        7233 :     move16();
    1507        7233 :     st_fx->prev_gain_pit_dec_fx = 0;
    1508        7233 :     move16();
    1509        7233 :     st_fx->prev_tilt_code_dec_fx = 0;
    1510        7233 :     move16();
    1511        7233 :     st_fx->vbr_hw_BWE_disable_dec = 0;
    1512        7233 :     move16();
    1513        7233 :     st_fx->last_vbr_hw_BWE_disable_dec = 0;
    1514        7233 :     move16();
    1515             : 
    1516             :     /*-----------------------------------------------------------------*
    1517             :      * TCX core
    1518             :      *-----------------------------------------------------------------*/
    1519             : 
    1520             :     /* TCX-LTP */
    1521        7233 :     test();
    1522        7233 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1523             :     {
    1524        7136 :         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          97 :         st_fx->hTcxLtpDec = NULL;
    1532             :     }
    1533             : 
    1534             :     /* TCX core */
    1535        7233 :     test();
    1536        7233 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
    1537             :     {
    1538        7136 :         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        7136 :         set32_fx( st_fx->hTcxDec->FBTCXdelayBuf_32, 0, 111 );
    1544             : 
    1545        7136 :         st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS );
    1546        7136 :         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          97 :         st_fx->hTcxDec = NULL;
    1551             :     }
    1552             : 
    1553             :     /* TCX config. data structure */
    1554        7233 :     test();
    1555        7233 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1556             :     {
    1557        7136 :         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             :     }
    1562             :     ELSE
    1563             :     {
    1564          97 :         st_fx->hTcxCfg = NULL;
    1565             :     }
    1566             : 
    1567             :     /* Tonal MDCT concealment data structure */
    1568        7233 :     test();
    1569        7233 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1570             :     {
    1571        7136 :         IF( ( st_fx->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL )
    1572             :         {
    1573           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) );
    1574             :         }
    1575             :     }
    1576             :     ELSE
    1577             :     {
    1578          97 :         st_fx->hTonalMDCTConc = NULL;
    1579             :     }
    1580             : 
    1581             :     /*-----------------------------------------------------------------*
    1582             :      * IGF
    1583             :      *-----------------------------------------------------------------*/
    1584             : 
    1585        7233 :     test();
    1586        7233 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1587             :     {
    1588        7136 :         IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL )
    1589             :         {
    1590           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) );
    1591             :         }
    1592             : 
    1593        7136 :         st_fx->igf = 0;
    1594        7136 :         move16();
    1595        7136 :         init_igf_dec( st_fx->hIGFDec );
    1596             :     }
    1597             :     ELSE
    1598             :     {
    1599          97 :         st_fx->hIGFDec = NULL;
    1600             :     }
    1601             : 
    1602             :     /*-----------------------------------------------------------------*
    1603             :      * Mode 2 initialization
    1604             :      *-----------------------------------------------------------------*/
    1605        7233 :     IF( ( st_fx->element_mode == EVS_MONO ) )
    1606             :     {
    1607           0 :         IF( ( st_fx->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL )
    1608             :         {
    1609           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) );
    1610             :         }
    1611             :     }
    1612             :     ELSE
    1613             :     {
    1614        7233 :         st_fx->hPlcInfo = NULL;
    1615             :     }
    1616             : 
    1617        7233 :     IF( st_fx->element_mode == EVS_MONO )
    1618             :     {
    1619           0 :         IF( ( st_fx->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL )
    1620             :         {
    1621           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
    1622             :         }
    1623             :     }
    1624             :     ELSE
    1625             :     {
    1626        7233 :         st_fx->hTECDec = NULL;
    1627             :     }
    1628             : 
    1629             : 
    1630             :     /* Init Decoder */
    1631        7233 :     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;
    1632        7233 :     move16();
    1633        7233 :     move16();
    1634        7233 :     move16();
    1635        7233 :     move16();
    1636        7233 :     move16();
    1637        7233 :     move16();
    1638        7233 :     move16();
    1639        7233 :     move16();
    1640        7233 :     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 );
    1641             : 
    1642             :     /* PLC mode initialization */
    1643        7233 :     st_fx->m_decodeMode = DEC_NO_FRAM_LOSS;
    1644        7233 :     move16();
    1645             : 
    1646             :     /* Init bandwidth / frame_type */
    1647        7233 :     st_fx->m_frame_type = ACTIVE_FRAME;
    1648        7233 :     move16();
    1649        7233 :     st_fx->m_old_frame_type = ACTIVE_FRAME;
    1650        7233 :     move16();
    1651             : 
    1652        7233 :     test();
    1653        7233 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) )
    1654             :     {
    1655        2528 :         resampleCldfb_ivas_fx( st_fx->cldfbAna, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
    1656        2528 :         resampleCldfb_ivas_fx( st_fx->cldfbBPF, L_mult0( st_fx->L_frame, FRAMES_PER_SEC ) );
    1657             :     }
    1658             : 
    1659             :     /*-----------------------------------------------------------------*
    1660             :      * FD-CNG decoder
    1661             :      *-----------------------------------------------------------------*/
    1662             : 
    1663        7233 :     test();
    1664        7233 :     test();
    1665        7233 :     test();
    1666        7233 :     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 ) )
    1667             :     {
    1668             :         /* Create FD_CNG instance */
    1669             : 
    1670        5436 :         IF( NE_32( ( error = createFdCngDec_fx( &st_fx->hFdCngDec ) ), IVAS_ERR_OK ) )
    1671             :         {
    1672           0 :             return error;
    1673             :         }
    1674             : 
    1675             :         /* Init FD-CNG */
    1676        5436 :         initFdCngDec_ivas_fx( st_fx, st_fx->cldfbSyn->scale );
    1677             :     }
    1678             :     ELSE
    1679             :     {
    1680        1797 :         st_fx->hFdCngDec = NULL;
    1681             :     }
    1682             : 
    1683        7233 :     st_fx->cngTDLevel = 0;
    1684        7233 :     move16();
    1685        7233 :     st_fx->cngTDLevel_e = 0;
    1686        7233 :     move16();
    1687        7233 :     st_fx->lp_noise = -167772160l /*-20.f Q23*/;
    1688        7233 :     move32();
    1689        7233 :     st_fx->force_lpd_reset = 0;
    1690        7233 :     move16();
    1691             : 
    1692             : 
    1693             :     /*-----------------------------------------------------------------*
    1694             :      * initialzie Q values
    1695             :      *-----------------------------------------------------------------*/
    1696             : 
    1697        7233 :     st_fx->Q_syn2 = 0;
    1698        7233 :     move16();
    1699        7233 :     st_fx->Q_exc = 8;
    1700        7233 :     move16();
    1701        7233 :     st_fx->prev_Q_exc = 0;
    1702        7233 :     move16();
    1703        7233 :     st_fx->Q_syn = 0;
    1704        7233 :     move16();
    1705        7233 :     st_fx->prev_Q_syn = 0;
    1706        7233 :     move16();
    1707             : 
    1708       43398 :     FOR( i = 0; i < L_Q_MEM; i++ )
    1709             :     {
    1710       36165 :         st_fx->Q_subfr[i] = 8;
    1711       36165 :         move16();
    1712             :     }
    1713             : 
    1714        7233 :     st_fx->prev_Q_exc_fr = 0;
    1715        7233 :     move16();
    1716        7233 :     st_fx->prev_Q_syn_fr = 0;
    1717        7233 :     move16();
    1718             : 
    1719             :     /*-----------------------------------------------------------------*
    1720             :      * IVAS parameters
    1721             :      *-----------------------------------------------------------------*/
    1722             : 
    1723        7233 :     st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
    1724        7233 :     move16();
    1725        7233 :     st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
    1726        7233 :     move16();
    1727        7233 :     st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
    1728        7233 :     move16();
    1729        7233 :     st_fx->cng_ism_flag = 0;
    1730        7233 :     move16();
    1731             : 
    1732        7233 :     return error;
    1733             : }
    1734             : 
    1735             : 
    1736             : /*----------------------------------------------------------------------*
    1737             :  * reset_preecho_dec()
    1738             :  *
    1739             :  * Initialization of static variables for pre-echo
    1740             :  *----------------------------------------------------------------------*/
    1741     1030204 : void reset_preecho_dec_fx(
    1742             :     HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle  */
    1743             : )
    1744             : {
    1745     1030204 :     hHQ_core->memfilt_lb_fx = 0;
    1746     1030204 :     move16();
    1747     1030204 :     hHQ_core->mean_prev_hb_fx = L_deposit_l( 0 );
    1748     1030204 :     hHQ_core->smoothmem_fx = 32767;
    1749     1030204 :     move16();
    1750     1030204 :     hHQ_core->mean_prev_fx = L_deposit_l( 0 );
    1751     1030204 :     hHQ_core->mean_prev_nc_fx = L_deposit_l( 0 );
    1752     1030204 :     hHQ_core->wmold_hb_fx = 32767;
    1753     1030204 :     move16();
    1754     1030204 :     hHQ_core->prevflag = 0;
    1755     1030204 :     move16();
    1756     1030204 :     hHQ_core->pastpre = 0;
    1757     1030204 :     move16();
    1758             : 
    1759     1030204 :     return;
    1760             : }
    1761             : 
    1762             : /*----------------------------------------------------------------------*
    1763             :  * destroy_cldfb_decoder_fx()
    1764             :  *
    1765             :  * Free memory which was allocated in init_decoder()
    1766             :  *----------------------------------------------------------------------*/
    1767             : 
    1768           3 : void destroy_cldfb_decoder_fx(
    1769             :     Decoder_State *st_fx /* o:   Decoder static variables structure */
    1770             : )
    1771             : {
    1772             : 
    1773             :     /* CLDFB BPF & resampling tools */
    1774             : 
    1775             :     /* delete analysis for max. SR 16kHz */
    1776           3 :     deleteCldfb( &st_fx->cldfbAna );
    1777             : 
    1778             :     /* delete analysis BPF for max. SR 16kHz */
    1779           3 :     deleteCldfb( &st_fx->cldfbBPF );
    1780             : 
    1781             :     /* delete synthesis for output SR */
    1782           3 :     deleteCldfb( &st_fx->cldfbSyn );
    1783             : 
    1784           3 :     deleteFdCngDec_fx( &st_fx->hFdCngDec );
    1785             : 
    1786           3 :     return;
    1787             : }
    1788             : 
    1789        7233 : void destroy_cldfb_decoder_ivas_fx(
    1790             :     Decoder_State *st /* o  :   Decoder static variables structure */
    1791             : )
    1792             : {
    1793             :     /* CLDFB BPF & resampling tools */
    1794        7233 :     deleteCldfb_ivas_fx( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */
    1795        7233 :     deleteCldfb_ivas_fx( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */
    1796        7233 :     deleteCldfb_ivas_fx( &st->cldfbSyn ); /* delete synthesis at output sampling rate */
    1797        7233 :     deleteCldfb_ivas_fx( &st->cldfbSynHB );
    1798             : 
    1799        7233 :     deleteFdCngDec_fx( &st->hFdCngDec );
    1800             : 
    1801        7233 :     return;
    1802             : }

Generated by: LCOV version 1.14