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

Generated by: LCOV version 1.14