
#ifndef	SolmonVoice_H
#define SolmonVoice_H
#include "Define_config.h"
/****************************************************************************************
*  HEADER FILE
****************************************************************************************/

/*   DiamondVoice Mode Config   */
#define	SAMSUNGECNS_TX_ON							(1<<0)
#define	SAMSUNGECNS_TX_OFF							0x0

#define	SAMSUNGDIAMONDVOICE_TX_ENABLE				1
#define	SAMSUNGDIAMONDVOICE_TX_DISABLE				0

#define SAMSUNGDIAMONDVOICESUPERWIDEBAND_TX			640
#define	SAMSUNGDIAMONDVOICEWIDEBAND_TX				320
#define	SAMSUNGDIAMONDVOICENARROWBAND_TX			160

#ifndef	_SolomonVoiceEngine_ECNS_Cfg_t_H
#define	_SolomonVoiceEngine_ECNS_Cfg_t_H

//FOR NB
#define         DVTX_M_FRM_LEN_NB            160
#define         DVTX_M_DELAY_NB              96 // max 96 for 256pointFFT
#define         DVTX_M_FFT_LEN_NB            256
#define         DVTX_M_FFT_HALFLEN_NB        128
#define         DVTX_M_NUM_CHAN_NB           28 //28
#define         DVTX_Nadf_NB                 80 // multiple number of 8, mumax 256 
#define         DVTX_Nadfshort_NB            32 // same to WB
#define         DVTX_M_Nfft_ceps_NB          64 // same to WB

//FOR WB
#define         DVTX_M_FRM_LEN_WB           320
#define         DVTX_M_DELAY_WB             192
#define         DVTX_M_FFT_LEN_WB           512
#define         DVTX_M_FFT_HALFLEN_WB       256
#define         DVTX_M_NUM_CHAN_WB          40 //40
#define         DVTX_Nadf_WB                80// multiple number of 8, max 256 
#define         DVTX_Nadfshort_WB           48
#define         DVTX_M_Nfft_ceps_WB         64

// for NB WB common
#define         DVTX_Nadf_MAX                256

#define DVTX_FIXED_ONE(qfrac)        ((unsigned int)      1 << (qfrac))

#define         DVTX_RxSigon_BuffLen_MAX        1920 // 320*6

#define         DVTX_RxSigOnset_FRAME_WB              6
#define         DVTX_RxSigOnset_FRAME_NB              12

#define         DVTX_DelayCompenRange_Less_WB     20

#define         DVTX_DelayCompenRange_Less_NB     10

/* 20180713 Moving Average for Outer Power */
#define		   MA_frame 64
#define		   MA_frame_s 8
// 20180914  ADF delay represented # of FrameSize 
#define Delay_numFrame 12	//160 * Delay_numFrame 

#define data_opt_notUsed  // not used data buffer
#define data_reduce

/* 20181015 check Data optimization (sqrt_root, table) */
#define sqrt_root
#define table_cal

// 20181114 NS upgrade in KHQ
#define KHQ_NS_update_1114


typedef struct {
	short OVERLAP[DVTX_M_FFT_LEN_WB - DVTX_M_FRM_LEN_WB];
	short OVERLAP_BWE[DVTX_M_FFT_LEN_WB - DVTX_M_FRM_LEN_WB];
	short OVERLAP_Outer[DVTX_M_FFT_LEN_WB - DVTX_M_FRM_LEN_WB];
	short OVERLAP_Inner[DVTX_M_FFT_LEN_WB - DVTX_M_FRM_LEN_WB];

	short DE_EMP;
	short DE_EMP_BWE;
	short DE_EMP_Outer;
	short DE_EMP_Inner;
	
	short WINDOW_OVERLAP[DVTX_M_DELAY_WB]; //<--nb wb common
	short WINDOW_OVERLAP_RX[DVTX_M_DELAY_WB];//<--nb wb common
	short WINDOW_OVERLAP_RX2[DVTX_M_DELAY_WB];//<--nb wb common

	short PRE_EMP;
	short PRE_EMP_RX;
	short PRE_EMP_RX2;

	short NORM_PRV;
	short NORM_PRV_RX;
	short NORM_PRV_RX2;

	int   L_SNRMTX[DVTX_M_NUM_CHAN_WB][4];

	int  L_Esqr_ravg_silence[DVTX_M_NUM_CHAN_WB];
	int  L_Dsqr_ravg[DVTX_M_NUM_CHAN_WB];
	int  L_Npsd[DVTX_M_NUM_CHAN_WB];
	int  L_Npsd_MMSE_ini[DVTX_M_NUM_CHAN_WB];
	int  L_Npsd_MMSE_TMP[DVTX_M_NUM_CHAN_WB];

	short P_H1_ravg[DVTX_M_NUM_CHAN_WB];
	int  L_SNRpost_prv[DVTX_M_NUM_CHAN_WB];
	int  L_SERpost_prv[DVTX_M_NUM_CHAN_WB];
	short Gmmse[DVTX_M_NUM_CHAN_WB];
	short Gres[DVTX_M_NUM_CHAN_WB];
	short spp[DVTX_M_NUM_CHAN_WB];

	int  L_SNRprio_avg[DVTX_M_NUM_CHAN_WB];
	int  L_SNR_by_Nmmse_ini_avg[DVTX_M_NUM_CHAN_WB];

	short beta_ceps[DVTX_M_Nfft_ceps_WB];
	short SNR_ini_ceps_avg[DVTX_M_Nfft_ceps_WB];
	short SNR_ini_ceps_Fixedavg[DVTX_M_Nfft_ceps_WB];

	short INDEX_SNRMTX;
	
	short hov_tx_noisefree_cnt;
	short noise_floor_offset;
	short gain_Npsd;

} ECNSStatus;


typedef struct{
	//AEC buff
	short ADF_IN[DVTX_Nadf_MAX];

    short *adf_var;
	short W[DVTX_Nadf_WB];
	short Waux[DVTX_Nadf_WB];

	short Buff_RxOnset_aecout[DVTX_RxSigon_BuffLen_MAX]; // max 4 frmae 320*4=1280, NB/WB common
	short Buff_RxOnset_txin[DVTX_RxSigon_BuffLen_MAX];

	short ADF_IN_short[DVTX_Nadfshort_WB];
	//NS buff
	int  *L_SNR_by_Nmmse_ini;
	int  *L_SNR_by_Nmmse_global;

	int  L_Esqr[DVTX_M_NUM_CHAN_WB];
	int  L_Esqr_q30[DVTX_M_NUM_CHAN_WB];

	int  *L_tmpvec;
	int  *L_tmpvec1;
	short *S_tmpvec;
	short *S_noise_floor;
	short *S_spp_ns;

	short S_Gns_final[DVTX_M_NUM_CHAN_WB];

	short *P_H1;
	short *P_H1_GbyL;
	int  *L_SNRpost;
	int  *L_SNRprio;
	int  *L_Dsqr_q30;
	int  *L_PSD_resiEcho;
	int  *L_SERpost;
	int  *L_SERprio;
	int  *L_EsqrNS;
	int  *L_EsqrNS_q30;
	int  *L_SNR_by_Nmmse_ini_cepsmooth;
	int  *L_SNR_by_Nmmse_ini_cepsmooth_fix;

	int      *L_DDBin;
	int      *L_EEBin;
	short    *Gpwrres;
	short 	 *W_fnlms_reression;
	short 	 *W_fnlms_reression2;
	short 	 *G_fnlms;

	int     *L_RRBin_step;

	int  *L_EsqrNS_forMixing;
	int  *L_EsqrNS_q30_forMixing;
	int  *L_EEBin_forMixing;

	short   *GmmseNFFT;
	int     *L_DDBin2;
	int     *L_RRBin;
	short    *S_tmpfft1;

	// new regression
	short    CntFrmRxVADon;
	short    DelayCompensation;

	short Pwr_RX_AECIN_dB;
	short Pwr_TX_AECIN_dB;
	short Pwr_TX_AECOUT_dB;
	short Pwr_TX_AECauxOUT_dB;
	short PwrDiff_Tx_Rx_Frm;
	short PwrDiff_AECinout_dB;

	int L_Pwr_tonality_ringband;
	int L_Pwr_tonality_otherband;

	short Count_DelayCompensation_function_exe;
	short Hangover_Cnt_NET_Onset;

	short *tmpvec_ceps;
	short *SNR_ini_ceps;
	short *tmp_beta_ceps;
	int Cnt_Samples_NLMSupdate;

	int HPFstateTx[5];
	int HPFstateRx[5];
	int LPFstateTx[5];
	int LPFstateRx[5];

}ECNSBufferStatus; //common for NB WB?


