LCOV - code coverage report
Current view: top level - lib_enc - init_enc_fx.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 574a190e3c6896c6c4ed10d7f23649709a0c4347 Lines: 1112 1246 89.2 %
Date: 2025-06-27 02:59:36 Functions: 6 6 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 "cnst.h"       /* Common constants                       */
       7             : #include "rom_com_fx.h" /* Static table prototypes                */
       8             : #include "rom_com.h"    /* Static table prototypes                */
       9             : //#include "prot_fx.h"        /* Function prototypes                    */
      10             : #include "stl.h"
      11             : #include "ivas_cnst.h"
      12             : #include "ivas_error.h"
      13             : #include "prot_fx.h"     /* Function prototypes                    */
      14             : #include "prot_fx_enc.h" /* Function prototypes                    */
      15             : #include "ivas_prot_fx.h"
      16             : 
      17             : 
      18             : /*-----------------------------------------------------------------------*
      19             :  * init_encoder_fx()
      20             :  *
      21             :  * Initialization of state variables
      22             :  *-----------------------------------------------------------------------*/
      23           3 : ivas_error init_encoder_fx(
      24             :     Encoder_State *st_fx /* i/o: Encoder static variables structure  */
      25             : )
      26             : {
      27             :     Word16 i;
      28             :     Word32 L_tmp;
      29             : 
      30             : 
      31           3 :     Word16 idchan = 0;        /* i  : channel ID                           */
      32           3 :     Word16 vad_only_flag = 0; /* i  : channel ID                           */
      33           3 :     move16();
      34           3 :     move16();
      35           3 :     ISM_MODE ism_mode = ISM_MODE_NONE;
      36             :     ivas_error error;
      37             : 
      38           3 :     error = IVAS_ERR_OK;
      39             : 
      40             :     /*-----------------------------------------------------------------*
      41             :      * General signal buffers
      42             :      *-----------------------------------------------------------------*/
      43           3 :     IF( !vad_only_flag )
      44             :     {
      45           3 :         IF( ( st_fx->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL )
      46             :         {
      47           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) );
      48             :         }
      49             : 
      50           3 :         st_fx->Bin_E_old_fx = st_fx->hSignalBuf->Bin_E_old_fx;
      51           3 :         st_fx->mem_decim_fx = st_fx->hSignalBuf->mem_decim_fx;
      52           3 :         st_fx->mem_decim16k_fx = st_fx->hSignalBuf->mem_decim16k_fx;
      53           3 :         st_fx->old_inp_12k8_fx = st_fx->hSignalBuf->old_inp_12k8_fx;
      54           3 :         st_fx->old_inp_16k_fx = st_fx->hSignalBuf->old_inp_16k_fx;
      55           3 :         st_fx->buf_speech_enc_pe = st_fx->hSignalBuf->buf_speech_enc_pe;
      56           3 :         st_fx->buf_synth = st_fx->hSignalBuf->buf_synth;
      57           3 :         st_fx->buf_speech_enc = st_fx->hSignalBuf->buf_speech_enc;
      58           3 :         st_fx->buf_wspeech_enc = st_fx->hSignalBuf->buf_wspeech_enc;
      59             : 
      60             :         /* initializations */
      61           3 :         set16_fx( st_fx->old_inp_12k8_fx, 0, L_INP_MEM ); /* memory of input signal at 12.8kHz */
      62           3 :         set16_fx( st_fx->old_inp_16k_fx, 0, L_INP_MEM );
      63           3 :         set16_fx( st_fx->mem_decim16k_fx, 0, 2 * L_FILT_MAX );
      64           3 :         set16_fx( st_fx->mem_decim_fx, 0, 2 * L_FILT_MAX );
      65           3 :         set32_fx( st_fx->Bin_E_old_fx, 0, L_FFT / 2 );
      66           3 :         st_fx->q_Bin_E_old = Q31;
      67           3 :         move16();
      68             : 
      69           3 :         st_fx->input_buff_fx = st_fx->hSignalBuf->input_buff;
      70           3 :         set16_fx( st_fx->input_buff_fx, 0, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) );
      71           3 :         st_fx->old_input_signal_fx = st_fx->input_buff_fx;
      72           3 :         IF( EQ_16( st_fx->element_mode, EVS_MONO ) )
      73             :         {
      74           3 :             st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS );
      75             :         }
      76             :         ELSE
      77             :         {
      78           0 :             st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC;
      79             :         }
      80             :     }
      81             :     ELSE
      82             :     {
      83           0 :         st_fx->hSignalBuf = NULL;
      84           0 :         st_fx->Bin_E_old_fx = NULL;
      85           0 :         st_fx->mem_decim_fx = NULL;
      86           0 :         st_fx->mem_decim16k_fx = NULL;
      87           0 :         st_fx->old_inp_12k8_fx = NULL;
      88           0 :         st_fx->old_inp_16k_fx = NULL;
      89           0 :         st_fx->buf_speech_enc_pe = NULL;
      90           0 :         st_fx->buf_synth = NULL;
      91           0 :         st_fx->buf_speech_enc = NULL;
      92           0 :         st_fx->buf_wspeech_enc = NULL;
      93           0 :         st_fx->input_buff_fx = NULL;
      94             :     }
      95             : 
      96             :     /*-----------------------------------------------------------------*
      97             :      * ACELP core parameters
      98             :      *-----------------------------------------------------------------*/
      99           3 :     st_fx->last_core = -1;
     100           3 :     move16();
     101             : 
     102           3 :     if ( st_fx->Opt_AMR_WB )
     103             :     {
     104           0 :         st_fx->last_core = AMR_WB_CORE;
     105           0 :         move16();
     106             :     }
     107             : 
     108           3 :     st_fx->L_frame = L_FRAME;
     109           3 :     move16();
     110           3 :     st_fx->last_coder_type = GENERIC;
     111           3 :     move16();
     112           3 :     st_fx->last_total_brate = st_fx->total_brate;
     113           3 :     move32();
     114           3 :     st_fx->last_total_brate_cng = -1;
     115           3 :     move32();
     116           3 :     st_fx->last_core_brate = st_fx->total_brate;
     117           3 :     move32();
     118           3 :     st_fx->extl = -1;
     119           3 :     move16();
     120           3 :     st_fx->last_extl = -1;
     121           3 :     move16();
     122           3 :     st_fx->last_L_frame = L_FRAME;
     123           3 :     move16();
     124           3 :     st_fx->rate_switching_reset = 0;
     125           3 :     move16();
     126           3 :     st_fx->rate_switching_reset_16kHz = 0;
     127           3 :     move16();
     128             : 
     129             :     /*-----------------------------------------------------------------*
     130             :      * Bitstream
     131             :      *-----------------------------------------------------------------*/
     132             : 
     133           3 :     IF( !vad_only_flag )
     134             :     {
     135           3 :         IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL )
     136             :         {
     137           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) );
     138             :         }
     139             :     }
     140             :     ELSE
     141             :     {
     142           0 :         st_fx->hBstr = NULL;
     143             :     }
     144             : 
     145             : 
     146           3 :     Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M );
     147           3 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi0_fx, M );
     148           3 :     Copy( GEWB_Ave_fx, st_fx->lsfoldbfi1_fx, M );
     149           3 :     Copy( GEWB_Ave_fx, st_fx->lsf_adaptive_mean_fx, M );
     150           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 );
     151           3 :     st_fx->next_force_safety_net = 0;
     152           3 :     move16();
     153           3 :     st_fx->pstreaklen = 0;
     154           3 :     move16();
     155           3 :     st_fx->streaklimit_fx = 32767;
     156           3 :     move16(); /*1;//Q15  */
     157           3 :     set16_fx( st_fx->mem_MA_fx, 0, M );
     158             : 
     159           3 :     init_gp_clip_fx( st_fx->clip_var_fx );
     160           3 :     pitch_ol_init_fx( &st_fx->old_thres_fx, &st_fx->old_pitch, &st_fx->delta_pit, &st_fx->old_corr_fx );
     161             : 
     162             :     /*-----------------------------------------------------------------*
     163             :      * AMR-WB IO initialization
     164             :      *-----------------------------------------------------------------*/
     165           3 :     test();
     166           3 :     IF( st_fx->Opt_AMR_WB || EQ_16( st_fx->element_mode, EVS_MONO ) )
     167             :     {
     168           3 :         IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL )
     169             :         {
     170           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
     171             :         }
     172             : 
     173           3 :         amr_wb_enc_init_fx( st_fx->hAmrwb_IO );
     174             :     }
     175             :     ELSE
     176             :     {
     177           0 :         st_fx->hAmrwb_IO = NULL;
     178             :     }
     179           3 :     st_fx->clas = UNVOICED_CLAS;
     180           3 :     move16();
     181           3 :     set16_fx( st_fx->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM );
     182           3 :     set16_fx( st_fx->old_wsp_fx, 0, L_WSP_MEM );
     183           3 :     st_fx->mem_deemph_fx = 0;
     184           3 :     move16();
     185           3 :     st_fx->mem_preemph_fx = 0;
     186           3 :     move16();
     187           3 :     st_fx->mem_preemph16k_fx = 0;
     188           3 :     move16();
     189           3 :     st_fx->mem_preemph_enc = 0;
     190           3 :     move16();
     191             : 
     192             :     /* AVQ pre-quantizer memory */
     193           3 :     st_fx->mem_preemp_preQ_fx = 0;
     194           3 :     move16();
     195           3 :     st_fx->mem_deemp_preQ_fx = 0;
     196           3 :     move16();
     197           3 :     st_fx->last_nq_preQ = 0;
     198           3 :     move16();
     199           3 :     st_fx->use_acelp_preq = 0;
     200           3 :     move16();
     201             : 
     202             :     /* (Decimated) Weighted Speech Memory */
     203           3 :     st_fx->mem_wsp_enc = 0;
     204           3 :     move16();
     205             : 
     206           3 :     st_fx->mem_wsp_fx = 0;
     207           3 :     move16();
     208           3 :     st_fx->mem_wsp_q = 0;
     209           3 :     move16();
     210           3 :     set32_fx( st_fx->Bin_E_fx, 0, L_FFT );
     211           3 :     st_fx->q_Bin_E = Q31;
     212           3 :     move16();
     213           3 :     set16_fx( st_fx->mem_decim2_fx, 0, 3 );
     214           3 :     set16_fx( st_fx->lgBin_E_fx, 0, L_FFT / 2 );
     215             : 
     216           3 :     st_fx->ini_frame = 0;
     217           3 :     move16();
     218           3 :     st_fx->ee_old_fx = 640;
     219           3 :     move32(); /*chk //10 in Q6 */
     220           3 :     st_fx->Nb_ACELP_frames = 0;
     221           3 :     move16();
     222           3 :     st_fx->audio_frame_cnt = AUDIO_COUNTER_INI;
     223           3 :     move16(); /* Initializatin of the audio frame counter mildly into the audio mode      */
     224             : 
     225             :     /* adaptive lag window memory */
     226           3 :     st_fx->old_pitch_la = 0;
     227           3 :     move16();
     228           3 :     st_fx->old_voicing_la = 0;
     229           3 :     move16();
     230           3 :     set32_fx( st_fx->mem_hp20_in_fx, 0, 5 );
     231             : 
     232           3 :     st_fx->old_hpfilt_in_fx = 0;
     233           3 :     move16();
     234           3 :     st_fx->old_hpfilt_out_fx = 0;
     235           3 :     move16();
     236           3 :     st_fx->EnergyLT_fx = 0;
     237           3 :     move32();
     238           3 :     st_fx->prev_Q_new = 0;
     239           3 :     move16();
     240             : 
     241             : 
     242           3 :     IF( EQ_32( st_fx->input_Fs, 8000 ) )
     243             :     {
     244           0 :         st_fx->min_band = 1;
     245           0 :         move16();
     246           0 :         st_fx->max_band = 16;
     247           0 :         move16();
     248             :     }
     249             :     ELSE
     250             :     {
     251           3 :         st_fx->min_band = 0;
     252           3 :         move16();
     253           3 :         st_fx->max_band = 19;
     254           3 :         move16();
     255             :     }
     256           3 :     IF( st_fx->Opt_AMR_WB )
     257             :     {
     258           0 :         Copy( mean_isf_amr_wb_fx, st_fx->lsf_old_fx, M );
     259           0 :         E_LPC_isf_isp_conversion( st_fx->lsf_old_fx, st_fx->lsp_old1_fx, M );
     260             :     }
     261             :     ELSE
     262             :     {
     263           3 :         Copy( GEWB_Ave_fx, st_fx->lsf_old_fx, M );
     264           3 :         lsf2lsp_fx( st_fx->lsf_old_fx, st_fx->lsp_old1_fx, M, INT_FS_FX );
     265             :     }
     266             : 
     267           3 :     Copy( st_fx->lsf_old_fx, st_fx->lsf_old1_fx, M );
     268           3 :     Copy( st_fx->lsp_old1_fx, st_fx->lsp_old_fx, M );
     269           3 :     Copy( st_fx->lsp_old_fx, st_fx->lsp_old16k_fx, M );
     270           3 :     Copy( st_fx->lsp_old_fx, st_fx->lspold_enc_fx, M );
     271             : 
     272           3 :     st_fx->stab_fac_fx = 0;
     273           3 :     move16();
     274             :     /* Bass post-filter memories - encoder side of MODE2 */
     275           3 :     st_fx->bpf_off = 0;
     276           3 :     move16();
     277             : 
     278             :     /* TC mode */
     279           3 :     st_fx->tc_cnt = 0;
     280           3 :     move16();
     281           3 :     st_fx->mCb1_fx = 0;
     282           3 :     move16();
     283             : 
     284             :     /* AC mode */
     285             : 
     286             :     /*-----------------------------------------------------------------*
     287             :      * parameters for AC coder type (GSC)
     288             :      *-----------------------------------------------------------------*/
     289             : 
     290             :     // st_fx->GSC_noisy_speech = 0;
     291           3 :     st_fx->GSC_IVAS_mode = 0;
     292           3 :     move16();
     293           3 :     test();
     294           3 :     test();
     295           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     296             :     {
     297           3 :         IF( ( st_fx->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL )
     298             :         {
     299           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
     300             :         }
     301             : 
     302           3 :         GSC_enc_init_fx( st_fx->hGSCEnc );
     303             :     }
     304             :     ELSE
     305             :     {
     306           0 :         st_fx->hGSCEnc = NULL;
     307             :     }
     308             : 
     309           3 :     st_fx->last_ener_fx = 0;
     310           3 :     move16();
     311             : 
     312           3 :     st_fx->old_dE1_fx = 0;
     313           3 :     move16();
     314           3 :     st_fx->old_ind_deltaMax = 0;
     315           3 :     move32();
     316           3 :     set32_fx( st_fx->old_enr_ssf_fx, 0, 2 * NB_SSF );
     317           3 :     st_fx->spike_hyst = -1;
     318           3 :     move16();
     319           3 :     st_fx->music_hysteresis_fx = 0;
     320           3 :     move16(); /* Counter of frames after AUDIO frame to prevent UC */
     321           3 :     st_fx->last_harm_flag_acelp = 0;
     322           3 :     move16();
     323           3 :     st_fx->GSC_noisy_speech = 0;
     324           3 :     move16();
     325             : 
     326             :     /* speech/music classifier */
     327           3 :     st_fx->Last_pulse_pos = 0;
     328           3 :     move16();
     329             : 
     330           3 :     st_fx->last_vad_spa_fx = 0;
     331           3 :     move16();
     332             : 
     333             :     /*-----------------------------------------------------------------*
     334             :      * VAD
     335             :      *-----------------------------------------------------------------*/
     336             : 
     337           3 :     st_fx->vad_flag = 1;
     338           3 :     st_fx->localVAD = 0;
     339           3 :     move16();
     340           3 :     move16();
     341           3 :     test();
     342           3 :     test();
     343           3 :     test();
     344           3 :     test();
     345           3 :     IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO ) && ( !vad_only_flag ) )
     346             :     {
     347           3 :         if ( ( st_fx->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL )
     348             :         {
     349           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) );
     350             :         }
     351             : 
     352           3 :         wb_vad_init_fx( st_fx->hVAD );
     353           3 :         st_fx->hVAD->prim_act_quick_fx = 0;
     354           3 :         move16();
     355           3 :         st_fx->hVAD->prim_act_slow_fx = 0;
     356           3 :         move16();
     357           3 :         st_fx->hVAD->prim_act_fx = 0;
     358           3 :         move16();
     359           3 :         st_fx->hVAD->prim_act_quick_he_fx = 0;
     360           3 :         move16();
     361           3 :         st_fx->hVAD->prim_act_slow_he_fx = 0;
     362           3 :         move16();
     363           3 :         st_fx->hVAD->prim_act_he_fx = 0;
     364           3 :         move16();
     365           3 :         st_fx->hVAD->hangover_terminate_flag = 0;
     366           3 :         move16();
     367             : 
     368           3 :         st_fx->hVAD->consec_inactive = 0;
     369           3 :         move16();
     370           3 :         st_fx->hVAD->spectral_tilt_reset = 1;
     371           3 :         move16();
     372           3 :         st_fx->hVAD->running_avg_fx = 0;
     373           3 :         move16();
     374           3 :         st_fx->hVAD->ra_deltasum_fx = 0;
     375           3 :         move16();
     376           3 :         st_fx->hVAD->trigger_SID = 0;
     377           3 :         move16();
     378           3 :         st_fx->hVAD->L_snr_sum_vad_fx = 0;
     379           3 :         move32();
     380           3 :         st_fx->hVAD->q_L_snr_sum_vad = Q31;
     381           3 :         move16();
     382             :     }
     383             :     ELSE
     384             :     {
     385           0 :         st_fx->hVAD = NULL;
     386             :     }
     387             : 
     388           3 :     st_fx->Pos_relE_cnt = 5120;
     389           3 :     move16(); /*20.0f*/
     390           3 :     st_fx->nb_active_frames_HE_SAD_fx = 0;
     391           3 :     move16();
     392           3 :     st_fx->lp_speech_fx = 11520;
     393           3 :     move16(); /*Q8 (45.0)    */ /* Initialize the long-term active speech level in dB   */
     394             : 
     395             :     /* avoid uninitialized memory access */
     396             : 
     397             :     /*-----------------------------------------------------------------*
     398             :      * Noise estimator
     399             :      *-----------------------------------------------------------------*/
     400             : 
     401           3 :     test();
     402           3 :     test();
     403           3 :     IF( /*idchan == 0 ||*/ EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO )
     404             :     {
     405           3 :         if ( ( st_fx->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL )
     406             :         {
     407           0 :             return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" );
     408             :         }
     409           3 :         noise_est_init_fx( st_fx->hNoiseEst );
     410             :     }
     411             :     ELSE
     412             :     {
     413           0 :         st_fx->hNoiseEst = NULL;
     414             :     }
     415             : 
     416             :     /*-----------------------------------------------------------------*
     417             :      * Speech/music classifier
     418             :      *-----------------------------------------------------------------*/
     419           3 :     test();
     420           3 :     test();
     421           3 :     test();
     422           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || st_fx->element_mode == EVS_MONO )
     423             :     {
     424           3 :         IF( ( st_fx->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL )
     425             :         {
     426           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) );
     427             :         }
     428             : 
     429           3 :         speech_music_clas_init_fx( st_fx->hSpMusClas );
     430             : 
     431           3 :         st_fx->sp_aud_decision0 = 0;
     432           3 :         st_fx->sp_aud_decision1 = 0;
     433           3 :         st_fx->sp_aud_decision2 = 0;
     434           3 :         move16();
     435           3 :         move16();
     436           3 :         move16();
     437             :     }
     438             :     ELSE
     439             :     {
     440           0 :         st_fx->hSpMusClas = NULL;
     441             :     }
     442             : 
     443           3 :     st_fx->bckr_tilt_lt = 0;
     444           3 :     move32();
     445             : 
     446             :     /* WB, SWB and FB bandwidth detector */
     447           3 :     st_fx->lt_mean_NB_fx = 0;
     448           3 :     move16();
     449           3 :     st_fx->lt_mean_WB_fx = 0;
     450           3 :     move16();
     451           3 :     st_fx->lt_mean_SWB_fx = 0;
     452           3 :     move16();
     453           3 :     st_fx->count_WB = BWD_COUNT_MAX;
     454           3 :     move16();
     455           3 :     st_fx->count_SWB = BWD_COUNT_MAX;
     456           3 :     move16();
     457           3 :     st_fx->count_FB = BWD_COUNT_MAX;
     458           3 :     move16();
     459           3 :     st_fx->bwidth = st_fx->max_bwidth;
     460           3 :     move16();
     461           3 :     st_fx->last_input_bwidth = st_fx->bwidth;
     462           3 :     move16();
     463           3 :     st_fx->last_bwidth = st_fx->bwidth;
     464           3 :     move16();
     465           3 :     st_fx->last_bwidth_cng = st_fx->bwidth;
     466           3 :     move16();
     467             : 
     468             : 
     469           3 :     move16();
     470           3 :     st_fx->coder_type_raw = VOICED;
     471           3 :     st_fx->last_coder_type_raw = st_fx->coder_type_raw;
     472           3 :     move16();
     473           3 :     st_fx->is_ism_format = 0;
     474           3 :     move16();
     475           3 :     if ( NE_16( ism_mode, ISM_MODE_NONE ) )
     476             :     {
     477           0 :         st_fx->is_ism_format = 1;
     478           0 :         move16();
     479             :     }
     480             :     /* Stationary noise UV modification  */
     481           3 :     st_fx->ge_sm_fx = 640;
     482           3 :     move32(); /*Q(GE_SHIFT) */
     483           3 :     st_fx->uv_count = 0;
     484           3 :     move16();
     485           3 :     st_fx->act_count = 3;
     486           3 :     move16();
     487           3 :     Copy( st_fx->lsp_old_fx, st_fx->lspold_s_fx, M );
     488           3 :     st_fx->noimix_seed = RANDOM_INITSEED;
     489           3 :     move16();
     490           3 :     st_fx->min_alpha_fx = 1;
     491           3 :     move16();
     492           3 :     st_fx->exc_pe_fx = 0;
     493           3 :     move16();
     494             : 
     495             :     /* CNG and DTX */
     496           3 :     st_fx->lp_noise_fx = 0;
     497           3 :     move16();
     498             : 
     499           3 :     test();
     500           3 :     test();
     501           3 :     IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) || ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) && st_fx->Opt_DTX_ON ) )
     502             :     {
     503           3 :         if ( ( st_fx->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL )
     504             :         {
     505           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) );
     506             :         }
     507           3 :         dtx_enc_init_fx( st_fx, st_fx->var_SID_rate_flag_fx, st_fx->interval_SID_fx );
     508             :     }
     509             :     ELSE
     510             :     {
     511           0 :         st_fx->hDtxEnc = NULL;
     512             :     }
     513             : 
     514           3 :     st_fx->fd_cng_reset_flag = 0;
     515           3 :     move16();
     516             : 
     517           3 :     IF( st_fx->Opt_DTX_ON )
     518             :     {
     519           0 :         move16();
     520             :     }
     521           3 :     st_fx->active_fr_cnt_fx = 0;
     522           3 :     move16();
     523           3 :     st_fx->cng_type = -1;
     524           3 :     move16();
     525             : 
     526             : 
     527             :     /*-----------------------------------------------------------------*
     528             :      * LP-CNG
     529             :      *-----------------------------------------------------------------*/
     530             : 
     531           3 :     test();
     532           3 :     test();
     533           3 :     test();
     534           3 :     test();
     535           3 :     test();
     536           3 :     IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) && !( EQ_16( ism_mode, ISM_MODE_PARAM ) || EQ_16( ism_mode, ISM_MODE_DISC ) ) )
     537             :     {
     538           3 :         IF( ( st_fx->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL )
     539             :         {
     540           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
     541             :         }
     542             : 
     543           3 :         td_cng_enc_init_fx( st_fx->hTdCngEnc, st_fx->Opt_DTX_ON, st_fx->max_bwidth );
     544             :     }
     545             :     ELSE
     546             :     {
     547           0 :         st_fx->hTdCngEnc = NULL;
     548             :     }
     549             : 
     550             : 
     551             :     /*-----------------------------------------------------------------*
     552             :      * ACELP LPDmem
     553             :      *-----------------------------------------------------------------*/
     554             : 
     555           3 :     test();
     556           3 :     test();
     557           3 :     IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) )
     558             :     {
     559           3 :         IF( ( st_fx->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL )
     560             :         {
     561           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) );
     562             :         }
     563             : 
     564           3 :         LPDmem_enc_init_fx( st_fx->hLPDmem );
     565             :     }
     566             :     ELSE
     567             :     {
     568           0 :         st_fx->hLPDmem = NULL;
     569             :     }
     570             : 
     571             :     /* FEC */
     572           3 :     st_fx->last_clas = UNVOICED_CLAS;
     573           3 :     move16();
     574             : 
     575          33 :     FOR( i = 0; i < 2 * NB_SUBFR16k; i++ )
     576             :     {
     577          30 :         st_fx->old_pitch_buf_fx[i] = L_SUBFR_Q6;
     578          30 :         move16();
     579             :     }
     580           3 :     st_fx->old_Es_pred_fx = 0;
     581           3 :     move16();
     582           3 :     set16_fx( st_fx->old_Aq_12_8_fx + 1, 0, M );
     583           3 :     st_fx->old_Aq_12_8_fx[0] = 4096;
     584           3 :     move16();
     585             : 
     586             :     /*-----------------------------------------------------------------*
     587             :      * CLDFB Analysis
     588             :      *-----------------------------------------------------------------*/
     589             : 
     590             :     /* open analysis for input SR */
     591           3 :     if ( ( error = openCldfb( &st_fx->cldfbAnaEnc, CLDFB_ANALYSIS, CLDFB_getNumChannels( st_fx->input_Fs ), st_fx->input_frame_fx ) ) != IVAS_ERR_OK )
     592             :     {
     593           0 :         return error;
     594             :     }
     595             : 
     596           3 :     if ( ( error = openCldfb( &st_fx->cldfbSynTd, CLDFB_SYNTHESIS, CLDFB_getNumChannels( 16000 ), L_FRAME16k ) ) != IVAS_ERR_OK )
     597             :     {
     598           0 :         return error;
     599             :     }
     600             : 
     601           3 :     st_fx->energyCoreLookahead_Fx = 0;
     602           3 :     move32();
     603           3 :     st_fx->sf_energyCoreLookahead_Fx = 0;
     604           3 :     move16();
     605             : 
     606             :     /* stable short pitch detection */
     607           3 :     st_fx->voicing0_sm_fx = 0;
     608           3 :     move16();
     609           3 :     st_fx->voicing_sm_fx = 0;
     610           3 :     move16();
     611           3 :     st_fx->LF_EnergyRatio_sm_fx = 128;
     612           3 :     move16();
     613           3 :     st_fx->predecision_flag = 0;
     614           3 :     move16();
     615           3 :     st_fx->diff_sm_fx = 0;
     616           3 :     move32();
     617           3 :     st_fx->energy_sm_fx = 0;
     618           3 :     move32();
     619             : 
     620             :     /*-----------------------------------------------------------------*
     621             :      * SC-VBR parameters
     622             :      *-----------------------------------------------------------------*/
     623           3 :     test();
     624           3 :     IF( st_fx->Opt_SC_VBR || st_fx->element_mode == EVS_MONO )
     625             :     {
     626           3 :         IF( ( st_fx->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL )
     627             :         {
     628           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
     629             :         }
     630             : 
     631           3 :         sc_vbr_enc_init_fx( st_fx->hSC_VBR );
     632             :     }
     633             :     ELSE
     634             :     {
     635           0 :         st_fx->hSC_VBR = NULL;
     636             :     }
     637             :     /* PLC encoder */
     638           3 :     IF( st_fx->element_mode == EVS_MONO )
     639             :     {
     640           3 :         IF( ( st_fx->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL )
     641             :         {
     642           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) );
     643             :         }
     644             :     }
     645             :     ELSE
     646             :     {
     647           0 :         st_fx->hPlcExt = NULL;
     648             :     }
     649             :     /*-----------------------------------------------------------------*
     650             :      * Temporal Envelope Coding
     651             :      *-----------------------------------------------------------------*/
     652             : 
     653           3 :     IF( st_fx->element_mode == EVS_MONO )
     654             :     {
     655           3 :         IF( ( st_fx->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL )
     656             :         {
     657           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
     658             :         }
     659             :     }
     660             :     ELSE
     661             :     {
     662           0 :         st_fx->hTECEnc = NULL;
     663             :     }
     664             : 
     665             :     /*-----------------------------------------------------------------*
     666             :      * SWB BWE parameters
     667             :      *-----------------------------------------------------------------*/
     668           3 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     669             :     {
     670           3 :         IF( ( st_fx->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL )
     671             :         {
     672           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
     673             :         }
     674             : 
     675           3 :         fd_bwe_enc_init_fx( st_fx->hBWE_FD );
     676             :     }
     677             :     ELSE
     678             :     {
     679           0 :         st_fx->hBWE_FD = NULL;
     680             :     }
     681             : 
     682           3 :     st_fx->prev_Q_shb = 0;
     683           3 :     move16();
     684           3 :     st_fx->last_Opt_SC_VBR = 0;
     685           3 :     move16();
     686             : 
     687             :     /*-----------------------------------------------------------------*
     688             :      * TBE parameters
     689             :      *-----------------------------------------------------------------*/
     690             : 
     691           3 :     IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     692             :     {
     693           3 :         IF( ( st_fx->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL )
     694             :         {
     695           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
     696             :         }
     697             : 
     698             :         // IF ((error = openCldfb(&st_fx->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS)) != IVAS_ERR_OK)
     699             :         //{
     700             :         //     return error;
     701             :         // }
     702             : 
     703           3 :         InitSWBencBuffer_fx( st_fx /*st_fx->hBWE_TD*/ );
     704           3 :         ResetSHBbuffer_Enc_fx( st_fx /*st_fx->hBWE_TD*/ );
     705             :     }
     706             :     ELSE
     707             :     {
     708           0 :         st_fx->hBWE_TD = NULL;
     709             :         // st_fx->cldfbSynTd = NULL;
     710             :     }
     711             : 
     712           3 :     test();
     713           3 :     IF( st_fx->Opt_RF_ON || st_fx->element_mode == EVS_MONO )
     714             :     {
     715           3 :         IF( ( st_fx->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL )
     716             :         {
     717           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) );
     718             :         }
     719             : 
     720             :         /* initialize RF indice buffers */
     721           3 :         reset_rf_indices_fx( st_fx /*->hRF, st_fx->L_frame, &st->rf_target_bits_write*/ );
     722             :     }
     723             :     ELSE
     724             :     {
     725           0 :         st_fx->hRF = NULL;
     726             :     }
     727             : 
     728             : 
     729             :     /*-----------------------------------------------------------------*
     730             :      * HQ core parameters
     731             :      *-----------------------------------------------------------------*/
     732             : 
     733           3 :     st_fx->input_fx = st_fx->input_buff_fx + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS );
     734           3 :     set16_fx( st_fx->input_buff_fx + L_FRAME48k, 0, L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) );
     735           3 :     st_fx->old_input_signal_fx = st_fx->input_fx - add( NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), st_fx->input_frame_fx );
     736             : 
     737             : 
     738           3 :     st_fx->Energy_Old_fx = 0;
     739           3 :     move16();
     740           3 :     st_fx->Q_old_wtda = 15;
     741           3 :     move16();
     742           3 :     st_fx->EnergyLT_fx = 1;
     743           3 :     move32();
     744           3 :     st_fx->EnergyLT_fx_exp = 30;
     745           3 :     move16(); /* Set to a High Exponent so it is 1^-30 */
     746           3 :     st_fx->TransientHangOver = 0;
     747           3 :     move16();
     748             : 
     749             :     /*-----------------------------------------------------------------*
     750             :      * TCX core
     751             :      *-----------------------------------------------------------------*/
     752             : 
     753           3 :     test();
     754           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     755             :     {
     756           3 :         IF( ( st_fx->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL )
     757             :         {
     758           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) );
     759             :         }
     760             : 
     761             :         /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */
     762             :         /*st_fx->hTcxEnc->spectrum[0] = st_fx->hTcxEnc->spectrum_long;
     763             :         st_fx->hTcxEnc->spectrum[1] = st_fx->hTcxEnc->spectrum_long + N_TCX10_MAX;*/
     764             : 
     765           3 :         st_fx->hTcxEnc->spectrum_fx[0] = st_fx->hTcxEnc->spectrum_long_fx;
     766           3 :         st_fx->hTcxEnc->spectrum_fx[1] = st_fx->hTcxEnc->spectrum_long_fx + N_TCX10_MAX;
     767             : 
     768           3 :         set16_fx( st_fx->hTcxEnc->old_out_fx, 0, L_FRAME32k );
     769           3 :         st_fx->hTcxEnc->Q_old_out = 0;
     770           3 :         move16();
     771             :         /* MDCT selector */
     772           3 :         MDCT_selector_reset_fx( st_fx->hTcxEnc );
     773           3 :         st_fx->hTcxEnc->Q_old_out = 0;
     774           3 :         move16();
     775             : 
     776             :         /* MDCT classifier */
     777           3 :         MDCT_classifier_reset_fx( st_fx->hTcxEnc );
     778             : 
     779           3 :         IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
     780             :         {
     781           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
     782             :         }
     783             :     }
     784             :     ELSE
     785             :     {
     786           0 :         st_fx->hTcxEnc = NULL;
     787             :         // st_fx->hTcxCfg = NULL;
     788             :     }
     789             :     /*-----------------------------------------------------------------*
     790             :      * HQ core parameters
     791             :      *-----------------------------------------------------------------*/
     792             : 
     793           3 :     test();
     794           3 :     test();
     795           3 :     IF( NE_16( st_fx->element_mode, IVAS_CPE_TD ) && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) && idchan == 0 )
     796             :     {
     797           3 :         IF( ( st_fx->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL )
     798             :         {
     799           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
     800             :         }
     801             : 
     802           3 :         HQ_core_enc_init_fx( st_fx->hHQ_core );
     803             :     }
     804             :     ELSE
     805             :     {
     806           0 :         st_fx->hHQ_core = NULL;
     807             :     }
     808             : 
     809           3 :     st_fx->last_enerBuffer_exp = 0;
     810           3 :     move16();
     811             : 
     812             :     /*-----------------------------------------------------------------*
     813             :      * Channel-aware mode
     814             :      *-----------------------------------------------------------------*/
     815             : 
     816             : 
     817           3 :     test();
     818           3 :     test();
     819           3 :     test();
     820           3 :     IF( st_fx->Opt_RF_ON == 0 || ( NE_16( st_fx->bwidth, WB ) && NE_16( st_fx->bwidth, SWB ) ) || NE_32( st_fx->total_brate, ACELP_13k20 ) )
     821             :     {
     822           3 :         IF( EQ_16( st_fx->Opt_RF_ON, 1 ) )
     823             :         {
     824           0 :             printf( "\nWarning: Channel-aware mode only available for 13.2 kbps WB/SWB\n" );
     825           0 :             printf( "         Switched to normal mode!\n" );
     826           0 :             st_fx->Opt_RF_ON = 0;
     827           0 :             move16();
     828           0 :             st_fx->rf_fec_offset = 0;
     829           0 :             move16();
     830             :         }
     831           3 :         st_fx->rf_mode = 0;
     832           3 :         move16();
     833             :     }
     834             :     ELSE
     835             :     {
     836           0 :         st_fx->rf_mode = st_fx->Opt_RF_ON;
     837           0 :         move16();
     838             :     }
     839           3 :     st_fx->rf_mode_last = st_fx->rf_mode;
     840           3 :     move16();
     841             :     /* initialize RF indice buffers */
     842           3 :     reset_rf_indices_fx( st_fx );
     843             : 
     844             :     /*-----------------------------------------------------------------*
     845             :      * MODE2 initialization
     846             :      *-----------------------------------------------------------------*/
     847             : 
     848           3 :     st_fx->last_sr_core = i_mult2( st_fx->last_L_frame, 50 );
     849           3 :     move16();
     850             :     /*-----------------------------------------------------------------*
     851             :      * IGF
     852             :      *-----------------------------------------------------------------*/
     853             : 
     854           3 :     test();
     855           3 :     IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) )
     856             :     {
     857           3 :         IF( ( st_fx->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL )
     858             :         {
     859           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) );
     860             :         }
     861             :     }
     862             :     ELSE
     863             :     {
     864           0 :         st_fx->hIGFEnc = NULL;
     865           0 :         move16();
     866             :     }
     867             : 
     868           3 :     IF( EQ_16( st_fx->codec_mode, MODE2 ) )
     869             :     {
     870           1 :         st_fx->igf = getIgfPresent_fx( st_fx->element_mode, st_fx->total_brate, st_fx->bwidth, st_fx->rf_mode );
     871             :     }
     872             :     ELSE
     873             :     {
     874           2 :         st_fx->igf = 0;
     875           2 :         move16();
     876             :     }
     877             : 
     878             :     /* FD-CNG encoder */
     879           3 :     createFdCngEnc_fx( &st_fx->hFdCngEnc );
     880           3 :     initFdCngEnc_fx( st_fx->hFdCngEnc, st_fx->input_Fs, st_fx->cldfbAnaEnc->scale );
     881           3 :     L_tmp = st_fx->total_brate;
     882           3 :     move32();
     883           3 :     test();
     884           3 :     if ( st_fx->rf_mode && EQ_32( st_fx->total_brate, ACELP_13k20 ) )
     885             :     {
     886           0 :         L_tmp = ACELP_9k60;
     887           0 :         move32();
     888             :     }
     889           3 :     configureFdCngEnc_fx( st_fx->hFdCngEnc, st_fx->bwidth, L_tmp );
     890             : 
     891           3 :     st_fx->last_totalNoise_fx = 0;
     892           3 :     move16();
     893           3 :     set16_fx( st_fx->totalNoise_increase_hist_fx, 0, TOTALNOISE_HIST_SIZE );
     894           3 :     st_fx->totalNoise_increase_len = 0;
     895           3 :     move16();
     896           3 :     init_coder_ace_plus_fx( st_fx, st_fx->last_total_brate, 0, -10 /*hack*/ );
     897             :     // PMT("Transient detector init needs review, handle hTranDet is missing")
     898           3 :     InitTransientDetection_fx( extract_l( Mult_32_16( st_fx->input_Fs, 0x0290 ) ),
     899           3 :                                NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ),
     900           3 :                                &st_fx->transientDetection );
     901             : 
     902           3 :     st_fx->Q_syn2 = 0;
     903           3 :     move16();
     904           3 :     st_fx->Q_syn = 0;
     905           3 :     move16();
     906           3 :     set16_fx( st_fx->Q_max, Q_MAX, L_Q_MEM );
     907           3 :     set16_fx( st_fx->Q_max_16k, Q_MAX, L_Q_MEM );
     908           3 :     st_fx->Q_old = 15;
     909           3 :     move16();
     910           3 :     st_fx->old_wsp_max = 0;
     911           3 :     move16();
     912           3 :     st_fx->old_wsp_shift = 0;
     913           3 :     move16();
     914           3 :     st_fx->sharpFlag = 0;
     915           3 :     move16();
     916             : 
     917           3 :     st_fx->tdm_LRTD_flag = 0; /* LRTD stereo mode flag */
     918           3 :     move16();
     919           3 :     st_fx->cna_dirac_flag = 0; /* CNA in DirAC flag */
     920           3 :     move16();
     921           3 :     st_fx->cng_sba_flag = 0; /* CNG in SBA flag */
     922           3 :     move16();
     923           3 :     st_fx->GSC_IVAS_mode = 0; /* CNG in SBA flag */
     924           3 :     move16();
     925           3 :     st_fx->element_mode = EVS_MONO; /* element mode */
     926           3 :     move16();
     927           3 :     st_fx->last_element_mode = st_fx->element_mode; /* element mode */
     928           3 :     move16();
     929           3 :     st_fx->element_brate = -1; /* element bitrate */
     930           3 :     move32();
     931             :     // PMT("element_mode and element_brate should be initialized at a proper place in ivas_dec_init eventually")
     932           3 :     st_fx->low_rate_mode = 0; /* low-rate mode flag */
     933           3 :     move16();
     934             :     // st_fx->coder_type = GENERIC;           /* low-rate mode flag */
     935             : 
     936           3 :     set16_fx( st_fx->pitch, L_SUBFR, 3 );
     937           3 :     set16_fx( st_fx->voicing_fx, 0, 3 );
     938             : 
     939             : 
     940             : #ifdef DEBUGGING
     941             :     st_fx->id_element = -1; /* element ID */
     942             :     move16();
     943             : #endif
     944           3 :     st_fx->extl_orig = -1; /* extension layer */
     945           3 :     move16();
     946           3 :     st_fx->extl_brate_orig = 0; /* extension layer bitrate */
     947           3 :     move32();
     948           3 :     return error;
     949             : }
     950             : 
     951             : /*-----------------------------------------------------------------------*
     952             :  * LPDmem_enc_init_fx()
     953             :  *
     954             :  * Initialization of ACELP LPDmem state variables
     955             :  *-----------------------------------------------------------------------*/
     956             : 
     957           3 : void LPDmem_enc_init_fx(
     958             :     LPD_state_HANDLE hLPDmem /* i/o: LP memories     */
     959             : )
     960             : {
     961             :     Word16 i;
     962             : 
     963           3 :     set16_fx( hLPDmem->syn, 0, 1 + M );
     964           3 :     set16_fx( hLPDmem->old_exc, 0, L_EXC_MEM );
     965           3 :     set16_fx( hLPDmem->mem_syn, 0, M );
     966           3 :     set16_fx( hLPDmem->mem_syn1_fx, 0, M );
     967           3 :     set16_fx( hLPDmem->mem_syn2, 0, M );
     968           3 :     set16_fx( hLPDmem->mem_syn_r, 0, L_SYN_MEM );
     969           3 :     set16_fx( hLPDmem->mem_syn3, 0, M );
     970             : 
     971           3 :     hLPDmem->mem_w0 = 0;
     972           3 :     move16();
     973           3 :     hLPDmem->tilt_code = 0;
     974           3 :     move16();
     975           3 :     hLPDmem->gc_threshold = 0;
     976           3 :     move32();
     977           3 :     hLPDmem->dm_fx.prev_state = 0;
     978           3 :     move16(); /* This corresponds to st_fx->dispMem in FLP */
     979           3 :     hLPDmem->dm_fx.prev_gain_code = 0;
     980           3 :     move32();
     981             : 
     982          21 :     FOR( i = 2; i < 8; i++ )
     983             :     {
     984          18 :         hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0;
     985          18 :         move16();
     986             :     }
     987           3 :     return;
     988             : }
     989             : 
     990        3850 : void LPDmem_enc_init_ivas_fx(
     991             :     LPD_state_HANDLE hLPDmem /* i/o: LP memories     */
     992             : )
     993             : {
     994             :     Word16 i;
     995             : 
     996        3850 :     set16_fx( hLPDmem->syn, 0, 1 + M );
     997        3850 :     set16_fx( hLPDmem->old_exc, 0, L_EXC_MEM );
     998        3850 :     set16_fx( hLPDmem->mem_syn, 0, M );
     999        3850 :     set16_fx( hLPDmem->mem_syn1_fx, 0, M );
    1000        3850 :     set16_fx( hLPDmem->mem_syn2, 0, M );
    1001        3850 :     set16_fx( hLPDmem->mem_syn_r, 0, L_SYN_MEM );
    1002        3850 :     set16_fx( hLPDmem->mem_syn3, 0, M );
    1003        3850 :     hLPDmem->q_lpd_old_exc = Q15;
    1004        3850 :     move16();
    1005        3850 :     hLPDmem->q_lpd_syn = Q15;
    1006        3850 :     move16();
    1007        3850 :     hLPDmem->q_mem_syn = Q15;
    1008        3850 :     move16();
    1009        3850 :     hLPDmem->mem_w0 = 0;
    1010        3850 :     move16();
    1011        3850 :     hLPDmem->tilt_code = 0;
    1012        3850 :     move16();
    1013        3850 :     hLPDmem->gc_threshold = 0;
    1014        3850 :     move32();
    1015        3850 :     hLPDmem->dm_fx.prev_state = 0;
    1016        3850 :     move16(); /* This corresponds to st_fx->dispMem in FLP */
    1017        3850 :     hLPDmem->dm_fx.prev_gain_code = 0;
    1018        3850 :     move32();
    1019             : 
    1020       26950 :     FOR( i = 2; i < 8; i++ )
    1021             :     {
    1022       23100 :         hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0;
    1023       23100 :         move16();
    1024             :     }
    1025             : 
    1026        3850 :     return;
    1027             : }
    1028             : 
    1029             : /*-----------------------------------------------------------------------*
    1030             :  * destroy_encoder_fx()
    1031             :  *
    1032             :  * Free memory which was allocated in init_encoder_fx()
    1033             :  *-----------------------------------------------------------------------*/
    1034             : 
    1035           3 : void destroy_encoder_fx(
    1036             :     Encoder_State *st_fx /* i/o: Encoder static variables structure  */
    1037             : )
    1038             : {
    1039           3 :     deleteCldfb( &st_fx->cldfbAnaEnc );
    1040           3 :     deleteCldfb( &st_fx->cldfbSynTd );
    1041             : 
    1042           3 :     deleteFdCngEnc_fx( &st_fx->hFdCngEnc );
    1043             : 
    1044           3 :     return;
    1045             : }
    1046             : 
    1047        8252 : ivas_error init_encoder_ivas_fx(
    1048             :     Encoder_State *st,              /* i/o: state structure                      */
    1049             :     Encoder_Struct *st_ivas,        /* i/o: encoder state structure              */
    1050             :     const Word16 idchan,            /* i  : channel ID                           */
    1051             :     const Word16 var_SID_rate_flag, /* i  : flag for variable SID update rate    */
    1052             :     const Word16 interval_SID,      /* i  : interval for SID update              */
    1053             :     const Word16 vad_only_flag,     /* i  : flag to indicate front-VAD structure */
    1054             :     const ISM_MODE ism_mode,        /* i  : ISM mode                             */
    1055             :     const Word32 element_brate      /* i  : element bitrate                      */
    1056             : )
    1057             : {
    1058             :     Word16 i;
    1059             :     ivas_error error;
    1060             :     Word32 igf_brate;
    1061             : 
    1062        8252 :     error = IVAS_ERR_OK;
    1063        8252 :     move32();
    1064             : 
    1065             :     /*-----------------------------------------------------------------*
    1066             :      * General parameters
    1067             :      *-----------------------------------------------------------------*/
    1068             : 
    1069        8252 :     IF( st->Opt_AMR_WB )
    1070             :     {
    1071           0 :         st->last_core = AMR_WB_CORE;
    1072             :     }
    1073             :     ELSE
    1074             :     {
    1075        8252 :         st->last_core = -1;
    1076             :     }
    1077        8252 :     move16();
    1078             : 
    1079        8252 :     st->L_frame = L_FRAME;
    1080        8252 :     move16();
    1081        8252 :     st->last_coder_type = GENERIC;
    1082        8252 :     move16();
    1083        8252 :     st->coder_type = GENERIC;
    1084        8252 :     move16();
    1085        8252 :     st->last_total_brate = st->total_brate;
    1086        8252 :     move32();
    1087        8252 :     st->last_bits_frame_nominal = -1;
    1088        8252 :     move16();
    1089        8252 :     st->last_total_brate_cng = -1;
    1090        8252 :     move16();
    1091        8252 :     st->last_core_brate = st->total_brate;
    1092        8252 :     move32();
    1093        8252 :     st->dtx_sce_sba = 0;
    1094        8252 :     move16();
    1095        8252 :     st->extl = -1;
    1096        8252 :     move16();
    1097        8252 :     st->last_extl = -1;
    1098        8252 :     move16();
    1099        8252 :     st->last_L_frame = L_FRAME;
    1100        8252 :     move16();
    1101        8252 :     st->rate_switching_reset = 0;
    1102        8252 :     move16();
    1103        8252 :     st->rate_switching_reset_16kHz = 0;
    1104        8252 :     move16();
    1105        8252 :     st->clas = UNVOICED_CLAS;
    1106        8252 :     move16();
    1107        8252 :     st->low_rate_mode = 0;
    1108        8252 :     move16();
    1109        8252 :     st->ini_frame = 0;
    1110        8252 :     move16();
    1111        8252 :     st->inactive_coder_type_flag = 0;
    1112        8252 :     move16();
    1113        8252 :     st->sba_br_sw_while_no_data = 0;
    1114        8252 :     move16();
    1115             : 
    1116        8252 :     st->coder_type_raw = VOICED;
    1117        8252 :     move16();
    1118        8252 :     st->last_coder_type_raw = st->coder_type_raw;
    1119        8252 :     move16();
    1120             : 
    1121        8252 :     st->flag_ACELP16k = set_ACELP_flag_IVAS( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 );
    1122        8252 :     move16();
    1123             : 
    1124        8252 :     st->is_ism_format = 0;
    1125        8252 :     move16();
    1126             : 
    1127        8252 :     IF( NE_16( ism_mode, ISM_MODE_NONE ) )
    1128             :     {
    1129        2160 :         st->is_ism_format = 1;
    1130        2160 :         move16();
    1131             :     }
    1132             : 
    1133             :     /*-----------------------------------------------------------------*
    1134             :      * Bitstream
    1135             :      *-----------------------------------------------------------------*/
    1136             : 
    1137        8252 :     IF( !vad_only_flag )
    1138             :     {
    1139        8183 :         IF( ( st->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL )
    1140             :         {
    1141           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) );
    1142             :         }
    1143             : 
    1144             :         /* set pointer to the buffer of indices */
    1145        8183 :         st->hBstr->ind_list = st_ivas->ind_list;
    1146        8183 :         st->hBstr->ivas_ind_list_zero = &st_ivas->ind_list;
    1147        8183 :         st->hBstr->ivas_max_num_indices = &st_ivas->ivas_max_num_indices;
    1148        8183 :         st->hBstr->nb_ind_tot = 0;
    1149        8183 :         move16();
    1150        8183 :         st->hBstr->nb_bits_tot = 0;
    1151        8183 :         move16();
    1152        8183 :         st->hBstr->st_ivas = st_ivas;
    1153             :     }
    1154             :     ELSE
    1155             :     {
    1156          69 :         st->hBstr = NULL;
    1157             :     }
    1158             : 
    1159             :     /*-----------------------------------------------------------------*
    1160             :      * Pre-processing and ACELP core parameters
    1161             :      *-----------------------------------------------------------------*/
    1162             : 
    1163        8252 :     Copy( GEWB_Ave_fx, st->mem_AR_fx, M );
    1164        8252 :     Copy( GEWB_Ave_fx, st->lsfoldbfi0_fx, M );
    1165        8252 :     Copy( GEWB_Ave_fx, st->lsfoldbfi1_fx, M );
    1166        8252 :     Copy( GEWB_Ave_fx, st->lsf_adaptive_mean_fx, M );
    1167             : 
    1168        8252 :     st->next_force_safety_net = 0;
    1169        8252 :     move16();
    1170             : 
    1171        8252 :     st->pstreaklen = 0;
    1172        8252 :     move16();
    1173        8252 :     st->streaklimit_fx = MAX_WORD16;
    1174        8252 :     move16();
    1175        8252 :     set16_fx( st->mem_MA_fx, 0, M );
    1176             : 
    1177        8252 :     init_gp_clip_fx( st->clip_var_fx );
    1178        8252 :     pitch_ol_init_fx( &st->old_thres_fx, &st->old_pitch, &st->delta_pit, &st->old_corr_fx );
    1179        8252 :     set16_fx( st->old_wsp_fx, 0, L_WSP_MEM );
    1180        8252 :     st->exp_old_wsp = 0;
    1181        8252 :     move16();
    1182        8252 :     set16_fx( st->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); // Needs to change depending on usage.
    1183        8252 :     st->Q_old_wsp2 = 0;
    1184        8252 :     move16();
    1185             : 
    1186        8252 :     st->mem_preemph_fx = 0;
    1187        8252 :     move16();
    1188        8252 :     st->mem_preemph_fx_q_inp = 0;
    1189        8252 :     move16();
    1190        8252 :     st->mem_preemph16k_fx = 0;
    1191        8252 :     move16();
    1192        8252 :     st->mem_preemph_enc = 0;
    1193        8252 :     move16();
    1194        8252 :     st->exp_mem_preemph_enc = 0;
    1195        8252 :     move16();
    1196             : 
    1197        8252 :     st->active_cnt = 0;
    1198        8252 :     move16();
    1199             : 
    1200        8252 :     st->pst_mem_deemp_err_fx = 0;
    1201        8252 :     move16();
    1202        8252 :     st->pst_lp_ener_fx = 0;
    1203        8252 :     move16();
    1204             : 
    1205             :     /* AVQ pre-quantizer memory */
    1206        8252 :     st->mem_preemp_preQ_fx = 0;
    1207        8252 :     move16();
    1208        8252 :     st->mem_deemp_preQ_fx = 0;
    1209        8252 :     move16();
    1210        8252 :     st->last_nq_preQ = 0;
    1211        8252 :     move16();
    1212        8252 :     st->last_code_preq = 0;
    1213        8252 :     move16();
    1214        8252 :     st->use_acelp_preq = 0;
    1215        8252 :     move16();
    1216        8252 :     st->last_harm_flag_acelp = 0;
    1217        8252 :     move16();
    1218             : 
    1219             :     /* (Decimated) Weighted Speech Memory */
    1220        8252 :     st->mem_wsp_enc = 0;
    1221        8252 :     move16();
    1222        8252 :     st->mem_wsp_fx = 0;
    1223        8252 :     move16();
    1224        8252 :     st->mem_wsp_q = 0;
    1225        8252 :     move16();
    1226        8252 :     set16_fx( st->mem_decim2_fx, 0, 3 );
    1227        8252 :     set32_fx( st->Bin_E_fx, 0, L_FFT );
    1228        8252 :     st->q_Bin_E = Q31;
    1229        8252 :     move16();
    1230        8252 :     st->ee_old_fx = 640; /* 10.0f in Q6 */
    1231        8252 :     move16();
    1232        8252 :     st->Nb_ACELP_frames = 0;
    1233        8252 :     move16();
    1234        8252 :     st->audio_frame_cnt = AUDIO_COUNTER_INI; /* Initialization of the audio frame counter mildly into the audio mode      */
    1235        8252 :     move16();
    1236             : 
    1237             :     /* adaptive lag window memory */
    1238        8252 :     st->old_pitch_la = 0;
    1239        8252 :     move16();
    1240             : 
    1241        8252 :     st->prev_Q_new = 0;
    1242        8252 :     move16();
    1243             : 
    1244        8252 :     IF( EQ_32( st->input_Fs, 8000 ) )
    1245             :     {
    1246           0 :         st->min_band = 1;
    1247           0 :         move16();
    1248           0 :         st->max_band = 16;
    1249           0 :         move16();
    1250             :     }
    1251             :     ELSE
    1252             :     {
    1253        8252 :         st->min_band = 0;
    1254        8252 :         move16();
    1255        8252 :         st->max_band = 19;
    1256        8252 :         move16();
    1257             :     }
    1258             : 
    1259        8252 :     IF( st->Opt_AMR_WB )
    1260             :     {
    1261           0 :         Copy( mean_isf_amr_wb_fx, st->lsf_old_fx, M );
    1262           0 :         E_LPC_isf_isp_conversion( st->lsf_old_fx, st->lsp_old1_fx, M );
    1263             :     }
    1264             :     ELSE
    1265             :     {
    1266        8252 :         Copy( GEWB_Ave_fx, st->lsf_old_fx, M );
    1267        8252 :         lsf2lsp_fx( st->lsf_old_fx, st->lsp_old1_fx, M, INT_FS_12k8 );
    1268             :     }
    1269             : 
    1270        8252 :     Copy( st->lsf_old_fx, st->lsf_old1_fx, M );
    1271        8252 :     Copy( st->lsp_old1_fx, st->lsp_old_fx, M );
    1272        8252 :     Copy( st->lsp_old_fx, st->lsp_old16k_fx, M );
    1273        8252 :     Copy( st->lsp_old_fx, st->lspold_enc_fx, M );
    1274             : 
    1275        8252 :     st->stab_fac_fx = 0;
    1276        8252 :     move16();
    1277             : 
    1278             :     /* Bass post-filter memories - encoder side of MODE2 */
    1279        8252 :     st->bpf_off = 0;
    1280        8252 :     move16();
    1281        8252 :     st->pst_mem_deemp_err_fx = 0;
    1282        8252 :     move16();
    1283        8252 :     st->pst_lp_ener_fx = 0;
    1284        8252 :     move16();
    1285             : 
    1286             :     /* TC coder type */
    1287        8252 :     st->tc_cnt = 0;
    1288        8252 :     move16();
    1289             : 
    1290             :     /* find_uv() parameters */
    1291        8252 :     st->old_dE1_fx = 0;
    1292        8252 :     move16();
    1293        8252 :     st->old_ind_deltaMax = 0;
    1294        8252 :     move16();
    1295        8252 :     set32_fx( st->old_enr_ssf_fx, 0, shl( NB_SSF, 1 ) );
    1296        8252 :     st->spike_hyst = -1;
    1297        8252 :     move16();
    1298             : 
    1299             :     /* stereo switching memories */
    1300        8252 :     st->mem_preemph_DFT_fx = 0;
    1301        8252 :     move16();
    1302        8252 :     st->mem_preemph_DFT_fx_q_inp = 0;
    1303        8252 :     move16();
    1304        8252 :     set16_fx( st->inp_12k8_mem_stereo_sw_fx, 0, sub( sub( STEREO_DFT_OVL_12k8, L_MEM_RECALC_12K8 ), L_FILT ) );
    1305        8252 :     st->mem_preemph16k_DFT_fx = 0;
    1306        8252 :     move16();
    1307        8252 :     set16_fx( st->inp_16k_mem_stereo_sw_fx, 0, sub( sub( STEREO_DFT_OVL_16k, L_MEM_RECALC_16K ), L_FILT16k ) );
    1308             : 
    1309        8252 :     st->sharpFlag = 0;
    1310        8252 :     move16();
    1311             : 
    1312             :     /* Stationary noise UV modification  */
    1313        8252 :     st->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/
    1314        8252 :     move16();
    1315        8252 :     st->uv_count = 0;
    1316        8252 :     move16();
    1317        8252 :     st->act_count = 3;
    1318        8252 :     move16();
    1319        8252 :     Copy( st->lsp_old_fx, st->lspold_s_fx, M );
    1320        8252 :     st->noimix_seed = RANDOM_INITSEED;
    1321        8252 :     move16();
    1322        8252 :     st->min_alpha_fx = 32767;
    1323        8252 :     move16();
    1324        8252 :     st->exc_pe_fx = 0;
    1325        8252 :     move16();
    1326        8252 :     st->Q_stat_noise = 15;
    1327        8252 :     move16();
    1328             :     /* FEC */
    1329        8252 :     st->last_clas = UNVOICED_CLAS;
    1330        8252 :     move16();
    1331        8252 :     st->prev_fmerit = 0;
    1332        8252 :     move16();
    1333        8252 :     st->fmerit_dt = 0;
    1334        8252 :     move16();
    1335        8252 :     st->Last_pulse_pos = 0;
    1336        8252 :     move16();
    1337             : 
    1338       90772 :     FOR( i = 0; i < shl( NB_SUBFR16k, 1 ); i++ )
    1339             :     {
    1340       82520 :         st->old_pitch_buf_fx[i] = L_SUBFR_Q6;
    1341       82520 :         move16();
    1342             :     }
    1343             : 
    1344             :     /* mode1 core switching */
    1345        8252 :     st->old_Es_pred_fx = 0;
    1346        8252 :     move16();
    1347        8252 :     set16_fx( st->old_Aq_12_8_fx + 1, 0, M );
    1348        8252 :     st->old_Aq_12_8_fx[0] = ONE_IN_Q12;
    1349        8252 :     move16();
    1350             : 
    1351             :     /* stable short pitch detection */
    1352        8252 :     st->voicing0_sm_fx = 0;
    1353        8252 :     move16();
    1354        8252 :     st->voicing_sm_fx = 0;
    1355        8252 :     move16();
    1356        8252 :     st->LF_EnergyRatio_sm_fx = 1;
    1357        8252 :     move16();
    1358        8252 :     st->predecision_flag = 0;
    1359        8252 :     move16();
    1360        8252 :     st->diff_sm_fx = 0;
    1361        8252 :     move32();
    1362        8252 :     st->energy_sm_fx = 0;
    1363        8252 :     move32();
    1364             : 
    1365        8252 :     set16_fx( st->pitch, L_SUBFR, 3 );
    1366        8252 :     set16_fx( st->voicing_fx, 0, 3 );
    1367             : 
    1368             :     /*-----------------------------------------------------------------*
    1369             :      * General signal buffers
    1370             :      *-----------------------------------------------------------------*/
    1371             : 
    1372        8252 :     IF( !vad_only_flag )
    1373             :     {
    1374        8183 :         IF( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL )
    1375             :         {
    1376           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) );
    1377             :         }
    1378             : 
    1379        8183 :         st->Bin_E_old_fx = st->hSignalBuf->Bin_E_old_fx;
    1380        8183 :         st->mem_decim_fx = st->hSignalBuf->mem_decim_fx;
    1381        8183 :         st->mem_decim16k_fx = st->hSignalBuf->mem_decim16k_fx;
    1382        8183 :         st->old_inp_12k8_fx = st->hSignalBuf->old_inp_12k8_fx;
    1383        8183 :         st->old_inp_16k_fx = st->hSignalBuf->old_inp_16k_fx;
    1384        8183 :         st->buf_speech_enc_pe = st->hSignalBuf->buf_speech_enc_pe;
    1385        8183 :         st->buf_synth = st->hSignalBuf->buf_synth;
    1386        8183 :         st->buf_speech_enc = st->hSignalBuf->buf_speech_enc;
    1387        8183 :         st->buf_wspeech_enc = st->hSignalBuf->buf_wspeech_enc;
    1388             : 
    1389        8183 :         set32_fx( st->Bin_E_old_fx, 0, L_FFT / 2 );
    1390        8183 :         st->q_Bin_E_old = Q31;
    1391        8183 :         move16();
    1392        8183 :         set16_fx( st->hSignalBuf->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k );
    1393        8183 :         st->exp_buf_speech_enc = 0;
    1394        8183 :         move16();
    1395        8183 :         set16_fx( st->hSignalBuf->buf_wspeech_enc, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 );
    1396        8183 :         st->exp_buf_wspeech_enc = 0;
    1397        8183 :         move16();
    1398             :         /* initializations */
    1399        8183 :         set32_fx( st->Bin_E_old_fx, 0, L_FFT / 2 );
    1400        8183 :         st->q_Bin_E_old = Q31;
    1401        8183 :         move16();
    1402        8183 :         set16_fx( st->mem_decim_fx, 0, shl( L_FILT_MAX, 1 ) );
    1403        8183 :         set16_fx( st->mem_decim_fx_q_inp, 0, shl( L_FILT_MAX, 1 ) );
    1404        8183 :         set16_fx( st->mem_decim16k_fx, 0, shl( L_FILT_MAX, 1 ) );
    1405        8183 :         set16_fx( st->old_inp_12k8_fx, 0, L_INP_MEM );
    1406        8183 :         set16_fx( st->old_inp_16k_fx, 0, L_INP_MEM );
    1407        8183 :         st->exp_old_inp_16k = 0;
    1408        8183 :         st->exp_old_inp_12k8 = 0;
    1409        8183 :         move16();
    1410        8183 :         move16();
    1411             : 
    1412        8183 :         st->input_buff_fx = st->hSignalBuf->input_buff;
    1413        8183 :         st->input_buff32_fx = st->hSignalBuf->input_buff32;
    1414        8183 :         set16_fx( st->input_buff_fx, 0, add( L_FRAME48k, add( L_FRAME48k, NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ) ) );
    1415        8183 :         st->q_inp = Q15;
    1416        8183 :         move16();
    1417        8183 :         st->mem_preemph_q = Q15;
    1418        8183 :         move16();
    1419        8183 :         st->mem_q = Q15;
    1420        8183 :         move16();
    1421        8183 :         st->q_old_inp = Q15;
    1422        8183 :         move16();
    1423        8183 :         set32_fx( st->input_buff32_fx, 0, add( L_FRAME48k, add( L_FRAME48k, NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ) ) );
    1424        8183 :         st->q_inp32 = Q31;
    1425        8183 :         move16();
    1426        8183 :         st->q_old_inp32 = Q31;
    1427        8183 :         move16();
    1428        8183 :         st->old_input_signal_fx = st->input_buff_fx;
    1429        8183 :         st->old_input_signal32_fx = st->input_buff32_fx;
    1430             :         /* st->input_Fs / FRAMES_PER_SEC */
    1431        8183 :         Word16 frame_length = extract_l( Mpy_32_32( st->input_Fs, ONE_BY_FRAMES_PER_SEC_Q31 ) );
    1432             : 
    1433        8183 :         IF( st->element_mode == EVS_MONO )
    1434             :         {
    1435           0 :             st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS );
    1436           0 :             st->input_fx = st->input_buff_fx + add( frame_length, (Word16) NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ) );
    1437             :         }
    1438             :         ELSE
    1439             :         {
    1440             :             // st->input32_fx = st->input_buff32_fx + Mpy_32_32( st->input_Fs, 42949673 ) /* 1/50 in Q31*/; // st->input_Fs / FRAMES_PER_SEC
    1441        8183 :             st->input32_fx = st->input_buff32_fx + frame_length;
    1442        8183 :             st->input_fx = st->input_buff_fx + frame_length;
    1443             :         }
    1444             :     }
    1445             :     ELSE
    1446             :     {
    1447          69 :         st->hSignalBuf = NULL;
    1448          69 :         st->Bin_E_old_fx = NULL;
    1449          69 :         st->mem_decim_fx = NULL;
    1450          69 :         st->mem_decim16k_fx = NULL;
    1451          69 :         st->old_inp_12k8_fx = NULL;
    1452          69 :         st->old_inp_16k_fx = NULL;
    1453          69 :         st->buf_speech_enc_pe = NULL;
    1454          69 :         st->buf_synth = NULL;
    1455          69 :         st->buf_speech_enc = NULL;
    1456          69 :         st->buf_wspeech_enc = NULL;
    1457          69 :         st->input_buff_fx = NULL;
    1458             :     }
    1459             : 
    1460             :     /*-----------------------------------------------------------------*
    1461             :      * Noise estimator
    1462             :      *-----------------------------------------------------------------*/
    1463             : 
    1464        8252 :     test();
    1465        8252 :     test();
    1466        8252 :     test();
    1467        8252 :     IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO )
    1468             :     {
    1469        8153 :         IF( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL )
    1470             :         {
    1471           0 :             return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" );
    1472             :         }
    1473             : 
    1474        8153 :         noise_est_init_ivas_fx( st->hNoiseEst );
    1475             :     }
    1476             :     ELSE
    1477             :     {
    1478          99 :         st->hNoiseEst = NULL;
    1479             :     }
    1480             : 
    1481             :     /*-----------------------------------------------------------------*
    1482             :      * VAD
    1483             :      *-----------------------------------------------------------------*/
    1484             : 
    1485        8252 :     st->vad_flag = 1;
    1486        8252 :     move16();
    1487        8252 :     st->localVAD = 0;
    1488        8252 :     move16();
    1489             : 
    1490        8252 :     IF( ( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) )
    1491             :     {
    1492        8084 :         IF( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL )
    1493             :         {
    1494           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) );
    1495             :         }
    1496             : 
    1497        8084 :         wb_vad_init_ivas_fx( st->hVAD );
    1498             :     }
    1499             :     ELSE
    1500             :     {
    1501         168 :         st->hVAD = NULL;
    1502             :     }
    1503        8252 :     st->Pos_relE_cnt = 20;
    1504        8252 :     move16();
    1505             : 
    1506             :     /* CLDFB-based VAD */
    1507        8252 :     IF( st->element_mode == EVS_MONO )
    1508             :     {
    1509             :         /* This is done to as in EVS T_CldfbVadState structure is present in Encoder State */
    1510           0 :         st->hVAD_CLDFB = &st->vad_st;
    1511           0 :         vad_init_fx( st->hVAD_CLDFB );
    1512             :     }
    1513             :     ELSE
    1514             :     {
    1515        8252 :         st->hVAD_CLDFB = NULL;
    1516             :     }
    1517             : 
    1518             :     /*-----------------------------------------------------------------*
    1519             :      * Speech/music classifier
    1520             :      *-----------------------------------------------------------------*/
    1521             : 
    1522        8252 :     IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_TD ) || EQ_16( st->element_mode, IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO )
    1523             :     {
    1524        8153 :         IF( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL )
    1525             :         {
    1526           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) );
    1527             :         }
    1528             : 
    1529        8153 :         speech_music_clas_init_ivas_fx( st->hSpMusClas );
    1530        8153 :         st->sp_aud_decision0 = 0;
    1531        8153 :         move16();
    1532        8153 :         st->sp_aud_decision1 = 0;
    1533        8153 :         move16();
    1534        8153 :         st->sp_aud_decision2 = 0;
    1535        8153 :         move16();
    1536             :     }
    1537             :     ELSE
    1538             :     {
    1539          99 :         st->hSpMusClas = NULL;
    1540             :     }
    1541             : 
    1542             : 
    1543             :     /*-----------------------------------------------------------------*
    1544             :      * WB, SWB and FB bandwidth detector
    1545             :      *-----------------------------------------------------------------*/
    1546             : 
    1547        8252 :     st->lt_mean_NB_fx = 0;
    1548        8252 :     move16();
    1549        8252 :     st->lt_mean_WB_fx = 0;
    1550        8252 :     move16();
    1551        8252 :     st->lt_mean_SWB_fx = 0;
    1552        8252 :     move16();
    1553        8252 :     st->count_WB = BWD_COUNT_MAX;
    1554        8252 :     move16();
    1555        8252 :     st->count_SWB = BWD_COUNT_MAX;
    1556        8252 :     move16();
    1557        8252 :     st->count_FB = BWD_COUNT_MAX;
    1558        8252 :     move16();
    1559        8252 :     st->bwidth = st->max_bwidth;
    1560        8252 :     move16();
    1561        8252 :     st->last_input_bwidth = st->bwidth;
    1562        8252 :     move16();
    1563        8252 :     st->last_bwidth = st->bwidth;
    1564        8252 :     move16();
    1565        8252 :     st->last_bwidth_cng = st->bwidth;
    1566        8252 :     move16();
    1567        8252 :     st->bwidth_sw_cnt = 0;
    1568        8252 :     move16();
    1569             : 
    1570             : 
    1571             :     /*-----------------------------------------------------------------*
    1572             :      * DTX
    1573             :      *-----------------------------------------------------------------*/
    1574             : 
    1575        8252 :     st->lp_speech_32fx = 754974720; /*Q24 (45.0)    */ /* Initialize the long-term active speech level in dB   */
    1576        8252 :     move32();
    1577        8252 :     st->lp_noise_32fx = 0;
    1578        8252 :     move16();
    1579        8252 :     st->flag_noisy_speech_snr = 0;
    1580        8252 :     move16();
    1581        8252 :     st->fd_cng_reset_flag = 0;
    1582        8252 :     move16();
    1583        8252 :     st->cng_type = -1;
    1584        8252 :     move16();
    1585        8252 :     st->bckr_tilt_lt = 0;
    1586        8252 :     move16();
    1587        8252 :     st->active_cnt = 0;
    1588        8252 :     move16();
    1589             : 
    1590        8252 :     test();
    1591        8252 :     test();
    1592        8252 :     test();
    1593        8252 :     test();
    1594        8252 :     IF( ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO ) || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
    1595             :     {
    1596         485 :         IF( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL )
    1597             :         {
    1598           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) );
    1599             :         }
    1600         485 :         dtx_enc_init_fx( st, var_SID_rate_flag, interval_SID );
    1601             :     }
    1602             :     ELSE
    1603             :     {
    1604        7767 :         st->hDtxEnc = NULL;
    1605             :     }
    1606             : 
    1607             :     /*-----------------------------------------------------------------*
    1608             :      * No other handles needed to be allocated for front-VAD structure
    1609             :      *-----------------------------------------------------------------*/
    1610             : 
    1611        8252 :     IF( vad_only_flag )
    1612             :     {
    1613          69 :         st->hTdCngEnc = NULL;
    1614          69 :         st->cldfbAnaEnc = NULL;
    1615          69 :         st->hFdCngEnc = NULL;
    1616          69 :         st->hSC_VBR = NULL;
    1617          69 :         st->hAmrwb_IO = NULL;
    1618          69 :         st->hLPDmem = NULL;
    1619          69 :         st->hGSCEnc = NULL;
    1620          69 :         st->hBWE_TD = NULL;
    1621          69 :         st->cldfbSynTd = NULL;
    1622          69 :         st->hBWE_FD = NULL;
    1623          69 :         st->hHQ_core = NULL;
    1624          69 :         st->hRF = NULL;
    1625          69 :         st->hTECEnc = NULL;
    1626          69 :         st->hTcxEnc = NULL;
    1627          69 :         st->hTcxCfg = NULL;
    1628          69 :         st->hIGFEnc = NULL;
    1629          69 :         st->hPlcExt = NULL;
    1630          69 :         st->hTranDet = NULL;
    1631             : 
    1632          69 :         st->element_mode = IVAS_SCE;
    1633          69 :         move16();
    1634          69 :         st->idchan = 100; /* indicates hCoreCoderVAD */
    1635          69 :         move16();
    1636          69 :         st->core = -1;
    1637          69 :         move16();
    1638          69 :         st->rf_mode = 0;
    1639          69 :         move16();
    1640             : 
    1641          69 :         return error;
    1642             :     }
    1643             : 
    1644             :     /*-----------------------------------------------------------------*
    1645             :      * LP-CNG
    1646             :      *-----------------------------------------------------------------*/
    1647             : 
    1648        8183 :     test();
    1649        8183 :     test();
    1650        8183 :     test();
    1651        8183 :     test();
    1652        8183 :     test();
    1653        8183 :     IF( ( ( idchan == 0 && st->Opt_DTX_ON && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || st->element_mode == EVS_MONO ) && !( EQ_16( ism_mode, ISM_MODE_PARAM ) || EQ_16( ism_mode, ISM_MODE_DISC ) ) )
    1654             :     {
    1655          88 :         IF( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL )
    1656             :         {
    1657           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) );
    1658             :         }
    1659             : 
    1660          88 :         td_cng_enc_init_ivas_fx( st->hTdCngEnc, st->Opt_DTX_ON, st->max_bwidth );
    1661             :     }
    1662             :     ELSE
    1663             :     {
    1664        8095 :         st->hTdCngEnc = NULL;
    1665             :     }
    1666             : 
    1667             :     /*-----------------------------------------------------------------*
    1668             :      * CLDFB & resampling tools parameters
    1669             :      *-----------------------------------------------------------------*/
    1670        8183 :     test();
    1671        8183 :     test();
    1672        8183 :     test();
    1673        8183 :     IF( ( NE_16( st->element_mode, IVAS_CPE_MDCT ) && idchan == 0 ) || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
    1674             :     {
    1675        3172 :         IF( EQ_16( st->element_mode, EVS_MONO ) )
    1676             :         {
    1677             :             /* open analysis for input SR */
    1678           0 :             st->input_frame_fx = extract_l( Mult_32_16( st->input_Fs, 0x0290 ) );
    1679             : 
    1680           0 :             if ( ( error = openCldfb( &st->cldfbAnaEnc, CLDFB_ANALYSIS, CLDFB_getNumChannels( st->input_Fs ), st->input_frame_fx ) ) != IVAS_ERR_OK )
    1681             :             {
    1682           0 :                 return error;
    1683             :             }
    1684             :         }
    1685             :         ELSE
    1686             :         {
    1687             : 
    1688        3172 :             IF( ( error = openCldfb_ivas_fx( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS, ENC ) ) != IVAS_ERR_OK )
    1689             :             {
    1690           0 :                 return error;
    1691             :             }
    1692             :         }
    1693             :     }
    1694             :     ELSE
    1695             :     {
    1696        5011 :         st->cldfbAnaEnc = NULL;
    1697             :     }
    1698             : 
    1699        8183 :     st->energyCoreLookahead_Fx = 2; /* 6.1e-5f in Q15 */
    1700        8183 :     move32();
    1701        8183 :     st->sf_energyCoreLookahead_Fx = 2; /* 6.1e-5f in Q15 */
    1702        8183 :     move16();
    1703             : 
    1704             :     /*-----------------------------------------------------------------*
    1705             :      * SC-VBR parameters
    1706             :      *-----------------------------------------------------------------*/
    1707             : 
    1708        8183 :     test();
    1709        8183 :     IF( st->Opt_SC_VBR || st->element_mode == EVS_MONO )
    1710             :     {
    1711           0 :         IF( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL )
    1712             :         {
    1713           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) );
    1714             :         }
    1715             : 
    1716           0 :         sc_vbr_enc_init_fx( st->hSC_VBR );
    1717             :     }
    1718             :     ELSE
    1719             :     {
    1720        8183 :         st->hSC_VBR = NULL;
    1721             :     }
    1722             : 
    1723        8183 :     st->last_Opt_SC_VBR = 0;
    1724        8183 :     move16();
    1725             : 
    1726             : 
    1727             :     /*-----------------------------------------------------------------*
    1728             :      * AMR-WB IO initialization
    1729             :      *-----------------------------------------------------------------*/
    1730             : 
    1731        8183 :     test();
    1732        8183 :     IF( st->Opt_AMR_WB || st->element_mode == EVS_MONO )
    1733             :     {
    1734           0 :         IF( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL )
    1735             :         {
    1736           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) );
    1737             :         }
    1738             : 
    1739           0 :         amr_wb_enc_init_fx( st->hAmrwb_IO );
    1740             :     }
    1741             :     ELSE
    1742             :     {
    1743        8183 :         st->hAmrwb_IO = NULL;
    1744             :     }
    1745             : 
    1746             :     /*-----------------------------------------------------------------*
    1747             :      * ACELP LPDmem
    1748             :      *-----------------------------------------------------------------*/
    1749             : 
    1750        8183 :     test();
    1751        8183 :     test();
    1752        8183 :     IF( ( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st->element_mode, IVAS_CPE_TD ) )
    1753             :     {
    1754        3058 :         IF( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL )
    1755             :         {
    1756           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) );
    1757             :         }
    1758             : 
    1759        3058 :         LPDmem_enc_init_ivas_fx( st->hLPDmem );
    1760             :     }
    1761             :     ELSE
    1762             :     {
    1763        5125 :         st->hLPDmem = NULL;
    1764             :     }
    1765             : 
    1766             :     /*-----------------------------------------------------------------*
    1767             :      * parameters for AC coder type (GSC)
    1768             :      *-----------------------------------------------------------------*/
    1769             : 
    1770        8183 :     st->GSC_noisy_speech = 0;
    1771        8183 :     move16();
    1772        8183 :     st->GSC_IVAS_mode = 0;
    1773        8183 :     move16();
    1774             : 
    1775        8183 :     test();
    1776        8183 :     test();
    1777        8183 :     IF( ( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st->element_mode, IVAS_CPE_TD ) )
    1778             :     {
    1779        3058 :         IF( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL )
    1780             :         {
    1781           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) );
    1782             :         }
    1783             : 
    1784        3058 :         GSC_enc_init_fx( st->hGSCEnc );
    1785             :     }
    1786             :     ELSE
    1787             :     {
    1788        5125 :         st->hGSCEnc = NULL;
    1789             :     }
    1790             : 
    1791             :     /*-----------------------------------------------------------------*
    1792             :      * TBE parameters
    1793             :      *-----------------------------------------------------------------*/
    1794             : 
    1795        8183 :     test();
    1796        8183 :     IF( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) )
    1797             :     {
    1798        3058 :         IF( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL )
    1799             :         {
    1800           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) );
    1801             :         }
    1802             : 
    1803        3058 :         IF( st->element_mode == EVS_MONO )
    1804             :         {
    1805           0 :             if ( ( error = openCldfb( &st->cldfbSynTd, CLDFB_SYNTHESIS, CLDFB_getNumChannels( 16000 ), L_FRAME16k ) ) != IVAS_ERR_OK )
    1806             :             {
    1807           0 :                 return error;
    1808             :             }
    1809             :         }
    1810             :         ELSE
    1811             :         {
    1812        3058 :             IF( ( error = openCldfb_ivas_fx( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS, ENC ) ) != IVAS_ERR_OK )
    1813             :             {
    1814           0 :                 return error;
    1815             :             }
    1816             :         }
    1817        3058 :         InitSWBencBuffer_ivas_fx( st );
    1818        3058 :         ResetSHBbuffer_Enc_fx( st );
    1819             :     }
    1820             :     ELSE
    1821             :     {
    1822        5125 :         st->hBWE_TD = NULL;
    1823        5125 :         st->cldfbSynTd = NULL;
    1824             :     }
    1825             : 
    1826             :     /*-----------------------------------------------------------------*
    1827             :      * SWB BWE parameters
    1828             :      *-----------------------------------------------------------------*/
    1829             : 
    1830        8183 :     test();
    1831        8183 :     IF( idchan == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) )
    1832             :     {
    1833        3058 :         IF( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL )
    1834             :         {
    1835           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) );
    1836             :         }
    1837             : 
    1838        3058 :         fd_bwe_enc_init_fx( st->hBWE_FD );
    1839        3058 :         st->Q_old_wtda = 0;
    1840        3058 :         move16();
    1841             :     }
    1842             :     ELSE
    1843             :     {
    1844        5125 :         st->hBWE_FD = NULL;
    1845             :     }
    1846             : 
    1847             :     /*-----------------------------------------------------------------*
    1848             :      * HQ core parameters
    1849             :      *-----------------------------------------------------------------*/
    1850             : 
    1851        8183 :     IF( NE_16( st->element_mode, IVAS_CPE_TD ) && NE_16( st->element_mode, IVAS_CPE_MDCT ) && idchan == 0 )
    1852             :     {
    1853        3058 :         IF( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL )
    1854             :         {
    1855           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) );
    1856             :         }
    1857             : 
    1858        3058 :         HQ_core_enc_init_fx( st->hHQ_core );
    1859             :     }
    1860             :     ELSE
    1861             :     {
    1862        5125 :         st->hHQ_core = NULL;
    1863             :     }
    1864             : 
    1865             :     /* init memory for detect_transient(), used by HQ core and swb_bwe_enc */
    1866        8183 :     st->old_hpfilt_in_fx = 0;
    1867        8183 :     move16();
    1868        8183 :     st->old_hpfilt_out_fx = 0;
    1869        8183 :     move16();
    1870        8183 :     st->EnergyLT_fx = 0;
    1871        8183 :     move32();
    1872        8183 :     st->Energy_Old_fx = 0;
    1873        8183 :     move32();
    1874        8183 :     st->TransientHangOver = 0;
    1875        8183 :     move16();
    1876        8183 :     st->EnergyLT_fx_exp = 30;
    1877        8183 :     move16();
    1878        8183 :     st->last_enerBuffer_exp = 0;
    1879        8183 :     move16();
    1880             : 
    1881             :     /*-----------------------------------------------------------------*
    1882             :      * Channel-aware mode
    1883             :      *-----------------------------------------------------------------*/
    1884             : 
    1885        8183 :     test();
    1886        8183 :     test();
    1887        8183 :     test();
    1888        8183 :     IF( !st->Opt_RF_ON || ( NE_16( st->bwidth, WB ) && NE_16( st->bwidth, SWB ) ) || NE_32( st->total_brate, ACELP_13k20 ) )
    1889             :     {
    1890        8183 :         st->rf_mode = 0;
    1891        8183 :         move16();
    1892             :     }
    1893             :     ELSE
    1894             :     {
    1895           0 :         st->rf_mode = st->Opt_RF_ON;
    1896           0 :         move16();
    1897             :     }
    1898             : 
    1899        8183 :     st->rf_mode_last = st->rf_mode;
    1900        8183 :     move16();
    1901             : 
    1902        8183 :     test();
    1903        8183 :     IF( st->Opt_RF_ON || st->element_mode == EVS_MONO )
    1904             :     {
    1905           0 :         IF( ( st->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL )
    1906             :         {
    1907           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) );
    1908             :         }
    1909             : 
    1910             :         /* initialize RF indice buffers */
    1911           0 :         reset_rf_indices_fx( st );
    1912             :     }
    1913             :     ELSE
    1914             :     {
    1915        8183 :         st->hRF = NULL;
    1916             :     }
    1917             : 
    1918             :     /*-----------------------------------------------------------------*
    1919             :      * Temporal Envelope Coding
    1920             :      *-----------------------------------------------------------------*/
    1921             : 
    1922        8183 :     IF( st->element_mode == EVS_MONO )
    1923             :     {
    1924           0 :         IF( ( st->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL )
    1925             :         {
    1926           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) );
    1927             :         }
    1928             :     }
    1929             :     ELSE
    1930             :     {
    1931        8183 :         st->hTECEnc = NULL;
    1932             :     }
    1933             :     /* note: initialization done later in init_coder_ace_plus() */
    1934             : 
    1935             :     /*-----------------------------------------------------------------*
    1936             :      * TCX core
    1937             :      *-----------------------------------------------------------------*/
    1938             : 
    1939             :     // ToDo: reduction possible for MCT_CHAN_MODE_LFE channel
    1940        8183 :     test();
    1941        8183 :     IF( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_MDCT ) )
    1942             :     {
    1943        8084 :         IF( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL )
    1944             :         {
    1945           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) );
    1946             :         }
    1947        8084 :         set32_fx( st->hTcxEnc->spectrum_long_fx, 0, N_MAX );
    1948        8084 :         st->hTcxEnc->spectrum_long_e = 0;
    1949        8084 :         move16();
    1950             :         /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */
    1951        8084 :         st->hTcxEnc->spectrum_fx[0] = st->hTcxEnc->spectrum_long_fx;
    1952        8084 :         st->hTcxEnc->spectrum_fx[1] = st->hTcxEnc->spectrum_long_fx + N_TCX10_MAX;
    1953        8084 :         move32();
    1954        8084 :         move32();
    1955        8084 :         st->hTcxEnc->spectrum_e[0] = st->hTcxEnc->spectrum_e[1] = 0;
    1956        8084 :         move16();
    1957        8084 :         move16();
    1958             : 
    1959        8084 :         set16_fx( st->hTcxEnc->old_out_fx, 0, L_FRAME32k );
    1960        8084 :         st->hTcxEnc->Q_old_out = 0;
    1961        8084 :         move16();
    1962             : 
    1963             :         /* MDCT selector */
    1964        8084 :         MDCT_selector_reset_fx( st->hTcxEnc );
    1965             : 
    1966             :         /* MDCT classifier */
    1967        8084 :         MDCT_classifier_reset_fx( st->hTcxEnc );
    1968             : 
    1969        8084 :         IF( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL )
    1970             :         {
    1971           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) );
    1972             :         }
    1973             :     }
    1974             :     ELSE
    1975             :     {
    1976          99 :         st->hTcxEnc = NULL;
    1977          99 :         st->hTcxCfg = NULL;
    1978             :     }
    1979             : 
    1980             :     /*-----------------------------------------------------------------*
    1981             :      * IGF
    1982             :      *-----------------------------------------------------------------*/
    1983             : 
    1984        8183 :     igf_brate = st->total_brate;
    1985        8183 :     move32();
    1986             : 
    1987        8183 :     test();
    1988        8183 :     test();
    1989        8183 :     test();
    1990        8183 :     test();
    1991        8183 :     test();
    1992        8183 :     test();
    1993        8183 :     test();
    1994        8183 :     IF( EQ_16( st->element_mode, IVAS_SCE ) && ( EQ_16( st_ivas->hEncoderConfig->ivas_format, ISM_FORMAT ) || EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) )
    1995             :     {
    1996        2160 :         igf_brate = L_sub( st->total_brate, i_mult( ISM_NB_BITS_METADATA_NOMINAL, FRAMES_PER_SEC ) );
    1997             :     }
    1998        6023 :     ELSE IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && ( EQ_16( st_ivas->hEncoderConfig->ivas_format, SBA_FORMAT ) ||
    1999             :                                                                                                    EQ_16( st_ivas->hEncoderConfig->ivas_format, SBA_ISM_FORMAT ) ||
    2000             :                                                                                                    EQ_16( st_ivas->hEncoderConfig->ivas_format, MC_FORMAT ) ||
    2001             :                                                                                                    EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_FORMAT ) ) ) )
    2002             :     {
    2003             :         /* use nominal bitrates for DFT Stereo and (O)SBA, same as in stereo_dft_config()/ivas_spar_config() */
    2004         997 :         IF( EQ_32( element_brate, IVAS_13k2 ) )
    2005             :         {
    2006         257 :             igf_brate = ACELP_9k60;
    2007             :         }
    2008         740 :         ELSE IF( EQ_32( element_brate, IVAS_16k4 ) )
    2009             :         {
    2010         263 :             igf_brate = ACELP_13k20;
    2011             :         }
    2012         477 :         ELSE IF( EQ_32( element_brate, IVAS_24k4 ) )
    2013             :         {
    2014         183 :             igf_brate = ACELP_16k40;
    2015             :         }
    2016         294 :         ELSE IF( EQ_32( element_brate, IVAS_32k ) )
    2017             :         {
    2018         238 :             igf_brate = ACELP_24k40;
    2019             :         }
    2020             :     }
    2021        5026 :     ELSE IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) )
    2022             :     {
    2023        5026 :         igf_brate = element_brate;
    2024             :     }
    2025        8183 :     move32();
    2026        8183 :     test();
    2027        8183 :     IF( EQ_16( st->codec_mode, MODE2 ) || GT_16( st->element_mode, EVS_MONO ) )
    2028             :     {
    2029        8183 :         st->igf = getIgfPresent_fx( st->element_mode, igf_brate, st->max_bwidth, st->rf_mode );
    2030             :     }
    2031             :     ELSE
    2032             :     {
    2033           0 :         st->igf = 0;
    2034             :     }
    2035        8183 :     move16();
    2036             : 
    2037        8183 :     test();
    2038        8183 :     test();
    2039        8183 :     test();
    2040        8183 :     IF( ( idchan == 0 || EQ_16( st->element_mode, IVAS_CPE_MDCT ) ) && ( st->igf || st->element_mode == EVS_MONO ) )
    2041             :     {
    2042        6526 :         IF( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL )
    2043             :         {
    2044           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) );
    2045             :         }
    2046             :     }
    2047             :     ELSE
    2048             :     {
    2049        1657 :         st->hIGFEnc = NULL;
    2050             :     }
    2051             : 
    2052             :     /*-----------------------------------------------------------------*
    2053             :      * Mode 2 initialization
    2054             :      *-----------------------------------------------------------------*/
    2055             : 
    2056        8183 :     st->last_sr_core = L_mult0( st->last_L_frame, FRAMES_PER_SEC );
    2057        8183 :     move32();
    2058             : 
    2059             : 
    2060             :     /* PLC encoder */
    2061        8183 :     IF( st->element_mode == EVS_MONO )
    2062             :     {
    2063           0 :         IF( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL )
    2064             :         {
    2065           0 :             return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) );
    2066             :         }
    2067             :     }
    2068             :     ELSE
    2069             :     {
    2070        8183 :         st->hPlcExt = NULL;
    2071             :     }
    2072             : 
    2073             :     /* Init Mode 2 core coder */
    2074        8183 :     st->last_totalNoise_fx = 0;
    2075        8183 :     move16();
    2076        8183 :     set16_fx( st->totalNoise_increase_hist_fx, 0, TOTALNOISE_HIST_SIZE );
    2077        8183 :     st->totalNoise_increase_len = 0;
    2078        8183 :     move16();
    2079        8183 :     TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc;
    2080        8183 :     IF( hTcxEnc != NULL )
    2081             :     {
    2082        8084 :         hTcxEnc->L_frameTCX = extract_l( Mult_32_16( st->input_Fs, 0x0290 ) ); /* 0x0290  is 1/FRAMES_PER_SEC in Q15*/
    2083        8084 :         move16();
    2084             :     }
    2085        8183 :     st->currEnergyHF_fx = 0;
    2086        8183 :     move32();
    2087        8183 :     st->currEnergyHF_e_fx = 0;
    2088        8183 :     move16();
    2089        8183 :     st->prevEnergyHF_fx = 0;
    2090        8183 :     move32();
    2091             : 
    2092             :     /* Initialize TCX */
    2093             : 
    2094             :     /* Initialize Signal Buffers */
    2095        8183 :     Word16 shift = getScaleFactor16( st->old_inp_16k_fx, L_INP_MEM );
    2096        8183 :     Scale_sig( st->old_inp_16k_fx, L_INP_MEM, shift );
    2097        8183 :     st->exp_old_inp_16k = sub( st->exp_old_inp_16k, shift );
    2098        8183 :     move16();
    2099        8183 :     shift = getScaleFactor16( st->old_inp_12k8_fx, L_INP_MEM );
    2100        8183 :     Scale_sig( st->old_inp_12k8_fx, L_INP_MEM, shift );
    2101        8183 :     st->exp_old_inp_12k8 = sub( st->exp_old_inp_12k8, shift );
    2102        8183 :     move16();
    2103             :     /* Initialize ACELP */
    2104        8183 :     init_coder_ace_plus_ivas_fx( st, st->last_total_brate, igf_brate, 0 );
    2105             : 
    2106        8183 :     IF( st->hLPDmem != NULL )
    2107             :     {
    2108        3058 :         st->hLPDmem->q_lpd_old_exc = st->prev_Q_new;
    2109        3058 :         move16();
    2110             :     }
    2111             :     /*-----------------------------------------------------------------*
    2112             :      * FD-CNG encoder
    2113             :      *-----------------------------------------------------------------*/
    2114             : 
    2115        8183 :     test();
    2116        8183 :     test();
    2117        8183 :     test();
    2118        8183 :     test();
    2119        8183 :     IF( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO || ( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && st->Opt_DTX_ON ) )
    2120             :     {
    2121         416 :         createFdCngEnc_fx( &st->hFdCngEnc );
    2122         416 :         initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale );
    2123             :         /* initialization for IVAS modes happens in first frame pre-processing */
    2124         416 :         IF( st->element_mode == EVS_MONO )
    2125             :         {
    2126             :             Word32 total_brate;
    2127             : 
    2128           0 :             test();
    2129           0 :             IF( st->rf_mode && EQ_32( st->total_brate, ACELP_13k20 ) )
    2130             :             {
    2131           0 :                 total_brate = ACELP_9k60;
    2132           0 :                 move32();
    2133             :             }
    2134             :             ELSE
    2135             :             {
    2136           0 :                 total_brate = st->total_brate;
    2137           0 :                 move32();
    2138             :             }
    2139             : 
    2140           0 :             configureFdCngEnc_ivas_fx( st->hFdCngEnc, st->bwidth, total_brate );
    2141             :         }
    2142             :     }
    2143             :     ELSE
    2144             :     {
    2145        7767 :         st->hFdCngEnc = NULL;
    2146             :     }
    2147             : 
    2148             :     /*-----------------------------------------------------------------*
    2149             :      * Transient detector
    2150             :      *-----------------------------------------------------------------*/
    2151             : 
    2152        8183 :     IF( ( st->hTranDet = (TRAN_DET_HANDLE) malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL )
    2153             :     {
    2154           0 :         return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Transient Detection\n" ) );
    2155             :     }
    2156             :     Word16 temp;
    2157        8183 :     Word16 frame_length = BASOP_Util_Divide3232_Scale( st->input_Fs, FRAMES_PER_SEC, &temp );
    2158        8183 :     frame_length = shr( frame_length, sub( 15, temp ) );
    2159             : 
    2160        8183 :     IF( GT_16( st->element_mode, EVS_MONO ) )
    2161             :     {
    2162        8183 :         InitTransientDetection_ivas_fx( frame_length, 0, st->hTranDet, 1 );
    2163             :     }
    2164             :     ELSE
    2165             :     {
    2166           0 :         InitTransientDetection_fx( extract_l( Mult_32_16( st->input_Fs, 0x0290 ) ),
    2167           0 :                                    NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ),
    2168           0 :                                    &st->transientDetection );
    2169             :     }
    2170             : 
    2171             :     /*-----------------------------------------------------------------*
    2172             :      * IVAS parameters
    2173             :      *-----------------------------------------------------------------*/
    2174             : 
    2175        8183 :     st->tdm_LRTD_flag = 0;
    2176        8183 :     move16();
    2177        8183 :     st->cng_sba_flag = 0;
    2178        8183 :     move16();
    2179        8183 :     st->bits_frame_channel = 0;
    2180        8183 :     move16();
    2181        8183 :     st->side_bits_frame_channel = 0;
    2182        8183 :     move16();
    2183        8183 :     st->Q_syn2 = 0;
    2184        8183 :     move16();
    2185        8183 :     st->Q_syn = 0;
    2186        8183 :     move16();
    2187        8183 :     set16_fx( st->Q_max, Q_MAX, L_Q_MEM );
    2188        8183 :     set16_fx( st->Q_max_16k, Q_MAX, L_Q_MEM );
    2189        8183 :     st->Q_old = 15;
    2190        8183 :     move16();
    2191        8183 :     st->old_wsp_max = 0;
    2192        8183 :     move16();
    2193        8183 :     st->old_wsp_shift = 0;
    2194        8183 :     move16();
    2195        8183 :     st->sharpFlag = 0;
    2196        8183 :     move16();
    2197             : 
    2198        8183 :     return error;
    2199             : }
    2200             : 
    2201             : 
    2202             : /*-----------------------------------------------------------------------*
    2203             :  * destroy_cldfb_encoder()
    2204             :  *
    2205             :  * Free memory which was allocated in init_encoder()
    2206             :  *-----------------------------------------------------------------------*/
    2207             : 
    2208        8252 : void destroy_cldfb_encoder_fx(
    2209             :     Encoder_State *st /* i/o: Encoder static variables structure   */
    2210             : )
    2211             : {
    2212        8252 :     deleteCldfb_ivas_fx( &st->cldfbSynTd );
    2213        8252 :     deleteCldfb_ivas_fx( &st->cldfbAnaEnc );
    2214             : 
    2215        8252 :     deleteFdCngEnc_fx( &st->hFdCngEnc );
    2216             : 
    2217        8252 :     return;
    2218             : }

Generated by: LCOV version 1.14