您的位置:首页 > 其它

webrtc aec模块关于WebRtcAec_Process()函数中参数的调用

2017-06-18 16:06 1026 查看
自己在使用WebRtcAec_Process()函数的时候,出现了错误。只要是关于const float* const* 和float* const* 类型的数据指针传入的失误。

自己刚刚开始使用强制转换来做的,可是老是出错,出错的函数是memcpy()函数,自己调试了好长时间,终于解决了。是因为自己传入的指针不对。

#define NN 160

int AudioBufferFarendSet(void* m_AecmInst, int nDataLen, char *szData)
{
short *sPointer = (short *)szData;
float m_sFar_frame[NN];
memset(m_sFar_frame, 0, sizeof(float)*NN);
int i = 0;
for (i = 0; (i * 2) < nDataLen; i++)
{
m_sFar_frame[i] = *(sPointer + i);
}

const float* ptr = m_sFar_frame;

int nRet = WebRtcAec_BufferFarend(m_AecmInst, ptr, NN);
printf("WebRtcAec_BufferFarend = %d\n", nRet);
return 0;
}

int AudioProcess(void* m_AecmInst, int nDataLen, char *szInData, char *szOutData)
{
short *sInPointer = (short *)szInData;
short *sOutPointer= (short *)szOutData;

float m_sOutNear_frame[NN];
float m_sInNear_frame[NN];

memset(m_sInNear_frame, 0, sizeof(float) * NN);
memset(m_sOutNear_frame, 0, sizeof(float) * NN);

int i = 0;

for (i = 0; (i * 2) < nDataLen; i++)
{
m_sInNear_frame[i] = *(sInPointer + i);

}

float* const p = m_sInNear_frame;
const float* const* ptr = &p;

float* const q = m_sOutNear_frame;
float* const* ptr2 = &q;

WebRtcAec_Process(m_AecmInst, ptr, 1, ptr2, NN, 109, 0);

for (i = 0; (i * 2) < nDataLen; i++)
{
*(sOutPointer + i) = (short)m_sOutNear_frame[i];
}

return 0;
}


这里面对WebrtcAec_Process()函数和WebrtcAec_BufferFarend()函数进行了封装,使其可以传入媒体流的指针和大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: