⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aec.cpp

📁 语音开发中的重要算法
💻 CPP
字号:
// AEC.cpp : Defines the initialization routines for the DLL.
//

#include "AEC.h"
#include "factory.h"

//extern const CLSID CLSID_VAEC;
//extern const IID IID_VAEC;

HRESULT CFactory::CreateInstance(IUnknown* pUnknownOuter,
								 const IID& iid,
								 void** ppv)
{	
	if (pUnknownOuter != NULL	&& iid != CLSID_VAEC)
	{
		return CLASS_E_NOAGGREGATION ;
	}
	HRESULT hr;
	
	CVAEC* pA = new CVAEC;
	if (pA == NULL)
	{
		return E_OUTOFMEMORY ;
	}
	
	hr = pA->QueryInterface(iid, ppv) ;
	if (FAILED(hr))
	{
		delete pA;
	}
	
	return hr;
}

HRESULT __stdcall CVAEC::QueryInterface(const IID& iid, void** ppv)
{    

	if ((iid == IID_IUnknown) || (iid == IID_VAEC))
	{
		*ppv = static_cast<CVAEC*>(this) ; 
	}
	else
	{
		*ppv = NULL ;
		return E_NOINTERFACE ;
	}

	reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
	
	return S_OK ;
}

ULONG __stdcall CVAEC::AddRef()
{
	return InterlockedIncrement(&m_cRef) ;
}

ULONG __stdcall CVAEC::Release() 
{
	if (InterlockedDecrement(&m_cRef) == 0)
	{
		delete this ;
		return 0 ;
	}
	return m_cRef ;
}

CVAEC::CVAEC()
{
	m_cRef=0;
	InterlockedIncrement(&CFactory::m_nComObjsInUse);

	m_pAEC=NULL;
}

CVAEC::~CVAEC()
{
	InterlockedDecrement(&CFactory::m_nComObjsInUse);
	if(CFactory::m_nComObjsInUse<=0)
	{
		CFactory::CloseServer();
	}
}
/*
// {59EB9A9D-60FC-449f-8040-15D0F3B1ED7F}
const IID IID_VAEC = {
	0x59eb9a9d, 0x60fc, 0x449f, { 0x80, 0x40, 0x15, 0xd0, 0xf3, 0xb1, 0xed, 0x7f}};

// {39302314-709D-48e3-B4B1-127DBA8A6690}
const CLSID CLSID_VAEC = {
	0x39302314, 0x709d, 0x48e3, { 0xb4, 0xb1, 0x12, 0x7d, 0xba, 0x8a, 0x66, 0x90}};
*/	
HRESULT CVAEC::Init()
{
	if(m_pAEC)
	{
		m_pAEC->UnInit();
		delete m_pAEC;
		m_pAEC=NULL;
	}

	m_pAEC=new CSample;
	if(!m_pAEC)
		return E_FAIL;
	return m_pAEC->Init();	
}

HRESULT CVAEC::UnInit()//release all resource
{
	/////////////////////////////
	//destroy object
	if(m_pAEC)
	{
		m_pAEC->UnInit();
		delete m_pAEC;
		m_pAEC=NULL;
	}
	return S_OK;
}

HRESULT	CVAEC::ProcessOutEcho(short* pOutData,LONG nLen,BYTE* pMicData)//mic
{
	if(m_pAEC)
		return m_pAEC->EchoOutData(pOutData,nLen,pMicData);
	return E_FAIL;
}

HRESULT	CVAEC::ProcessInEcho(short* pInData,LONG nLen)//from remote
{
	if(m_pAEC)
		return m_pAEC->EchoInData(pInData,nLen);
	return E_FAIL;
}

HRESULT	CVAEC::ProcessOutEcho(short* pOutData,LONG nLen)//mic
{
	if(m_pAEC)
		return m_pAEC->EchoOutData(pOutData,nLen);
	return E_FAIL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -