写了个RTP语音通信的程序,在6410上接收,电脑传输,当6410接上屏幕的时候工作是正常的,取掉屏幕让其开机启动程序,在工作一会后就没有声音了,请教这和屏幕有什么关系?
接收处理函数如下:
BOOL CWaveOut::Play(char* buf,UINT uSize)
{
if (!m_bDevOpen)
{
//TRACE("CWaveOut::Play: Device hasn't been open.\n");
//AfxMessageBox(_T("bDevOpen!"));
AfxMessageBox(_T("1111111"));
return FALSE;
}
if(lPwh[lPindex] && !(lPwh[lPindex]->dwFlags & WHDR_DONE))
{
return FALSE;
}
else if(lPwh[lPindex] && lPwh[lPindex]->dwFlags & WHDR_DONE)
{
m_mmr = waveOutUnprepareHeader(m_hOut,lPwh[lPindex],sizeof(WAVEHDR));
if (!m_mmr)
{
delete []lPwh[lPindex]->lpData;//删除Play调用时分配的内存
delete lPwh[lPindex];
}
else
{
AfxMessageBox(_T("222222"));
}
}
char* p;
lPwh[lPindex]=new WAVEHDR;
p=new char[uSize];
CopyMemory(p,buf,uSize);
ZeroMemory(lPwh[lPindex],sizeof(WAVEHDR));
lPwh[lPindex]->dwBufferLength=uSize;
lPwh[lPindex]->lpData=p;
//ZeroMemory(lPwh[lPindex],sizeof(WAVEHDR));
//lPwh[lPindex]->dwBufferLength=uSize;
//lPwh[lPindex]->lpData=p;
m_mmr=waveOutPrepareHeader(m_hOut,lPwh[lPindex],sizeof(WAVEHDR));
if (m_mmr)
{
//TRACE("CWaveOut::CloseDev: waveOutPrepareHeader error.\n");
if(m_mmr == MMSYSERR_INVALHANDLE)
{
AfxMessageBox(_T("MMSYSERR_INVALHANDLE"));
}
else if(m_mmr == MMSYSERR_NODRIVER)
{
AfxMessageBox(_T("MMSYSERR_NODRIVER"));
}
else if(m_mmr == MMSYSERR_NOMEM)
{
AfxMessageBox(_T("MMSYSERR_NOMEM"));
}
else if(m_mmr == WAVERR_UNPREPARED)
{
AfxMessageBox(_T("WAVERR_UNPREPARED"));
}
else
{
AfxMessageBox(_T("123123"));
}
return FALSE;
}
m_mmr = waveOutWrite(m_hOut,lPwh[lPindex],sizeof(WAVEHDR));
if (m_mmr)
{
//TRACE("CWaveOut::CloseDev: waveOutPrepareHeader error.\n");
if(m_mmr == MMSYSERR_INVALHANDLE)
{
AfxMessageBox(_T("MMSYSERR_INVALHANDLE"));
}
else if(m_mmr == MMSYSERR_NODRIVER)
{
AfxMessageBox(_T("MMSYSERR_NODRIVER"));
}
else if(m_mmr == MMSYSERR_NOMEM)
{
AfxMessageBox(_T("MMSYSERR_NOMEM"));
}
else if(m_mmr == WAVERR_UNPREPARED)
{
AfxMessageBox(_T("WAVERR_UNPREPARED"));
}
else
{
AfxMessageBox(_T("1111"));
}
return FALSE;
}
lPindex++;
if(lPindex == PLAY_DELAY)
{
lPindex=0;
}
//m_iBufferNum ++;
return TRUE;
}
反复尝试发现程序运行后一会这里出现问题
if(lPwh[lPindex] && !(lPwh[lPindex]->dwFlags & WHDR_DONE))
{
return FALSE;
}
lPwh[lPindex]->dwFlags 一直都没有完成,所以不断的return
但是这和屏幕有什么关系呢?当接上屏幕的时候一切都是正常的
[ 此帖被cloud0211在2012-06-06 14:09重新编辑 ]