
#ifndef	DiamondVoice_H
#define DiamondVoice_H

/****************************************************************************************
*  HEADER FILE
****************************************************************************************/
#include "samsungSwingFree.h"
#include "samsungVB.h"
#include "samsungASF.h"
#include "samsungDyVE.h"
#include "samsungCNG.h"
#include "samsungDHA.h"
#include "samsungHOWL.h"

/****************************************************************************************
*  HEADER FILE
****************************************************************************************/
/*	 DiamondVoice Mode Config	*/
#define	SAMSUNGSF_ON							(1<<0)
#define	SAMSUNGVB_ON							(1<<1)
#define	SAMSUNGASF_ON							(1<<2)
#define	SAMSUNGDYVERCV_ON						(1<<3)
#define	SAMSUNGDYVERCV_TEST						(1<<4)
#define	SAMSUNGCNG_ON							(1<<5)
#define	SAMSUNGDYVESPK_ON						(1<<6)
#define	SAMSUNGDYVESPK_TEST						(1<<7)
#define	SAMSUNGBIGDATARCV_ON   					(1<<8)
#define	SAMSUNGBIGDATASPK_ON					(1<<9)
#define	SAMSUNGHOWL_ON					       (1<<10)

#define	SAMSUNGSF_OFF							0x0
#define	SAMSUNGVB_OFF							0x0
#define	SAMSUNGASF_OFF							0x0
#define	SAMSUNGDYVERCV_OFF						0x0
#define	SAMSUNGCNG_OFF							0x0
#define	SAMSUNGDYVESPK_OFF						0x0
#define	SAMSUNGBIGDATARCV_OFF					0x0
#define	SAMSUNGBIGDATASPK_OFF					0x0
#define SAMSUNGHOWL_OFF                         0x0


#define	SAMSUNGDIAMONDVOICESUPERWIDEBAND		640
#define	SAMSUNGDIAMONDVOICEWIDEBAND				320
#define	SAMSUNGDIAMONDVOICENARROWBAND			160

#define	SAMSUNGSFADDMODE_NBEQON					(1<<0)
#define	SAMSUNGSFADDMODE_DUALSPKSHOCKON			(1<<1)


#define	SAMSUNGSFADDMODE_OFF					0
#define	SAMSUNGSFADDMODE_NBEQOFF				0
#define	SAMSUNGSFADDMODE_DUALSPKSHOCKOFF		0


#define	SAMSUNGDHAMODE_ON						1
#define	SAMSUNGDHAMODE_OFF						0

#define	SAMSUNGDIAMONDVOICE_ENABLE				1
#define	SAMSUNGDIAMONDVOICE_DISABLE				0

#define	SAMSUNGDIAMONDVOICE_DUALSPK_ENABLE		1
#define	SAMSUNGDIAMONDVOICE_DUALSPK_DISABLE		0

#if defined(__arm__)
#define __DV_GNU_ARM
#define __DV_ARM_REL
#endif

#if defined(__DV_C)    //for Window(Visual C/C++ cl.exe) compiler
    #define ALIGN32  __declspec(align(8))            //prefix_ of structure
    #define ALIGN32SFX                                //suffix of structure
#elif defined(__DV_WIN_ARM)        //for ADS compiler
    #define ALIGN32   // __align(32)                        //prefix of structure
    #define ALIGN32SFX                                //suffix of structure
#elif defined(__DV_GNU_ARM)    //for Unix(GNU g++) compiler
    #define ALIGN32                                    //prefix of structure
    #define ALIGN32SFX __attribute__ ((aligned(8)))  //suffix of structure
#else
    #define ALIGN32                                    //prefix of structure
    #define ALIGN32SFX   //suffix of structure
#endif





#if	!defined(_DiamondVoiceEngine_HOWL_Cfg_t_H)
#define	_DiamondVoiceEngine_HOWL_Cfg_t_H

#define HOWL_LPC_ORDER		10
#define HOWL_NUM_CH_WB		14
#define HOWL_Half_Nfft_WB		128

typedef struct {
	long  Xpsd[128];

	short CHMinMaxRto[14];
	short HowlHangoverCnt[14];
	short CHHowlFlag[14];
	short CHHowlThreshold[14];

	short FreqHowlFlag[128];
	short FreqGain[128];

	short FirstFrmFlag;

	short HowlThrLowBand;
	short HowlThrHighBand;

	short FrmBuff[256];
	long  Xs[128];
	long  Xsavg[128];
	short TempFreqGain[128];
	short TempFreqGainAvg[128];

	short Gain_Band_low_Howl;
	short Gain_Band_high_Howl;
	short Gain_low_Howl;
	short Gain_high_Howl;

	short last_normb_shift;
	long L_EEBin[128];
	short S_DRCGain[128];
	short window_overlap[96];
	short overlap[256 - 160];
	short pre_emp_mem;
	short de_emp_mem;

	short HOWL_oldgain;
	short HOWL_count;

	short HOWL_gainGlobal;
	short HOWL_gainNomIndex;
	short HOWL_gainCur;
	short HOWL_gainNorm;

	short HOWL_lpc[HOWL_LPC_ORDER + 1];
	short HOWL_lsp[HOWL_LPC_ORDER];
	short HOWL_old_lsp[HOWL_LPC_ORDER];
	short HOWL_lsf[HOWL_LPC_ORDER];
	short HOWL_lsf_delta[HOWL_LPC_ORDER];
	short HOWL_lsf_bin[HOWL_LPC_ORDER];
	float HOWL_lsf_freq[HOWL_LPC_ORDER];
	short HOWL_lsf_band[HOWL_NUM_CH_WB];
	short HOWL_lsf_pband[HOWL_NUM_CH_WB];
	short HOWL_lsf_E[HOWL_Half_Nfft_WB];
	short HOWL_lsf_HOCnt[HOWL_NUM_CH_WB];
	short HOWL_THD_width;
	short HOWL_THD_power;
	short HOWL_howl_cnt;
	short HOWL_reserved;
} HOWL_STFT_type;

typedef struct {
	short monitor1;
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5[14];
} HOWLState_type;

typedef struct {
	short *Speech;
	short *OutSignal;
	short HOWL_mode;
	short HOWL_bandwidth;
	HOWL_STFT_type howl_STFTOLA;
	HOWLState_type HOWLMonitor_v;
} DiamondVoiceEngine_HOWL_Cfg_t;

#endif //_DiamondVoiceEngine_HOWL_Cfg_t_H







#if	!defined(_DiamondVoiceEngine_ASF_Cfg_t_H)
#define	_DiamondVoiceEngine_ASF_Cfg_t_H

#define	ASF_FRAME_LENGTH_SWB					640
#define	ASF_FRAME_LENGTH_WB						320
#define	ASF_FRAME_LENGTH_NB						160

typedef struct{
	short monitor1;			// ASF Filter Mode
	short monitor2;			// ASF Limit Level
	short monitor3;
	short monitor4;
	short monitor5;
	short monitor6;	
} ASFState_type;

typedef struct {
	short latt;			// level attack
	short lrel;			// level release
	short gat;			// gain attack time
	short grt;			// gain release time	
	short xd_level;		// fast rms value
	short G_old;			// past Gain
	short xd_rms_level;	// rms compressor fast rms value
	short G_rms_old;		// rms compressor past Gain
	short bypass_cnt;
	short reserved01;	// for align
} ASFStatus;

typedef struct {
	short THDCOM;
	short SLOPCOM;
	short GAINCOM;
	short RMSTHDCOM;
	short RMSSLOPCOM;
	short RMSGAINCOM;
} ASFTablestruct;

typedef struct {
	unsigned short tap0;
	unsigned short tap1;
	unsigned short tap2;
	unsigned short tap3;
	unsigned short tap4;
	unsigned short tap5;
	short high_x_d1;
	short high_x_d2;
	short high_y_d1;
	short high_y_d2;
	long err_h;
} ASFIIRCoeffstruct;

typedef struct{
	short *Speech;
	short *OutSignal;
	short ASF_mode;
	short ASF_bandwidth;
	short ASF_highpass_level;
	short ASF_limit_level;
	ASFStatus comp_api;
	ASFTablestruct comp_tab;
	ASFIIRCoeffstruct iir_high_coeff;
	short SamsungASF_Temp[ASF_FRAME_LENGTH_SWB];
	ASFState_type ASFMonitor_v;	
	short ASF_Gain_Mix[ASF_FRAME_LENGTH_SWB/2];
} DiamondVoiceEngine_ASF_Cfg_t;
#endif //_DiamondVoiceEngine_ASF_Cfg_t_H

#ifndef	_DiamondVoiceEngine_CNG_Cfg_t_H
#define	_DiamondVoiceEngine_CNG_Cfg_t_H

typedef struct{
	short monitor1;				// CNG Gain
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5;
	short monitor6;	
} CNGState_type;

typedef struct{
	short *Speech;
	short *OutSignal;
	short CNG_mode;
	short CNG_bandwidth;
	short CNG_gain_offset;
	short CNG_gain;
	short CNG_sample;
	short CNG_seed;
	short CNG_pre_value;
	CNGState_type CNGMonitor_v;

	/*DualSPK*/
	short *Speech_DualSPK;
	short *OutSignal_DualSPK;
	short CNG_mode_ds;
	short CNG_gain_offset_ds;
	short CNG_gain_ds;
	short CNG_sample_ds;
	short CNG_seed_ds;
	short CNG_pre_value_ds;
} DiamondVoiceEngine_CNG_Cfg_t;
#endif //_DiamondVoiceEngine_CNG_Cfg_t_H

#ifndef _DiamondVoiceEngine_SF_Cfg_t_H_
#define _DiamondVoiceEngine_SF_Cfg_t_H_

#define	SF_FRAME_LENGTH_SWB					640
#define	SF_FRAME_LENGTH_WB					320
#define	SF_FRAME_LENGTH_NB					160

#define VOLUME_LEVELINC_NB					204
#define VOLUME_LEVELINC_WB					102
#define VOLUME_LEVELINC_SWB					51

#define	SF_FIRFILTERNUM						63
#define SF_FIRFILTERNUM_QF					33


#define	SF_VAD_SWB							320
#define	SF_VAD_WB							160
#define	SF_VAD_NB							80

#define	SF_DENOM_NB							204
#define	SF_DENOM_WB							102
#define	SF_DENOM_SWB						51

#define	SF_XD_LEVEL_V						0		
#define	SF_G_OLD_V							0
#define	SF_FIRFILTER_CENTER					31
#define	SF_FIRFILTER_QF_CENTER				17
#define	SF_FIRFILTER_BYPASS					16384

#define	SAMSUNGSWINGFREE_ENABLE				1
#define	SAMSUNGSWINGFREE_DISABLE			0

#define	SFAGCCMOP5DB						640

#define	N_poly								256						// (N_poly)-subband decomposition
#define	N_poly2								(N_poly*2)				// size of the window
#define	N_Band								5						// Number of processing band of DHA

#define	MBDRC_NUM							5

typedef struct{
	short monitor1;
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5;
	short monitor6;
	short monitor7;
	short monitor8;
	short monitor9;
	short monitor10;
	short monitor11;
	short monitor12;
	short monitor13;
	short monitor14;	
} DHAState_type;

typedef struct{
	short		frameLength, polySize, polySizex2, hopSize, numBands;
	short		attFactor, relFactor;
	short		oddEvenFlag;

	short		hPoly[512], xCos[128], xSin[128], wr[64], wi[64];
	short		bandIndex[7][4], LCF[7][2];

	short		buff[768], bandGain[7], binGain[256];
	long		env[256], bandPower[7];
	long		x_l[512], X_l[512], output_l[256], y_l[512], yp_l[256];

	short		OnOff, dir, Hearing[7][3];
} struct_WDRC;

typedef struct {
	short DHA_mode;
	short dhaHearingLevel[12];
	int dhaChFlag;
	struct_WDRC structWDRC;
	DHAState_type DHAMonitor_v;
} DHAstruct;

typedef struct{
	short monitor1;			// Rx Volume
	short monitor2; 		// pre_amp gain 		
	short monitor3; 		// post_amp gain
	short monitor4; 		// compressor threshld
	short monitor5; 		// compressor slope
	short monitor6; 		// expansion threshold
	short monitor7; 		// expansion slope
	short monitor8; 		// eq mode
	short monitor9; 		// SF_FIRCoef[0]
	short monitor10;		// SF_FIRCoef[1]
	short monitor11;		// SF_FIRCoef[30]
	short monitor12;		// SF_FIRCoef[31]	
} SFState_type;

