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

自己在使用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()函数进行了封装,使其可以传入媒体流的指针和大小。


你可能感兴趣的:(webrtc)