
#include "Define_config.h"
#include "SamsungSolomonVoiceW_Int.h"
//#include "SamsungSolomonVoiceW_Table.h"
//#include "SamsungSolomonVoiceW_basic_op.h"

#if(FLAG_SELECT_C_DSP == 1)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#endif

void SolomonVoiceWMixingInit(MixingStatus* Mix_buf, SamsungSolomonVoiceWTxMixParam* Mix_param, COMMONBUF* COMMON_buf);
void SolomonVoiceW_Mix_ParamConfig(SamsungSolomonVoiceWTxMixParam* Mix_param, SamsungSolomonVoiceWTxMixParam* param);
void fn_MixingGain(MixingStatus* Mix_buf, DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
void fn_MixingState(MixingStatus* Mix_buf, DVTX_ECNS_Cfg_t* DVTX_ECNS_vars, short OuterPwr_avrg_LowBand_Longterm, short OuterPwr_avrg_HighBand_Longterm, short OuterPwr_avrg_VeryLowBand);
short fn_BandEnergy_forMixing(int* EEBin, short fl, short fh, short BLK_NORM);
short fn_RecursiveAverage_forMixing(short FrmPwr, short OuterPwr_prev, short alpha_down, short alpha_up);
int fn_msc(int Imsc, int *MSC, int *phi_main, int *phi_sub, int *phi_cross_r, int *phi_cross_i,	short alpha_up, short onminusalpha_up, short alpha_down, short onminusalpha_down, short bin_from, short bin_num);
short FN_Wind_Detection(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
short FN_UNFIT_Detection_Coh(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
int FN_UNFIT_Detection_Leakage(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars, short RxVAD_count);
int FN_UNFIT_Detection_Occlusion(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars, short RxVAD_count);
void FN_SOLOMONVOICEW_TX_MIXING_SET(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
void FN_Mixing_FreqDomain(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);

void FN_Mixing_FreqDomain_ACC(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
void FN_Gain_LowBand_0_to_200Hz(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
void FN_CONTEXT_BASED_OUPUT_GAIN_CONTROL(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
void FN_CONTEXT_BASED_SIGNAL_MIX_MIC_BF(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars);