typedef struct {
	short latt;			// level attack
	short lrlt;			// level release
	short gat;			// gain attack time
	short grt;			// gain release time	
	short thd1;
	short thd2;
	short slop1;
	short slop2;
	short maxboost1;
	short maxboost2;
	short xd_level;		// fast rms value
	short G_old;		// past Gain
} SFStatus;

typedef struct {
	int  band_coeff[5];
	int	band_state[5];
} SFHPFIIRstruct;

typedef struct {
	short latt;			// level attack
	short lrel;			// level release
	short xd_level;		// fast rms value
	short G_old;			// past Gain
	short THDCOM;
	short SLOPCOM;
	short GAINCOM;
	short GAINCOM_DEC;
} SFPBooststruct;

typedef struct{
	short vad[2];
	short rms;
	short rms_ex;
	short silence;
	short rms_var;
	short vad_out;
	short long_eng;
	short var;
	short tap0;
	short tap1;
	short tap2;
	short tap3;
	short tap4;
	short tap5;
	short high_x_d1;
	short high_x_d2;
	short high_y_d1;
	short high_y_d2;
	long err_h;
	long count;
	short Front;
	short Delay;
	short Queue_sil[11];
	short Queue_rms[11];
	short big_count;
	short reserved;
} Bigdatastruct;

typedef struct{
	short  coeff[5];
	short  state[5];
	long   err;
} DCRemstruct;

typedef struct {
	short band_num;
	short limit_thd[MBDRC_NUM];
	short limit_slp[MBDRC_NUM];
	short boostgain[MBDRC_NUM];
	short boostgain_dec[MBDRC_NUM];
	short gain_band[MBDRC_NUM];
	short band_bound[MBDRC_NUM][2];
	short band_div[MBDRC_NUM][2];
	short pre_ener[MBDRC_NUM];
	long  ener_band[MBDRC_NUM];
} SFMBDRCStruct;

typedef struct{
	short rms_bot;
	short rms_top;
	short rms_bot_ex;
	short rms_top_ex;
	short bot_dn_ex;
	short rms_botlf_ex;
	short rms_botbf_ex;
	short ho_cnt1;
	short ho_cnt2;
	short cnt_max;
	short count;
	DCRemstruct dc_bot;
	DCRemstruct dc_top;
	DCRemstruct lf_bot;
	DCRemstruct bf_bot;
	short MBD_out;
	short rms_bot_ori_ex;
	short rms_top_ori_ex;
} BigdataMBDstruct;

typedef struct{
	short *Speech;
	short *OutSignal;
	short Data_buffer[512];
	short SF_mode;
	short SF_bandwidth;
	short SF_prevol;
	short SF_postvol;
	short SF_vol;
	short SF_oldgain;
	SFStatus ng_api;
	SFStatus comp_api;
	short SF_FIRCoefBuff[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM - 1];
	short SF_FIRCoef[SF_FIRFILTERNUM+1];
	short SF_FIRCoef_change[SF_FIRFILTERNUM+1];
	short SF_FIRCoefCur[SF_FIRFILTERNUM+1];
	short SF_EQCoefBuff[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM - 1];
	short SF_EQCoef[SF_FIRFILTERNUM];
	short SF_NBEQMode;
	short SF_NBEQCoefBuff[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM_QF - 1];
	short SF_NBEQCoef[SF_FIRFILTERNUM_QF];
	short SF_Init_Vol;
	
	short SF_Cfg_Buffer[SF_FRAME_LENGTH_SWB];
	short SF_step_gain[11+1];
	short SF_ns_level;
	short SF_HPF_level;
	SFHPFIIRstruct SF_hpf;
	short SF_BoosterGain;
	short SF_PeakLimiter;
	short SF_PeakLimiterLPF;
	short SF_LPFCoefBuff[SF_FRAME_LENGTH_SWB + 13 - 1];
	short SF_LPFCoef[13];
	SFHPFIIRstruct SF_lpf;

	SFPBooststruct SF_PBoost;
	short SF_delay_x[SF_FRAME_LENGTH_SWB + 240];
	short SF_Idx;
	short SF_lah;
    
	short SF_FD_delay_x[SF_FRAME_LENGTH_SWB + 240];
	short SF_FD_Idx;
	short SF_FDO_max;
	short SF_FDO_delta;
	short SF_FDI_mute;

	short SF_AGCGain_Mix[SF_FRAME_LENGTH_SWB / 2];
    
	long SF_Temp1[319];				// 292
	long SF_Temp2[541];				// 475
	long SF_Temp3[818];				// 815 (8/2)
	SFState_type SFMonitor_v;

	DHAstruct DHA_vars;

	/*DualSPK*/
	short *Speech_DualSPK;
	short *OutSignal_DualSPK;
	short Data_buffer_ds[512];
	short SF_mode_ds;
	short SF_prevol_ds;
	short SF_postvol_ds;
	short SF_vol_ds;

	short SF_FIRCoefBuff_ds[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM - 1];
	short SF_FIRCoef_ds[SF_FIRFILTERNUM+1];
	short SF_FIRCoef_change_ds[SF_FIRFILTERNUM+1];
	short SF_FIRCoefCur_ds[SF_FIRFILTERNUM+1];
	short SF_EQCoefBuff_ds[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM - 1];
	short SF_EQCoef_ds[SF_FIRFILTERNUM + 1];
	short SF_NBEQCoefBuff_ds[SF_FRAME_LENGTH_SWB + SF_FIRFILTERNUM_QF - 1];
	short SF_Cfg_Buffer_ds[SF_FRAME_LENGTH_SWB];
	short SF_step_gain_ds[11];
	short SF_oldgain_ds;	
	short SF_Init_Vol_ds;
	short SF_HPF_level_ds;
	SFHPFIIRstruct SF_hpf_ds;
	short SF_PeakLimiter_ds;
	short SF_PeakLimiterLPF_ds;
	short SF_LPFCoefBuff_ds[SF_FRAME_LENGTH_SWB + 13 - 1];
	short SF_LPFCoef_ds[13+1];
	SFHPFIIRstruct SF_lpf_ds;
	SFPBooststruct SF_PBoost_ds;
	short SF_delay_x_ds[SF_FRAME_LENGTH_SWB + 240];
	short SF_Idx_ds;
	short SF_lah_ds;
	short SF_FD_delay_x_ds[SF_FRAME_LENGTH_SWB + 240];
	short SF_FD_Idx_ds;
	short SF_FDO_max_ds;
	short SF_FDO_delta_ds;
	short SF_FDI_mute_ds;

	long SF_Temp1_ds[319];				// 292
	long SF_Temp2_ds[541];				// 475
	long SF_Temp3_ds[818];				// 815 (8/2)
	
	SFMBDRCStruct mbdrc;
	short normb;

	Bigdatastruct Bigdata_rx_vars;

	SFStatus comp_api_ds;
} DiamondVoiceEngine_SF_Cfg_t;
#endif //_DiamondVoiceEngine_SF_Cfg_t_H_




