stWSABuf=(LPWSABUF)GlobalAllocPtr(GHND,sizeof(WSABUF));
stWSABuf->buf = (char *)malloc(BUFSIZE);
if (g_pBuffer)
g_pBuffer->PopOut ((LPSTR)stWSABuf->buf, BUFSIZE);
stWSABuf->len = BUFSIZE;
::WaitForSingleObject(g_eventRealSend,INFINITE);
AfxBeginThread(RealSendThread,stWSABuf);
return 0;
}
//响应实时发送命令
void CPlayView::OnPopRealSend()
{
DWORD dwFlags;
//如果视频流缓冲区尚未建立,分配视频流缓冲区
if (! g_pBuffer)
g_pBuffer = new CAV8Buffer(BLOCKNUM, BLOCKLEN);
//如果当前不在实时采集数据,启动视频采集卡采集数据
if((!m_RealSend)&&(!m_Capture))
{
if(InitDriver()<0)
return;
}
//打开一个本地存放文件
dwFlags = MMIO_CREATE | MMIO_WRITE;
hmmioSendOutput = mmioOpen("temp.mpg", (LPMMIOINFO)NULL, dwFlags);
//实时发送标志置为TRUE
m_RealSend=TRUE;
//设置实时发送事件就绪
g_eventRealSend.SetEvent();
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pFrame->m_wndStatusBar.SetPaneText(1,"在发送实时数据");
}
void CPlayView::OnPopSendStop()
{
// TODO: Add your command handler code here
if(m_FileSend)
g_eventFileStopSend.SetEvent();
if(m_RealSend)
{
if(!m_Capture)
ClearDriver();
RELEASE_AV8BUFFER;
::WaitForSingleObject(g_eventRealSend,INFINITE);//等待线程结束,释放文件句斌
FILE_CLOSE(hmmioSendOutput);
m_RealSend=FALSE;
}
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pFrame->m_wndStatusBar.SetPaneText(1,"停止发送");
}
//回调函数,实现对视频采集卡传递进来的数据流的处理
WORD CALLBACK _loadds MyCallBack(HDRVR hdrvr, UINT msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
{
if(msg==VF_MSGUSER_BUF_WRITE)
{
LONG lRet;
MMIOINFO mmioinfoIn;
LPVF_BUFWRITE_STRUCT lpBufWrite = (LPVF_BUFWRITE_STRUCT)dwParam1;