#define NFIR 20
#define LPCORDER 16
#define LPCORDER_NB 10

typedef struct {
	short *inner_x_win;

    int outer_gain_x_win;

	short *inner_x_win_256;

	short *inner_a_nbf;
	short *outer_a_wbf;

	short *inner_e_wb;

	int inner_g;
	int outer_g;

	long *reSampleBuf1;
	long *reSampleBuf2;
	long *reSampleBuf3;
	long *reSampleBuf4;

}BufStatus;


typedef struct {
	//NB WB common buffers
	short *E_tx_AEC;
	short  *E_tx_AECaux;

	short *RxFFTfrm_AEC;
	short *RxFFTfrm_clp_AEC;

	short *RxFrm_Delay_AEC;
	short *RxFrm_AECin_AEC;

	short   Flag_Tx_Clipping; // 
	short   Flag_RxVAD_AEC;/*Flag_RxVAD_AEC=1 when PwrRx>THD, 	ini_val = 0	*/
	short   Flag_TxSilence_AEC;// 1:sig activ 0:silence, ini=1, Npsd_silence est. 
	short   Flag_Tx_LoudSig; // 1:oud Tx. avoid cepstral smoothing
	short   Flag_SingleTalk;
	short   Flag_SingleNET;
	short   Flag_ringbakctone;
	short   Flag_IniRxSigOnset;
	short   Flag_Waux_update;
	short   Flag_Tx_silent_mode;
	short   Cnt_Cascade_tx_silent_frames;
	int   Pwr_1kHz_to_4kHz;
	int   Pwr_100Hz_to_1kHz;

	int   L_ADF_err_pwr;
	short Gain_echo_PSD_RES;
	short hangover_cnt_flag_RxVAD_First;

	short Qex_q;
	short Qxx_q;
	int  L_Qex;
	int  L_Qxx;
	short XECC;
	short Threshold_XECC;

	int  L_Perr;
	int  L_Perr_aux;

} AECADFStatus;

typedef struct {
	// f0 harmonic contour
    int  *L_tmp256; // tmporay vector
	int  *L_EEoo_07;
    int  *L_Eoo;// tmporay vector
	int  *L_EEii;
	int  *avg_ANC_sigPwr;

	short *tmpf0contour; // tmporay vector
	short *f0contourAvg;
	short *G_NS;// tmporay vector

	short Gmin_test;

	// data for inner 16kHz FFT
	short *speech_inner_WB;  // back up inner 16kHz input signal

	short *Inner_WINDOW_OVERLAP; // previsou overlapped inner signal
	short *data_buffer_inner_WB;  // FFT

	int *ANC_sigPwr;
	int  *ANC_sigPwr_inner;
	
	int *Enhenced_Signal;

	short *ANC_W_Filter;
	short Aeq[DVTX_M_FFT_HALFLEN_WB];

	int FrmPiLowBand;
	int FrmRioLowBand;
	short WND_ON;
	short VariableTHD_Ratio_LowBandPwr;
	short VariableTHD_THD_Pwr_inner;
	short PwrDiffOuterInner;
	short FrmDT;

	short FrmVAD;
	short BLK_NORM_inner_WB;
	short PRE_EMP_inner;
	short NORM_PRV_inner;

} f0_based_preNS;


