主题 : 奇怪的问题,tiny6410 RTP音频传输与屏幕有什么关系? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 63435
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-02-20
最后登录: 2012-06-26
楼主  发表于: 2012-06-06 12:05

 奇怪的问题,tiny6410 RTP音频传输与屏幕有什么关系?

写了个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重新编辑 ]