#ifndef _DiamondVoiceEngine_VB_Cfg_t_H_
#define _DiamondVoiceEngine_VB_Cfg_t_H_

#define VB_FRAME_LENGTH_SWB					640
#define VB_FRAME_LENGTH_WB					320
#define VB_FRAME_LENGTH_NB					160

#define VB_SUB_LENGTH_SWB					320
#define VB_SUB_LENGTH_WB					160
#define VB_SUB_LENGTH_NB					80

#define VB_FIRFILTERNUM						13

#define VB_DENOM_NB							204
#define VB_DENOM_WB							102
#define VB_DENOM_SWB						51

#define NOISEBITS							4
#define QCOEFFLARGE							30
#define QERMASK								(((INT64)1<<32)-1)

#define C10LOG2								0x6054		// Q16.13(3.0102999)
#define Gain20_2Q15							1638

#define MAX_VAL								32767
#define MIN_VAL								-32768

#define	VB_XD_LEVEL_V						0		
#define	VB_G_OLD_V							0

#define VB_MBDRC_NUM						5

#define VB_DELAY_NB							48	// 128 - 80
#define VB_DELAY_WB							96	// 256 - 160
#define VB_DELAY_SWB						192	// 512 - 320

#define VB_FFT_NB							128
#define VB_FFT_WB							256
#define VB_FFT_SWB							512

#define	VB_OLA_SWB							320
#define	VB_OLA_WB							160
#define	VB_OLA_NB							80

#define VB_NYQ_NB							4000
#define VB_NYQ_WB							8000
#define VB_NYQ_SWB							16000


typedef struct{
	short monitor1;
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5;
	short monitor6;
	short monitor7;
	short monitor8;
	short monitor9;
	short monitor10;
} VBState_type;

typedef struct {
	int	band_coeff[5];
	int	band_state[5];
} VBIIRstruct;


typedef struct {
	short latt;			// level attack
	short lrel;			// level release
	short xd_level;		// fast rms value
	short G_old;			// past Gain
	short THDCOM;
	short SLOPCOM;
	short GAINCOM;
	short GAINCOM_DEC;
	short max_sample;
	short sub_num;
	short sm[32];
} VBPBooststruct;


typedef struct {
	short latt;			// level attack
	short lrlt;			// level release
	short gat;			// gain attack time
	short grt;			// gain release time	
	short thd1;
	short thd2;
	short slop1;
	short slop2;
	short maxboost1;
	short maxboost2;
	short xd_level;		// fast rms value
	short G_old;		// past Gain
} VBRCompstruct;



typedef struct {
	short band_num;
	short limit_thd[VB_MBDRC_NUM];
	short limit_slp[VB_MBDRC_NUM];
	short boostgain[VB_MBDRC_NUM];
	short boostgain_dec[VB_MBDRC_NUM];
	short gain_band[VB_MBDRC_NUM];
	short band_bound[VB_MBDRC_NUM][2];
	short band_div[VB_MBDRC_NUM][2];
	short pre_ener[VB_MBDRC_NUM];
	long  ener_band[VB_MBDRC_NUM];
} MBDRCStruct;


typedef struct{
	short window_nb[VB_DELAY_NB + VB_SUB_LENGTH_NB];
	short overlap_nb[VB_FFT_NB - VB_SUB_LENGTH_NB];
	short window_overlap_nb[VB_DELAY_NB];
	short last_normb_shift_nb;
	short pre_emp_mem_nb;
	short de_emp_mem_nb;
	short normb_shift;
	short norm_shift;
	short bandwidth;
} VBNBTFstruct;

typedef struct{
	short window_wb[VB_DELAY_WB + VB_SUB_LENGTH_WB];
	short overlap_wb[VB_FFT_WB - VB_SUB_LENGTH_WB];
	short window_overlap_wb[VB_DELAY_WB];
	short last_normb_shift_wb;
	short pre_emp_mem_wb;
	short de_emp_mem_wb;
	short normb_shift;
	short norm_shift;
	short bandwidth;
} VBWBTFstruct;

typedef struct{
	short window_swb[VB_DELAY_SWB + VB_SUB_LENGTH_SWB];
	short overlap_swb[VB_FFT_SWB - VB_SUB_LENGTH_SWB];
	short window_overlap_swb[VB_DELAY_SWB];
	short last_normb_shift_swb;
	short pre_emp_mem_swb;
	short de_emp_mem_swb;
	short normb_shift;
	short norm_shift;
	short bandwidth;
} VBSWBTFstruct;

typedef struct{
	short *Speech;
	short *OutSignal;
	short Data_buffer[512];
	short VB_mode;
	short VB_bandwidth;
	short VB_hpfcutoff;				// monitoring
	short VB_Peak_gain;				// monitoring
	short VB_Peak_limt;				// monitoring
	short VB_band_gain[VB_MBDRC_NUM];	// monitoring
	short VB_band_limt[VB_MBDRC_NUM];	// monitoring
	short VB_RMS_limit;				// monitoring
	short VB_CompGain_Mix[320];
	short VB_delay_x[VB_FRAME_LENGTH_SWB + 240];
	short VB_Idx;
	short VB_lah;
	VBIIRstruct hpf;
	VBRCompstruct RMSComp;
	VBPBooststruct VB_PBoost;
	VBState_type VBMonitor_v;
	VBNBTFstruct tf_nb;
	VBWBTFstruct tf_wb;
	VBSWBTFstruct tf_swb;
	MBDRCStruct mbdrc;

	/*DualSPK*/
	short *Speech_DualSPK;
	short *OutSignal_DualSPK;
	short Data_buffer_ds[512];
	short VB_mode_ds;
	short VB_bandwidth_ds;
	short VB_hpfcutoff_ds;				// monitoring
	short VB_Peak_gain_ds;				// monitoring
	short VB_Peak_limt_ds;				// monitoring
	short VB_band_gain_ds[VB_MBDRC_NUM];			// monitoring
	short VB_band_limt_ds[VB_MBDRC_NUM];			// monitoring
	short VB_RMS_limit_ds;				// monitoring
	short VB_CompGain_Mix_ds[320];
	short VB_delay_x_ds[VB_FRAME_LENGTH_SWB + 240];
	short VB_Idx_ds;
	short VB_lah_ds;
	VBIIRstruct hpf_ds;
	VBRCompstruct RMSComp_ds;
	VBPBooststruct VB_PBoost_ds;
	VBState_type VBMonitor_ds_v;
	VBNBTFstruct tf_nb_ds;
	VBWBTFstruct tf_wb_ds;
	VBSWBTFstruct tf_swb_ds;
	MBDRCStruct mbdrc_ds;

	short VB_BP_x[VB_FRAME_LENGTH_SWB + 240];
	short VB_BP_Idx;
	short VB_BP_lah;

} DiamondVoiceEngine_VB_Cfg_t;
#endif //_DiamondVoiceEngine_VB_Cfg_t_H_

#ifndef _DiamondVoiceEngine_DyVE_Cfg_t_H_
#define _DiamondVoiceEngine_DyVE_Cfg_t_H_

#define DyVE_FRAME_LENGTH_SWB					640
#define DyVE_FRAME_LENGTH_WB					320
#define DyVE_FRAME_LENGTH_NB					160

#define DyVE_FIRFILTERNUM					13
#define	DyVE_FIRFILTER_CENTER				7
#define	DyVE_FIRFILTER_BYPASS				16384

#define	FRM_LEN_NC								80
#define	DELAY_NC								24
#define	FFT_LEN_NC								128

#define	FRE_FRAME_LEN							FFT_LEN_NC/2
#define	CNN_CORE_NUM							4
#define	CNN_CORE_W								3
#define	CNN_CORE_H								16
#define	CNN_WEIGHT_NUM							CNN_CORE_NUM*CNN_CORE_W*CNN_CORE_H
#define	CNN_SHILF_RANGE_LEN						7
#define	CNN_OUT_NUM								CNN_CORE_NUM*CNN_SHILF_RANGE_LEN
#define	RNN_NODE_NUM							16
#define	RNN_W_NUM								(RNN_NODE_NUM+CNN_OUT_NUM)*RNN_NODE_NUM
#define	NN_OUT_NUM								12
#define	FCN_W_NUM								RNN_NODE_NUM*NN_OUT_NUM
#define FCN_SM_FACTOR							1638//327//819//1638//327 // 0.01

#define TIME_1SEC								50
#define TIME_2SEC								100
#define TIME_3SEC								150
#define TIME_4SEC								200
#define TIME_5SEC								250


#define NCLASS_WIND								0
#define NCLASS_CAFE								1
#define NCLASS_CAR								2
#define NCLASS_STREET							3
#define NCLASS_PINK								4
#define NCLASS_OFFICE							5


typedef struct{
	short monitor1;
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5;
	short monitor6;
	short monitor7;
	short monitor8;
	short monitor9;
	short monitor10;
} DyVEState_type;

typedef struct{
	short Step01Gain;
	short Step02Gain;
	short Step03Gain;
	short Step04Gain;
	short Step05Gain;
	short Step06Gain;
	short Step07Gain;
	short Step08Gain;
	short Step09Gain;
	short Step10Gain;
	short Step11Gain;
} DyVEStepGain_type;

typedef struct {
	short x_d1;
	short x_d2;
	short y_d1;
	short y_d2;
	long err_h;
} DyVEIIR;

typedef struct {
	short latt;			// level attack
	short lrel;			// level release
	short gat;			// gain attack time
	short grt;			// gain release time	
	short xd_level;		// fast rms value
	short G_old;			// past Gain	
	short offset_old;
	short delay_x[12];
	short Idx;
	short lah;
	short SLOPCOM_Gain;
	short DYVEOFFSET_Gain;
	short THDCP_Gain;	
	short THDCP_Gain2;
} DyVEStatus;

typedef struct {
	short latt;				// level attack
	short lrlt;				// level release
	short gat;				// gain attack time
	short grt;				// gain release time
	short thd1;
	short thd2;
	short thd3;
	short thd4;				// reserved
	short slop1;
	short slop2;
	short slop3;
	short slop4;				// reserved
	short slop5;				// reserved
	short maxboost1;
	short maxboost2;
	short xd_level;			// fast rms value
	short G_old;				// past Gain
	short maxboost2_old;
	short maxboost1_old;
	short reserved1;
} DyVEDRCStatus;

typedef struct {
	short DyVERMS_RANGE_TABLE[GAINSTEP];
	short DyVEVOLUME_GAIN_TABLE[NUMVOLUME][GAINSTEP];
	short TimeconsAT;
	short IvtimeconsAT;
	short TimeconsRT;
	short IvtimeconsRT;
	short DyVEcoeffL[COEFFNUM];
	short DyVEFilterIndx[NUMVOLUME][GAINSTEP];
	short SLOPCOM[GAINSTEP];
	short SLOPEXP[GAINSTEP];
	short SLOPNGT[NUMVOLUME];
	short DYVEOFFSET[GAINSTEP];
	short THDCP[GAINSTEP];
	short pre_old_gain;
	short gain_old;
	short idle_old;
	short idle_cnt;
	short x_old;
	short x_bgn_old;
	short rx_old;
	short xin_old;
	short xout_old;
	short diff_old;
	ALIGN32
	short DyVEcoeffH[COEFFNUM] ALIGN32SFX;
	short DyVEfircoeff[DyVE_FIRFILTERNUM];
	short fir_coeff[DyVE_FIRFILTERNUM];
	short hangover_vad_cnt_off;
	short hangover_vad_cnt_on;
	short hangover_rms_cnt;
	short hangover_gain_cnt_up;
	short hangover_gain_cnt_dn;
	short clean_cnt;
	short trigger_cnt;
	short adrc_trigger_cnt;
	short noisy_cnt;
	short ns_in_rms_hocnt;
	short HS_rx_eadflag;
	short HF_rx_eadflag;
	short HS_tx_vadflag;
	short HF_tx_vadflag;
	short HS_tx_nadflag;
	short HF_tx_nadflag;
	short detect_up_dn;
	short history_Buff[DyVE_FRAME_LENGTH_SWB];
	short RMS_Idx;
	short rms_buff[50];
	short clarity_enable;
	short stationarity;
	short stationarity_old;
	short stationarity_old2;
	short stationarity_old2_cnt;
	short stationarity_raw;
	short diff_frm_old;
	short in_rms_old;
	short out_rms_old;
	short flag_nonstat_update;
	short ns_in_rms_offset_noisy_cnt;
	short ns_in_rms_offset_cnt;
	short ns_in_rms_offset;
	short stationarity_offset_cnt;
	short stationarity_offset;
	short stationarity_noisy_cnt;
	ALIGN32
	short DyVEcoeffDN[COEFFNUM] ALIGN32SFX;
	ALIGN32
	short DyVEcoeffHPF[COEFFNUM] ALIGN32SFX;
	short vad_ex;
	short reserved;
} DyVEVars;

typedef struct{
	short tap[DyVE_FIRFILTERNUM];
} DyVEFIRCoeffstruct;


typedef struct{
	short howl_lowthd;			/* minmax threshold in lowband */
	short howl_highthd;			/* minmax threshold in highband */
    short howl_bandthd1;		/* minmax threshold in band1 */
	short howl_bandthd2;		/* minmax threshold in band2 */
	short howl_bandthd3;		/* minmax threshold in band3 */
	short howl_bandthd4;		/* minmax threshold in band4 */
	short howl_bandthd5;		/* minmax threshold in band5 */
	short howl_bandthd6;		/* minmax threshold in band6 */
	short howl_bandthd7;		/* minmax threshold in band7 */
	short howl_bandthd8;		/* minmax threshold in band8 */
	short howl_bandthd9;		/* minmax threshold in band9 */
	short howl_bandthd10;		/* minmax threshold in band10 */
	short howl_bandthd11;		/* minmax threshold in band11 */
	short howl_bandthd12;		/* minmax threshold in band12 */
	short howl_bandthd13;		/* minmax threshold in band13 */
	short howl_bandthd14;		/* minmax threshold in band14 */
	short howl_weak_gain;		/* suppression gain for weak howiling */
    short howl_strong_gain;		/* suppression gain for strong howiling */
    short howl_global_gain;		/* suppression gain for globak howiling */
	short howl_frm_cnt;			/* howling suppresion frame count */
} Howl_parameter;


typedef struct{
	short First_vadnb;
	short pre_emp_mem_vadnb;
	short update_cnt_vadnb;
	short window_vad_overlap_vadnb[24];
	short hyster_cnt_vadnb;
	short last_update_cnt_vadnb;
	short ch_enrg_long_db_vadnb[16];
	long frame_cnt_db_vadnb;
	long ch_enrg_vadnb[16];
	long ch_noise_vadnb[16];
	short last_normb_shift_vadnb;
	long tce_long_vadnb;
	// Noise Classification
	short mean[FFT_LEN_NC];
	short std[FFT_LEN_NC];

	short fx_normed_feature[FRE_FRAME_LEN];
	short last_frame[FRE_FRAME_LEN];

	short fx_CNN_output[CNN_OUT_NUM];
	short fx_GRU1_output[RNN_NODE_NUM];
	short fx_GRU2_output[RNN_NODE_NUM];
	short fx_FCN_output[NN_OUT_NUM];
	short fx_FCN_previous_output[NN_OUT_NUM];
	short NC_output[3];

	short CNN_w[CNN_WEIGHT_NUM];
	short CNN_b[CNN_CORE_NUM];
	short GRU_1_reset_gate_w[RNN_W_NUM];
	short GRU_1_update_gate_w[RNN_W_NUM];
	short GRU_1_c_w[RNN_W_NUM];
	short GRU_1_reset_gate_b[RNN_NODE_NUM];
	short GRU_1_update_gate_b[RNN_NODE_NUM];
	short GRU_1_c_b[RNN_NODE_NUM];
	short GRU_2_reset_gate_w[RNN_W_NUM];
	short GRU_2_update_gate_w[RNN_W_NUM];
	short GRU_2_c_w[RNN_W_NUM];
	short GRU_2_reset_gate_b[RNN_NODE_NUM];
	short GRU_2_update_gate_b[RNN_NODE_NUM];
	short GRU_2_c_b[RNN_NODE_NUM];
	short fx_GRU_1_state_previous[RNN_NODE_NUM];
	short fx_GRU_2_state_previous[RNN_NODE_NUM];
	short FCN_w[RNN_NODE_NUM*NN_OUT_NUM];
	short FCN_b[NN_OUT_NUM];
	short norm_shft_infor[2];
	short nc_hangover_cnt;
	short nc_hidden;
	short nc_prev;
} SamsungVADNB_t;