typedef struct {
	short *Speech;
	short *Speech_rx;

	short *OutSignal;
	short *OutSignal_BWE;
	short *OutSignal_Outer;
	short *OutSignal_Inner;
	
	short *Temp;
	short TX_bandwidth;

	short Flag_mode_change;
	short Flag_mode_change_Count;

	ECNSStatus AECNS;
	AECADFStatus AECADF;
	ECNSBufferStatus ECNSbuff;
	
	f0_based_preNS preNS;

	//tunning parameter
	short PARA_ECNS_mode; // DO NOT CHANGE
	
	// ECNS basic parameter	
	short PARA_ns_level;
	short PARA_FLAG_FIRST_FRM;
	short PARA_FLAG_RxVAD_First_AEC;
	short PARA_call_mode_HS_HF_EAR;
	short PARA_Q_for_InSigGain;
	short PARA_Gain_TxSig;
	short PARA_Gain_RxSig;
	short PARA_Gain_TxSig_NS_IN;
	short PARA_Gain_TxSig_BWE_IN;
	short PARA_Gain_RxSig_NS_IN;
	short PARA_Gain_TxSig_NS_Out;
	short PARA_Gain_TxSig_BWE_Out;

	//Reserved parameter
	short 	PARA_reserved_1;
	short 	PARA_reserved_2;
	short 	PARA_reserved_3;
	short 	PARA_reserved_4;
	short 	PARA_reserved_5;
	short 	PARA_reserved_6;
	short 	PARA_reserved_7;
	short 	PARA_reserved_8;
	short 	PARA_reserved_9;
	short 	PARA_reserved_10;
	short 	PARA_reserved_11;
	short 	PARA_reserved_12;
	short 	PARA_reserved_13;
	short 	PARA_reserved_14;
	short 	PARA_reserved_15;
	short 	PARA_reserved_16;
	short 	PARA_reserved_17;
	short 	PARA_reserved_18;
	short 	PARA_reserved_19;
	short 	PARA_reserved_20;


	// Linear ADF tunning parameter
	short PARA_Nadfdelay;
	short PARA_Pwr_LoTHD_ADF_IN;
	short PARA_THD_Pwr_Rx_AEC_IN_dB;
	short PARA_THD_Pwr_Tx_dB;
	short PARA_THD_Pwr_Tx_Loud_dB;
	short PARA_THD_RxTx_Pwr_Difference;
	int  PARA_ADF_reference_step;
	int  PARA_ADF_Wvar_THD;
	//Reserved parameter
	short 	PARA_reserved_21;
	short 	PARA_reserved_22;
	short 	PARA_reserved_23;
	short 	PARA_reserved_24;
	short 	PARA_reserved_25;
	short 	PARA_reserved_26;
	short 	PARA_reserved_27;
	short 	PARA_reserved_28;
	short 	PARA_reserved_29;
	short 	PARA_reserved_30;
	short 	PARA_reserved_31;
	short 	PARA_reserved_32;
	short 	PARA_reserved_33;
	short 	PARA_reserved_34;
	short 	PARA_reserved_35;
	short 	PARA_reserved_36;
	short 	PARA_reserved_37;
	short 	PARA_reserved_38;
	short 	PARA_reserved_39;
	short 	PARA_reserved_40;



	// Freq. RES tunning parameter
	short PARA_Gain_EchoPSD_RES;
	short PARA_NoiseFloor_RES;
	short PARA_Gain_Echo_PSD[DVTX_M_NUM_CHAN_WB];//Reserved parameter
	short 	PARA_reserved_41;
	short 	PARA_reserved_42;
	short 	PARA_reserved_43;
	short 	PARA_reserved_44;
	short 	PARA_reserved_45;
	short 	PARA_reserved_46;
	short 	PARA_reserved_47;
	short 	PARA_reserved_48;
	short 	PARA_reserved_49;
	short 	PARA_reserved_50;
	short 	PARA_reserved_51;
	short 	PARA_reserved_52;
	short 	PARA_reserved_53;
	short 	PARA_reserved_54;
	short 	PARA_reserved_55;
	short 	PARA_reserved_56;
	short 	PARA_reserved_57;
	short 	PARA_reserved_58;
	short 	PARA_reserved_59;
	short 	PARA_reserved_60;



	// Freq. NS tunning parameter 		
	short PARA_HangOver_Cnt_NoiseFree;
	short PARA_Gain_EchoPSD_NS;
	short PARA_Slop_SNRiniAvg_for_beta;
	short PARA_xi_for_SPP_Table;
	short PARA_Npsd_Gain_MIN;
	short PARA_NoiseFloor_Offset_MAX;
	short PARA_slope_prioriSNR_for_NoiseFloor;
	short PARA_MIN_CHAN_PWR;
	short PARA_MIN_NOISE_PWR;
	short PARA_NoiseFloorOffset_0_250Hz_low;
	short PARA_NoiseFloorOffset_0_250Hz_high;
	short PARA_NoiseFloorOffset_250_4000Hz_low;
	short PARA_NoiseFloorOffset_250_4000Hz_high;
	short PARA_NoiseFloorOffset_4000_8000Hz_low;
	short PARA_NoiseFloorOffset_4000_8000Hz_high;
	int  PARA_THD_Pwr_Lo_1k_4k;
	int  PARA_THD_Lo_SNRiniAvg_for_beta;
	int  PARA_THD_Hi_SNRiniAvg_for_beta;
	int  PARA_THD_Lo_prioriSNR_for_NoiseFloor;
	int  PARA_THD_Hi_prioriSNR_for_NoiseFloor;
	short PARA_FixedXi[DVTX_M_NUM_CHAN_WB][3];
#if HIGHNOISE_MODE
	short org_xi_for_SPP_Table;
	short org_NoiseFloorOffset_250_4000Hz_low;
	short org_NoiseFloorOffset_250_4000Hz_high;
	short org_NoiseFloorOffset_4000_8000Hz_low;
	short org_NoiseFloorOffset_4000_8000Hz_high;
	short org_FixedXi[DVTX_M_NUM_CHAN_WB][3];
#endif
	//Reserved parameter
	short 	PARA_reserved_61;
	short 	PARA_reserved_62;
	short 	PARA_reserved_63;
	short 	PARA_reserved_64;
	short 	PARA_reserved_65;
	short 	PARA_reserved_66;
	short 	PARA_reserved_67;
	short 	PARA_reserved_68;
	short 	PARA_reserved_69;
	short 	PARA_reserved_70;
	short 	PARA_reserved_71;
	short 	PARA_reserved_72;
	short 	PARA_reserved_73;
	short 	PARA_reserved_74;
	short 	PARA_reserved_75;
	short 	PARA_reserved_76;
	short 	PARA_reserved_77;
	short 	PARA_reserved_78;
	short 	PARA_reserved_79;
	short 	PARA_reserved_80;
		
	BufStatus arr;

	short F0;

	//VAD for BWE Flag (20180515)
	short ECNS_out_VAD;
	short BWE_pwr_in_dB;
	
	short Noise_Diff;

} DVTX_ECNS_Cfg_t;

