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

Generated by: LCOV version 1.14