typedef struct{
	short *Speech;
	short *Noise_bot;
	short *Noise_top;
	short *Noise_after;
	short *OutSignal;
	short DyVE_mode;
	short DyVE_bandwidth;
	short DyVE_volume_index;
	short DyVE_vad_shift;
	short DyVE_noise_gain;
	short DyVE_gain;
	short DyVE_gain_ex;
	short DyVE_sum;
	DyVEStatus comp_api;
	DyVEDRCStatus drc_api;
	DyVEVars dyve_vars;
	DyVEIIR lpf_api;
	DyVEIIR hpf_api;
	DyVEStepGain_type step_gain;
	short DyVE_cnt;
	short DyVE_GainChange_flag;
	short CompGain_Mix[DyVE_FRAME_LENGTH_SWB/2];

	short SamsungDyVE_NoiseBot_Temp[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_NoiseBot_buffer[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_NoiseTop_Temp[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_NoiseTop_buffer[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_NoiseAfter_Temp[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_NoiseAfter_buffer[DyVE_FRAME_LENGTH_SWB];
	short SamsungDyVE_Speech_buffer[DyVE_FRAME_LENGTH_SWB];

	short DyVE_Select;
	short DyVE_diff_thd;
	short DyVE_hangover_vad_on_thd;	// tuning parameter »èÁ¦. °íÁ¤°ª »ç¿ë (DyVE_HANGOVER_VAD_ON_THD)
	short DyVE_hangover_vad_off_thd;
	short DyVE_hangover_rms_thd;
	short DyVE_hangover_gain_up_thd;
	short DyVE_hangover_gain_dn_thd;
	short DyVE_ns_in_rms_thd;
	short DyVE_ns_out_rms_thd;
	short DyVE_echo_thd;
	short DyVE_noise_thd;
	short DyVE_clean_thd;
	short DyVE_difrms_thd;
	short DyVE_adrc_enable;
	short DyVE_adrc_trigger;
	short DyVE_filter_trigger;
	short DyVE_filter_trigger_cnt;
	short DyVE_nonstat_thd;
	short DyVE_clean_cnt_dn; //DyVE_reserved6 (previous);
	short DyVE_loudrms_thd; //DyVE_reserved6; //(º¯°æ 161124, °íµµ¼ÒÀ½ RMS threshold)
	short DyVE_stat_offset_thd;
	short DyVE_stat_rms_thd;
	short DyVE_max_vol_index;
	short DyVE_dnn_gain;
	short DyVE_reserved9;
	short DyVE_reserved10;
	long DyVE_Temp1[58];
	long DyVE_Temp2[194];

	DyVEState_type DyVEMonitor_v;

	short DyVESPK_mode;
	short DyVE_Rx_Eng_old;
	short rx_vad_buffer[5];
	short RMS_limit_level;
	VBRCompstruct RMSComp;
	short rx_vad_thd;
	short DyVE_FIRCoefBuff[DyVE_FRAME_LENGTH_SWB + DyVE_FIRFILTERNUM - 1];
	short DyVE_ClarityCoefBuff[DyVE_FRAME_LENGTH_SWB + DyVE_FIRFILTERNUM - 1];
	DyVEFIRCoeffstruct DyVE_FIRCoef;
	DyVEFIRCoeffstruct DyVE_FixedCoeff;

	SamsungVADNB_t noise_class_t;

} DiamondVoiceEngine_DyVE_Cfg_t;
#endif //_DiamondVoiceEngine_DyVE_Cfg_t_H_

#ifndef	_DiamondVoiceEngine_ADD_Cfg_t_H
#define	_DiamondVoiceEngine_ADD_Cfg_t_H

typedef struct{
	short monitor1;				// nb quality mode
	short monitor2;
	short monitor3;
	short monitor4;
	short monitor5;
} ADDState_type;

typedef struct{
	short addnbQualityModeFlag;
	short addDualSpkShockModeFlag;
	short vol[11];
	short atten_gain;
	ADDState_type ADDMonitor_v;
	/*DualSPK*/
	short addnbQualityModeFlag_ds;
} DiamondVoiceEngine_ADD_Cfg_t;
#endif //_DiamondVoiceEngine_ADD_Cfg_t_H

#ifndef	_DiamondVoiceEngine_BigData_Cfg_t_H
#define	_DiamondVoiceEngine_BigData_Cfg_t_H

#define	BIGDATA_MAX		10

typedef struct{
	Bigdatastruct Bigdata_tx_vars;
	Bigdatastruct Bigdata_tx1_vars;
	Bigdatastruct Bigdata_tx2_vars;
} DiamondVoiceEngine_BigData_Cfg_t;

typedef struct{
	BigdataMBDstruct Bigdata_mbd_vars;
	short mbd_diff;
	short mbd_ratio;
	short mbd_time;
} DiamondVoiceEngine_BigData_MBD_Cfg_t;

#endif //_DiamondVoiceEngine_BigData_Cfg_t_H



typedef struct{
	short *Speech;
	short *Noise_bot;
	short *Noise_top;
	short *Noise_after;
	short *OutSignal;
	/*DualSPK*/
	short *Speech_DualSPK;
	short *OutSignal_DualSPK;	

	short Pre_Mode;
	short Mode;
	short BandWidth;
	short Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short DBuff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short LAH_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short Idx;
	short LAH;

	/*DualSPK*/
	short DualSPKMode;
	short Buff_ds[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short DBuff_ds[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short LAH_Buff_ds[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short Idx_ds;

	DiamondVoiceEngine_SF_Cfg_t			DiamondVoiceEngine_SF_vars;
	DiamondVoiceEngine_VB_Cfg_t			DiamondVoiceEngine_VB_vars;
	DiamondVoiceEngine_DyVE_Cfg_t		DiamondVoiceEngine_DyVE_vars;
	DiamondVoiceEngine_ASF_Cfg_t		DiamondVoiceEngine_ASF_vars;
	DiamondVoiceEngine_CNG_Cfg_t		DiamondVoiceEngine_CNG_vars;
	DiamondVoiceEngine_ADD_Cfg_t		DiamondVoiceEngine_ADD_vars;
	DiamondVoiceEngine_BigData_Cfg_t	DiamondVoiceEngine_BigData_vars;
	DiamondVoiceEngine_BigData_MBD_Cfg_t	DiamondVoiceEngine_BigData_MBD_vars;

	DiamondVoiceEngine_HOWL_Cfg_t DiamondVoiceEngine_HOWL_vars;

	short OutputMono_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short OutputDSMono_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short input_Mono_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short Noise_botMono_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];
	short Noise_topMono_Buff[SAMSUNGDIAMONDVOICESUPERWIDEBAND];

} SamsungDiamondVoiceEngine_Handle_t;

/******************************************************************************
*  TYPEDEFS AND STRUCTURES
*****************************************************************************/
typedef struct {
	short sfRxFilter[32];
} SFParam_type;

typedef struct{
	short vbHpfCut;
#ifndef __DV_ARM_REL
	short vbBoostGain;
	short vbPeakLimit;
#endif
	short vbBandNum;
	short vbCrossFreq[VB_MBDRC_NUM];
	short vbBandsGain[VB_MBDRC_NUM];
	short vbBandLimit[VB_MBDRC_NUM];
#ifdef __DV_ARM_REL
	short vbBoostGain;
	short vbPeakLimit;
#endif
	short vbRMSLimit;
	short vb_reserv1;
	short vb_reserv2;
	short vb_reserv3;
} VBParam_type;

typedef struct {
	short cngLevel;
} CNGParam_type;

typedef struct{	
	short nbQualityMode ;
	short DualSpkShockMode ;	
} ADDMode_type;

typedef struct{
	short dvMode;
	short dvDualMode;
	short dvVolStep_Midh2High;
	short dvVolStep_Midl2Midh;
	short dvVolStep_Low2Midl;

	/* SwingFree */
	// SF Common
	short sfRxVolStepIndex;
	short sfWNLevel;
	short sfComThd;
	short sfComSlope;
	short sfExpThd;
	short sfExpSlope;
	// SF Main
	short sfHpfCutoff_m;
	short sfPeakLimiter_m;
	short sfPeakLimiterLPF_m;
	short sfStepGain_m[11];
	short FadeOutTime_m;
	short FadeInFrmNum_m;
	SFParam_type sfStepHigh_m;
	SFParam_type sfStepMidh_m;
	SFParam_type sfStepMidl_m;
	SFParam_type sfStepLow_m;
	// SF Sub
	short sfHpfCutoff_s;
	short sfPeakLimiter_s;
	short sfPeakLimiterLPF_s;
	short sfStepGain_s[11];
	short FadeOutTime_s;
	short FadeInFrmNum_s;
	SFParam_type sfStepHigh_s;
	SFParam_type sfStepMidh_s;
	SFParam_type sfStepMidl_s;
	SFParam_type sfStepLow_s;
		
	short sf_reserv1;
	short sf_reserv2;
	short sf_reserv3;	
	short sf_reserv4;
	
	/* VB */
	// VB Main
	VBParam_type vbStepHigh_m;
	VBParam_type vbStepMidh_m;
	VBParam_type vbStepMidl_m;
	VBParam_type vbStepLow_m;
	// VB Sub
	VBParam_type vbStepHigh_s;
	VBParam_type vbStepMidh_s;
	VBParam_type vbStepMidl_s;
	VBParam_type vbStepLow_s;
	
	/* ASF */
	short asfFilterMode;
	short asfLimiter;
	
	DyVEStepGain_type dyveStepMaxGain;
	short dyveMicSensitivity;
	short dyvePreemphasis;
	short dyveMicGain;
	short dyveRMSLimiter;
	short dyveRxVADThd;
	short dyveRxFilter_max[7];
	short dyveRxFilter_nom[7];
	short dyve_NumMIC;			// 1 or 2 mic selection
	short dyve_adrc_thd[4];
	short dyve_adrc_slp_high;
	short dyve_adrc_slp_low;
	short dyve_adrc_gain;
	short dyve_diff_thd;
	short dyve_hangover_thd;		// dyve_hangover_vad_off_thd
	short dyve_hangover_rms_thd;
	short dyve_ns_in_rms_thd;
	short dyve_stat_rms_thd;
	short dyve_echo_thd;
	short dyve_noise_thd;
	short dyve_clean_cnt_thd;
	short dyve_filter_trigger;
	short dyve_filter_trigger_cnt;
	short dyve_nonstat_max;			// dyve_hangover_vad_on_thd
	short dyve_nonstat_offset;			// dyve_hangover_gain_up_thd
	short dyve_ho_gaindn_thd;			// dyve_hangover_gain_dn_thd
	short dyve_highnoise_thd;
	short dyve_maxvol_indx;
	short dyve_reserved_6;
	short dyve_reserved_7;
	short dyve_reserved_8;
	short dyve_diffrms_thd;
	short dyve_adrc_enable;

	/* Howling Reduction */
	Howl_parameter howl_param;
		
	/* CNG */
	// CNG Main
	CNGParam_type	cngStepHigh_m;
	CNGParam_type	cngStepMidh_m;
	CNGParam_type	cngStepMidl_m;
	CNGParam_type	cngStepLow_m;
	// CNG Sub
	CNGParam_type	cngStepHigh_s;
	CNGParam_type	cngStepMidh_s;
	CNGParam_type	cngStepMidl_s;
	CNGParam_type	cngStepLow_s;
	
	/* DHA */
	short dhaMode;
	short dhaChannel;
	short dhaParam[12];
	
	ADDMode_type addMode;
	short addnbQualityFilter[17];
	
	short ModeChg_flag;
	short ModeChg_cnt;
	short ModeChg_flag_ds;
	short ModeChg_cnt_ds;
} SamsungDiamondVoiceParam;

/******************************************************************************
*  Monitor TYPES
*****************************************************************************/
extern SFState_type		SFMonitor_v;
extern VBState_type		VBMonitor_v;
extern ASFState_type	ASFMonitor_v;
extern DyVEState_type	DyVEMonitor_v;
extern CNGState_type	CNGMonitor_v;
extern DHAState_type	DHAMonitor_v;

/******************************************************************************
*  FUNCTION PROTOTYPES
*****************************************************************************/
extern int SamsungSwingFreeState(DiamondVoiceEngine_SF_Cfg_t*  DiamondVoiceEngine_SF_vars);

extern int SamsungDHAState(DiamondVoiceEngine_SF_Cfg_t* DiamondVoiceEngine_SF_vars);

extern int SamsungVBState(DiamondVoiceEngine_VB_Cfg_t* DiamondVoiceEngine_VB_vars);

extern int SamsungASFState(DiamondVoiceEngine_ASF_Cfg_t* DiamondVoiceEngine_ASF_vars);

extern int SamsungDyVEState(DiamondVoiceEngine_DyVE_Cfg_t* DiamondVoiceEngine_DyVE_vars);

extern int SamsungDyVESPKState(DiamondVoiceEngine_DyVE_Cfg_t* DiamondVoiceEngine_DyVE_vars);

extern int SamsungCNGState(DiamondVoiceEngine_CNG_Cfg_t* DiamondVoiceEngine_CNG_vars);

extern int SamsungDiamondVoiceEngineInit(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, short bandwidth);

extern int SamsungDiamondVoiceEngineModeConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineHOWLConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineSFConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineVBConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineASFConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineDyVEConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineCNGConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineDHAConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineADDNBQualityConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineADDDualSpkShockConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineGAINConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineFadeConfig(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars);

extern int SamsungDiamondVoiceEngineExe(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars, short *output, short *output_ds, short *input, short *txinput_bot, short *txinput_top, short *txinput_after);

extern int SamsungDiamondVoiceEngineExe_interleave(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, SamsungDiamondVoiceParam *SamsungDiamondParam_vars, short *output_stereo, short *input, short *txinput_bot_stereo, short *txinput_after);

extern int SamsungDiamondVoiceEngineBigData(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, short *prx_silent_state, short *ptx_state, short *ptx1_var, short *ptx1_rms, short *ptx2_var, short *ptx2_rms, short *ptx_cnt);

extern int SamsungDiamondVoiceEngineBigDataMBD(SamsungDiamondVoiceEngine_Handle_t* SamsungDiamondVoiceEngine_vars, short *pMBD_state, short *pMBD_cnt);

#endif		// DiamondVoice_H