#endif


// tunning parameters
typedef struct {
	
	short InPARA_txMode;// DO NOT CHANGE
	//Basic parameter	
	short InPARA_ns_level;
	short InPARA_FLAG_FIRST_FRM;
	short InPARA_FLAG_RxVAD_First_AEC;
	short InPARA_call_mode_HS_HF_EAR;
	short InPARA_Q_for_InSigGain;
	short InPARA_Gain_TxSig;
	short InPARA_Gain_RxSig;
	short InPARA_Gain_TxSig_NS_IN;
	short InPARA_Gain_TxSig_BWE_IN;
	short InPARA_Gain_RxSig_NS_IN;
	short InPARA_Gain_TxSig_NS_Out;
	short InPARA_Gain_TxSig_BWE_Out;
	//Basic Reserved parameter
	short 	InPARA_reserved_1;
	short 	InPARA_reserved_2;
	short 	InPARA_reserved_3;
	short 	InPARA_reserved_4;
	short 	InPARA_reserved_5;
	short 	InPARA_reserved_6;
	short 	InPARA_reserved_7;
	short 	InPARA_reserved_8;
	short 	InPARA_reserved_9;
	short 	InPARA_reserved_10;
	short 	InPARA_reserved_11;
	short 	InPARA_reserved_12;
	short 	InPARA_reserved_13;
	short 	InPARA_reserved_14;
	short 	InPARA_reserved_15;
	short 	InPARA_reserved_16;
	short 	InPARA_reserved_17;
	short 	InPARA_reserved_18;
	short 	InPARA_reserved_19;
	short 	InPARA_reserved_20;
	
	// Linear ADF tunning parameter
	short InPARA_Nadfdelay;
	short InPARA_Pwr_LoTHD_ADF_IN;
	short InPARA_THD_Pwr_Rx_AEC_IN_dB;
	short InPARA_THD_Pwr_Tx_dB;
	short InPARA_THD_Pwr_Tx_Loud_dB;
	short InPARA_THD_RxTx_Pwr_Difference;
	short  InPARA_ADF_reference_step_lowbit; // int to two-short
	short  InPARA_ADF_reference_step_highbit;
	short  InPARA_ADF_Wvar_THD_lowbit;
	short  InPARA_ADF_Wvar_THD_highbit;
	// Linear ADF Reserved parameter
	short 	InPARA_reserved_21;
	short 	InPARA_reserved_22;
	short 	InPARA_reserved_23;
	short 	InPARA_reserved_24;
	short 	InPARA_reserved_25;
	short 	InPARA_reserved_26;
	short 	InPARA_reserved_27;
	short 	InPARA_reserved_28;
	short 	InPARA_reserved_29;
	short 	InPARA_reserved_30;
	short 	InPARA_reserved_31;
	short 	InPARA_reserved_32;
	short 	InPARA_reserved_33;
	short 	InPARA_reserved_34;
	short 	InPARA_reserved_35;
	short 	InPARA_reserved_36;
	short 	InPARA_reserved_37;
	short 	InPARA_reserved_38;
	short 	InPARA_reserved_39;
	short 	InPARA_reserved_40;



	// Freq. RES tunning parameter
	short InPARA_Gain_EchoPSD_RES;
	short InPARA_NoiseFloor_RES;
	short InPARA_Gain_Echo_PSD[DVTX_M_NUM_CHAN_WB];
	//Freq. RES Reserved parameter
	short 	InPARA_reserved_41;
	short 	InPARA_reserved_42;
	short 	InPARA_reserved_43;
	short 	InPARA_reserved_44;
	short 	InPARA_reserved_45;
	short 	InPARA_reserved_46;
	short 	InPARA_reserved_47;
	short 	InPARA_reserved_48;
	short 	InPARA_reserved_49;
	short 	InPARA_reserved_50;
	short 	InPARA_reserved_51;
	short 	InPARA_reserved_52;
	short 	InPARA_reserved_53;
	short 	InPARA_reserved_54;
	short 	InPARA_reserved_55;
	short 	InPARA_reserved_56;
	short 	InPARA_reserved_57;
	short 	InPARA_reserved_58;
	short 	InPARA_reserved_59;
	short 	InPARA_reserved_60;



	// Freq. NS tunning parameter 		
	short InPARA_HangOver_Cnt_NoiseFree;
	short InPARA_Gain_EchoPSD_NS;
	//short InPARA_Slop_SNRiniAvg_for_beta;
	short InPARA_xi_for_SPP_Table;
	short InPARA_Npsd_Gain_MIN;
	short InPARA_NoiseFloor_Offset_MAX;
	//short InPARA_slope_prioriSNR_for_NoiseFloor;
	short InPARA_MIN_CHAN_PWR;
	short InPARA_MIN_NOISE_PWR;
	short InPARA_NoiseFloorOffset_0_250Hz_low;
	short InPARA_NoiseFloorOffset_0_250Hz_high;
	short InPARA_NoiseFloorOffset_250_4000Hz_low;
	short InPARA_NoiseFloorOffset_250_4000Hz_high;
	short InPARA_NoiseFloorOffset_4000_8000Hz_low;
	short InPARA_NoiseFloorOffset_4000_8000Hz_high;
	short  InPARA_THD_Pwr_Lo_1k_4k_lowbit;
	short  InPARA_THD_Pwr_Lo_1k_4k_highbit;
	short InPARA_Slop_SNRiniAvg_for_beta;
	short  InPARA_THD_Lo_SNRiniAvg_for_beta_lowbit;
	short  InPARA_THD_Lo_SNRiniAvg_for_beta_highbit;
	short  InPARA_THD_Hi_SNRiniAvg_for_beta_lowbit;
	short  InPARA_THD_Hi_SNRiniAvg_for_beta_highbit;
	short InPARA_slope_prioriSNR_for_NoiseFloor;
	short  InPARA_THD_Lo_prioriSNR_for_NoiseFloor_lowbit;
	short  InPARA_THD_Lo_prioriSNR_for_NoiseFloor_highbit;
	short  InPARA_THD_Hi_prioriSNR_for_NoiseFloor_lowbit;
	short  InPARA_THD_Hi_prioriSNR_for_NoiseFloor_highbit;
	short InPARA_FixedXi_iniSNR[DVTX_M_NUM_CHAN_WB];
	short InPARA_FixedXi_srtSNR[DVTX_M_NUM_CHAN_WB];
	short InPARA_FixedXi_lotSNR[DVTX_M_NUM_CHAN_WB];
	//Freq. NS Reserved parameter
	short 	InPARA_reserved_61;
	short 	InPARA_reserved_62;
	short 	InPARA_reserved_63;
	short 	InPARA_reserved_64;
	short 	InPARA_reserved_65;
	short 	InPARA_reserved_66;
	short 	InPARA_reserved_67;
	short 	InPARA_reserved_68;
	short 	InPARA_reserved_69;
	short 	InPARA_reserved_70;
	short 	InPARA_reserved_71;
	short 	InPARA_reserved_72;
	short 	InPARA_reserved_73;
	short 	InPARA_reserved_74;
	short 	InPARA_reserved_75;
	short 	InPARA_reserved_76;
	short 	InPARA_reserved_77;
	short 	InPARA_reserved_78;
	short 	InPARA_reserved_79;
	short 	InPARA_reserved_80;
}SamsungSolomonVoiceParam;



