
#include "SamsungSolomonVoiceW_Int.h"
#include "SamsungSolomonVoiceW_Table.h"

#if(FLAG_SELECT_C_DSP == 1)
#include <stdio.h>
#include <stdlib.h>

extern FILE *fp_debug_Pwr_RX_AECIN_dB_C, *fp_debug_ADF_C;
extern FILE *fp_debug_AEC_in_inner, *fp_debug_AEC_in_outer1, *fp_debug_AEC_in_outer2, *fp_debug_AEC_out_inner, *fp_debug_AEC_out_outer1, *fp_debug_AEC_out_outer2;
extern FILE *fp_fx_SolomonVoice_ringbacktone_detection;
#endif

void SolomonVoiceWAECInit(AECStatus* AEC_buf, SamsungSolomonVoiceWTxAECParam* AEC_param, COMMONBUF* common_buf, CHANNEL channel);
void SolomonVoiceW_AEC_ParamConfig(SamsungSolomonVoiceWTxAECParam* AEC_param, SamsungSolomonVoiceWTxAECParam* param);
short fx_SolomonVoice_Rx_ringbacktone_detection(AECStatus* AEC_buff, SamsungSolomonVoiceWTxAECParam* AEC_param);
void fx_SolomonVoice_Rx_In_for_ADF(/*In*/short *Speech_rx, /*Out*/short *RxFFTfrm_AEC, /*Out*/short *RxFrm_AECin_AEC,
	/*Param*/short PARA_Gain_RxSig, short PARA_Q_for_InSigGain, short *RxFrm_Delay_AEC, short DelayCompensation,
	short NadfMinun1, short FRM_LEN, COMMONBUF* COMMON_buf);
void fx_SolomonVoice_Tx_In_for_ADF(/*In*/short *Speech, /*Out*/short *TxFrm_AEC, /*Param*/short PARA_Gain_TxSig, short PARA_Q_for_InSigGain, short FRM_LEN);
void fx_SolomonVoice_rx_clipping_for_FNLMS(short *OutClipped, short *In, short ValClipp, short Nframe);
short fx_SolomonVoice_AEC_Flag_RxVAD(short Pwr_RX_AECIN_dB, short PARA_THD_Pwr_Rx_AEC_IN_dB);
short fx_SolomonVoice_AEC_Flag_TxSilence(short Pwr_TX_AECIN_dB, short PARA_THD_Pwr_Tx_dB);
short fx_SolomonVoice_AEC_Flag_LoudSig(short Pwr_TX_AECIN_dB, short PARA_THD_Pwr_Tx_Loud_dB);
short fx_SolomonVoice_AEC_Flag_SingleTalk(short Pwr_RX_AECIN_dB, short Pwr_TX_AECIN_dB, short PARA_reserved_27, AECStatus* AECADF);
short fx_SolomonVoice_AEC_Flag_LoudSig(short Pwr_TX_AECIN_dB, short PARA_THD_Pwr_Tx_Loud_dB);
short fx_SolomonVoice_AEC_Flag_SingleTalk(short Pwr_RX_AECIN_dB, short Pwr_TX_AECIN_dB, short PARA_reserved_27, AECStatus* AECADF);
short fx_SolomonVoice_AEC_Flag_SingleNET(short Pwr_RX_AECIN_dB, short Pwr_TX_AECIN_dB, short PARA_reserved_30);
//void fx_SolomonVoice_bulk_delay_estimation(AECStatus* AEC_buf, SamsungSolomonVoiceWTxAECParam* AEC_param, SamsungSolomonVoiceWTxFRAMEParam* FRAME_param, RESStatus* RES_buf, short *TxFrm_AEC, CHANNEL channel);
//short fx_SolomonVoice_AEC_Delay_Compensation(AECStatus* AEC_buf, SamsungSolomonVoiceWTxAECParam* AEC_param, SamsungSolomonVoiceWTxFRAMEParam* FRAME_param, RESStatus* RES_buf, short FrmDT, short *TxFrm_AEC, CHANNEL channel);
void fx_SolomonVoice_AEC_ADFfiltering(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars, AECStatus* AEC_buf1, AECStatus* AEC_buf2,
	SamsungSolomonVoiceWTxAECParam* AEC_param, SamsungSolomonVoiceWTxFRAMEParam* FRAME_param,
	short *TxFrm_AEC1, short *TxFrm_AEC2, short AECout_bit_shift_by_qformatW, short OneOverFrmQ22, short frame_pwr_bitshiftoffset,
	short NadfMinun1, short Nadf, int step_fast, short FrmDT, short FRM_LEN, CHANNEL channel);
void fx_SolomonVoice_AEC_ErrPower(AECStatus* AEC_buf1, AECStatus* AEC_buf2, short PARA_reserved_33, short Nadf, int Nsamples2sec, short FRM_LEN, CHANNEL channel);
void FN_SOLOMONVOICEW_TX_AEC(DVTX_ECNS_Cfg_t* DVTX_ECNS_vars, CHANNEL channel);
