pSample->GetPointer(&pBuff);
lSize = pSample->GetActualDataLength();
m_cirMicBuf.Push(pBuff, lSize);
ZeroMemory(pBuff, lSize);
int i = 0;
int iMicLen = m_cirMicBuf.Len();
int iRecvLen = m_cirRecvBuf2.Len();
while (m_cirMicBuf.Len() >= m_sampRate/50 &&
m_cirRecvBuf2.Len() >= m_sampRate/50 && (m_sampRate/50) * i < lSize)
{
m_cirMicBuf.Pop((PBYTE)buf_in, m_sampRate/50);
m_cirRecvBuf2.Pop((PBYTE)buf_out, m_sampRate/50);
speex_echo_cancellation(_speex_aec, buf_in, buf_out, outbuf);
speex_preprocess_run(_speex_preprocess, outbuf);
memcpy(pBuff + (m_sampRate/50) * (i++), outbuf, m_sampRate/50);
}
m_cirMicBuf.Reset();
m_cirRecvBuf1.Reset();
m_OutputPin.Deliver(pSample);