typedef struct {
	short *Speech_Inner;
	short *Speech_Outer;
	short *Speech_rx;
	short *OutSignal;

	short *dbg_OutSignal_Inner_NB;	

	short Mode;
	short BandWidth;

	short *Speech_rx_backup;
		
	DVTX_ECNS_Cfg_t DVTX_ECNS_vars;
	DVTX_ECNS_Cfg_t DVTX_ECNS_vars_Outer;
	
} SamsungSolomonVoiceEngine_Handle_t;


typedef struct {
	short	State;
	short	State_prev;
	short	State_Wind;
	short	State_Car;
	short	State_Noise2Clean;
	short	UnFit_State;
	short	UnFit_NS_ON;
} MixingStruct;

/******************************************************************************
*  FUNCTION PROTOTYPES
*****************************************************************************/
extern void SamsungSolomonVoiceWEngineInit(SamsungSolomonVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars_Tx);

extern void SamsungSolomonVoiceWEngineExe(SamsungSolomonVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars_Tx, SamsungSolomonVoiceParam *SamsungDiamondParam_varsTx, short *speech, short *speech_rx, short *output, short *Speech_Outer, short *OutSignal_Outer, short *OutSignal_Outer_BWE, short *OutSignal_Outer_Outer, short *OutSignal_Outer_Inner);

extern void SamsungSolomonVoiceWEngineConfig(SamsungSolomonVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars_Tx, SamsungSolomonVoiceParam *DiamondVoice_DV_TX_Config, SamsungSolomonVoiceParam *DiamondVoice_DV_TX_Config_Outer, short *speech, short *speech_rx, short *output, short *Speech_Outer, short *OutSignal_Outer, short *OutSignal_Outer_BWE, short *OutSignal_Outer_Outer, short *OutSignal_Outer_Inner);

#endif

