亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? playview.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// playView.cpp : implementation of the CPlayView class
//

#include "stdafx.h"
#include "play.h"
#include "playDoc.h"
#include "playView.h"
#include "MainFrm.h"
#include "av8api.h"
#include "Define.h"
#include "Dos.h"
#include "direct.h"
#include "Afxmt.h"
#include "Windowsx.h"
#include "StopModeDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define BLOCKNUM 50
#define BLOCKLEN 32768 //32k
#define FILE_CLOSE(x)  if(x) { mmioClose(x, NULL);x=NULL;}
#define RELEASE_AV8BUFFER  if(g_pBuffer) {g_pBuffer->Stop();delete g_pBuffer;g_pBuffer = NULL;}
#define RELEASE_CVIDEOPLAY if(pVideoPlay){pVideoPlay->StopPlay();delete pVideoPlay;pVideoPlay=NULL;}
 
extern CMenu PopMenu;
BOOL m_Capture=FALSE;  //是否采集
CAV8Buffer *g_pBuffer = NULL;
HMMIO hmmioOutput;      //采集文件的句斌
HMMIO hmmioSendOutput;      //發送時保存文件的句斌
CString CapFileName;  //采集文件名
BOOL m_FileSend=FALSE;   //是否在發送文件數據

CEvent g_eventFileStopSend;  //停止發送文件標志,自動設置
CEvent g_eventRealSend(FALSE,TRUE,NULL,NULL);   //開始實時發送標志,手工設置
CEvent g_eventClearup;   //完成清除工作,可以Destory窗口標志
HWND hWnd ;//發送數窗口的句斌 
float  m_size=0.00;     //采集數據大小
CString SendFilePath="";
#define WM_CAPTURE_STOP WM_USER+1000    //采集大小到,停止采集


//發送組播數據
DWORD SendData(LPWSABUF stWSABuf)
{
    CString msg;
	DWORD cbRet;
    cbRet = 0;

    CPlayApp* pApp=(CPlayApp*)AfxGetApp();
	//向指定地址發送數據
	int status = WSASendTo (MultiSock,   /* socket */
		  stWSABuf,						/* output buffer structure */
		  1,                       /* buffer count */
		  &cbRet,                  /* number of bytes sent */
		  0,					/* flags */
		  (struct sockaddr FAR *)&DestAddr,/* destination address */
		  sizeof(DestAddr), /* size of addr structure */
		  NULL,	                   /* overlapped structure */
		  NULL);                   /* overlapped callback function */

	if (status == SOCKET_ERROR) 
	{
		  AfxMessageBox("WSASendTo() Error");
		  return -1;
	}

	return cbRet;
}

//視頻文件發送線程
UINT FileSendThread(LPVOID pParam)
{
	CFile  hFile; 
	DWORD dwFlags;
	DWORD SendLen;
	DWORD dwReadLength;
	DWORD dwBytesRead;
	int status;
	WSABUF SendBuf;
	dwReadLength=BUFSIZE;   
	
	
	//分配發送緩沖區
	SendBuf.buf=(char *)malloc(BUFSIZE);
	
	
	status=hFile.Open(SendFilePath,CFile::modeRead);
	dwFlags = MMIO_CREATE | MMIO_WRITE;
	if(status==0)
	{
		//釋放發送緩沖區
		free(SendBuf.buf);
		return -1;
	}
	else
	{
		while(1)
		{
			//每次讀數據32k
			dwBytesRead=hFile.Read(SendBuf.buf,dwReadLength);
			if(dwBytesRead==0)
			{//發送完成
				
				//關閉文件
				hFile.Close();
				//釋放發送緩沖區
				free(SendBuf.buf);
				AfxMessageBox("發送完成");
				break;
			}
			SendBuf.len = dwBytesRead;
			//發送數據
			SendLen=SendData(&SendBuf);
			
			if(::WaitForSingleObject(g_eventFileStopSend,0)==WAIT_OBJECT_0)
			{
				hFile.Close();
				free(SendBuf.buf); 
				AfxMessageBox("停止發送");
				break;
			}
			Sleep(250);
		}
	}
	//文件發送標志置為FALSE
	m_FileSend=FALSE; 
	
	
	return 0;
}

//實時視頻流發送線程
UINT RealSendThread(LPVOID pParam)
{
	int temp;
	//發送緩沖區
    LPWSABUF RealSendBuf = (LPWSABUF)pParam;
	//開始實時發送
	g_eventRealSend.ResetEvent(); 
	//發送數據
	temp=SendData(RealSendBuf);
	//實時保存視頻流到指定文件中
	if(hmmioSendOutput)
	    mmioWrite(hmmioSendOutput, (LPSTR) RealSendBuf->buf,temp);
    free(RealSendBuf->buf);
	GlobalFreePtr(RealSendBuf);	
	g_eventRealSend.SetEvent();
	return 0;
}





/////////////////////////////////////////////////////////////////////////////
// CPlayView

IMPLEMENT_DYNCREATE(CPlayView, CView)

BEGIN_MESSAGE_MAP(CPlayView, CView)
	//{{AFX_MSG_MAP(CPlayView)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_POP_FILE_SEND, OnPopFileSend)
	ON_COMMAND(ID_POP_REAL_SEND, OnPopRealSend)
	ON_COMMAND(ID_POP_SEND_STOP, OnPopSendStop)
	ON_COMMAND(ID_CAPTURE_SAVE, OnCaptureSave)
	ON_COMMAND(ID_BEGIN_CAPTURE, OnBeginCapture)
	ON_COMMAND(ID_STOP_CAPTURE, OnStopCapture)
	ON_COMMAND(ID_OPEN_PLAYFILE, OnOpenPlayfile)
	ON_COMMAND(ID_PLAYFILE, OnPlayfile)
	ON_COMMAND(ID_FILE_STOP, OnFileStop)
	ON_COMMAND(ID_REALPLAY, OnRealplay)
	ON_COMMAND(ID_REAL_STOP, OnRealStop)
	ON_WM_TIMER()
	ON_COMMAND(ID_PAUSE_PLAY, OnPausePlay)
	ON_COMMAND(ID_RESUME_PLAY, OnResumePlay)
	ON_WM_ERASEBKGND()
	ON_COMMAND(ID_PAUSE_CAPTURE, OnPauseCapture)
	ON_COMMAND(ID_RESUME_CAPTURE, OnResumeCapture)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_VIEW_OUTBAR_NOTIFY, OnOutbarNotify)
	ON_MESSAGE(WM_PLAYOVER,OnPlayOver)
	ON_MESSAGE(WM_READYSEND,OnReadyRealSend)
	ON_MESSAGE(WM_PREPARE_CLOSE,OnPrepareClose)
	ON_MESSAGE(WM_CAPTURE_STOP,OnCaptureStop)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPlayView construction/destruction

//響應WM_CAPTURE_STOP消息,采集大小到,停止采集
LRESULT CPlayView::OnCaptureStop(WPARAM wParam, LPARAM lParam)
{
	//停止采集
    OnStopCapture();
	MessageBox("采集數量到,停止采集");
	//采集大小標志置為FALSE
    m_SizeCheck=FALSE;
	return 0;  
}


LRESULT CPlayView::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
	
	CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
	
	switch (wParam)
	{
	case NM_OB_ITEMCLICK:
		{
			int nFolder =pFrame->m_wndOutlookBar.GetSelFolder();
			int nIndex  = (int)lParam;
			switch (nFolder)
			{
			case PLAY: 
				{
					
					switch (nIndex)
					{
					case Play_Set:
						
						break;
					case Play_Open:
						OnOpenPlayfile();				
						break;
					case Play_Begin:
						OnPlayfile();
						break;
					case Play_Pause:
						pVideoPlay->PausePlay();
						KillTimer(ID_TIMER);
						pFrame->m_wndStatusBar.SetPaneText(0,"暫停");
						break;
					case Play_Resume:
						pVideoPlay->ResumePlay();
						SetTimer(ID_TIMER,1000,NULL);
						pFrame->m_wndStatusBar.SetPaneText(0,"播放");
						break;
					case Play_Stop:
						OnFileStop();
						break;
					}
				}
				break;
				
			case CAPTURE: // Management folder is selected...
				{
					
					switch (nIndex)
					{
					case Cap_Preview:
						OnRealplay();
						break;
					case Cap_Set:
						OnCaptureSave();
						break;
					case Cap_Begin:
						OnBeginCapture();
						break;
					case Cap_Stop:
						OnStopCapture();
						break;
					}
				}
				break;
			}
		}
	}
	return 0;
}


LRESULT CPlayView::OnPrepareClose(WPARAM wParam, LPARAM lParam)
{
    RELEASE_CVIDEOPLAY;
	//關閉設備
   	ClearDriver();

   	if(m_FileSend)
       g_eventFileStopSend.SetEvent();
	//如果在發送實時視頻流,等待線程結束,釋放文件句斌
    if(m_RealSend)
      ::WaitForSingleObject(g_eventRealSend,INFINITE);
    RELEASE_AV8BUFFER;
	//關閉采集文件句柄
	FILE_CLOSE(hmmioOutput);
	//關閉保存文件句柄
	FILE_CLOSE(hmmioSendOutput);
	g_eventClearup.SetEvent();
    return 0;
}

CPlayView::CPlayView()
{
	// TODO: add construction code here
	pVideoPlay=NULL;
	SendCounter=0; 
	hWnd=m_hWnd;
	m_hVFDrv=NULL;
	m_RealSend=FALSE; 
	m_TPlayFile=FALSE;
	m_TCapture=FALSE;
	
	m_SizeCheck=FALSE;
	m_TimeCheck=FALSE;
	m_time=0;
	m_TimeIndex=0;
	Fname="";
	
	Ts=CTimeSpan(0,0,0,0);
	Pos=0;
	m_font.CreatePointFont(90, "宋體");
    
}

CPlayView::~CPlayView()
{
 
}



/////////////////////////////////////////////////////////////////////////////
// CPlayView drawing

void CPlayView::OnDraw(CDC* pDC)
{
	CPlayDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CPlayView diagnostics

#ifdef _DEBUG
void CPlayView::AssertValid() const
{
	CView::AssertValid();
}

void CPlayView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CPlayDoc* CPlayView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlayDoc)));
	return (CPlayDoc*)m_pDocument;
}
#endif //_DEBUG


/////////////////////////////////////////////////////////////////////////////
// CPlayView message handlers



void CPlayView::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CView::CalcWindowRect(lpClientRect, nAdjustType);
}

void CPlayView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	RECT grc;
	// TODO: Add your message handler code here
	if(pVideoPlay)
	{
		if(pVideoPlay->pivw)
		{
			GetClientRect(&grc); 
			pVideoPlay->pivw->SetWindowPosition(grc.left, grc.top, grc.right, grc.bottom);
		}
	}
}



void CPlayView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here

	PopMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);  
}

//響應發送視頻文件命令
void CPlayView::OnPopFileSend() 
{
	// TODO: Add your command handler code here
	CFileDialog dlg(TRUE,NULL,NULL,NULL,"mpeg文件(*.mpg)|*.mpg|AVI文件(*.avi)|*.avi");
	dlg.m_ofn.lpstrTitle="打開多媒體文件";
	if(dlg.DoModal()==IDOK)
	{
			
	    SendFilePath=dlg.GetPathName();
		m_FileSend=TRUE;
		//開始文件發送線程
		AfxBeginThread(FileSendThread,NULL);
//		if(!pVideoPlay)
//		{
//			pVideoPlay=new CVideoPlay(this->m_hWnd);
//			pVideoPlay->PlayFromFile(SendFilePath);
//		}

		CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
		pFrame->m_wndStatusBar.SetPaneText(1,"在發送文件數據");
	}
}


//響應WM_READYSEND消息,啟動發送線程
LRESULT CPlayView::OnReadyRealSend(WPARAM wParam,LPARAM lParam)
{
	LPWSABUF stWSABuf;
	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;
		
		//將傳遞進來的數據壓入視頻流緩沖區隊列
		if (g_pBuffer)
			DWORD dwBytes = g_pBuffer->PushIn((LPSTR)lpBufWrite -> lpBuffer, (DWORD)lpBufWrite -> dwBufferWrite);
		//如果現在在采集數據,將數據寫入到采集文件中
		if (m_Capture)
			if(hmmioOutput)
			{
				lRet = mmioWrite(hmmioOutput, (LPSTR)lpBufWrite -> lpBuffer, (LONG)lpBufWrite -> dwBufferWrite);
				mmioGetInfo(hmmioOutput,&mmioinfoIn, 0);
				//采集文件滿,發送停止采集消息
				if(mmioinfoIn.lDiskOffset>(m_size*1024*1024))
					::SendMessage(hWnd,WM_CAPTURE_STOP,0,0);		
			}
			if (lRet == -1L)
				return (FALSE);
			
	}
	return 1;
}
int CPlayView::InitDriver()
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久国产精品| 亚洲日本一区二区| 欧美日韩中文字幕一区二区| 国产福利一区二区| 国产乱国产乱300精品| 亚洲成人你懂的| 亚洲mv在线观看| 亚洲特级片在线| 亚洲最大色网站| 欧美激情一二三区| 日韩写真欧美这视频| 欧美性大战久久久| 在线观看日韩一区| 欧美一级艳片视频免费观看| 欧美性猛交一区二区三区精品 | 亚洲成av人片| 伊人婷婷欧美激情| 午夜欧美2019年伦理| 一区二区三区91| 亚洲成年人网站在线观看| 亚洲一区二区在线观看视频| 日本韩国欧美在线| 精品国产一区二区三区不卡 | 7777精品伊人久久久大香线蕉的| 99久久99久久精品国产片果冻| 国产成人午夜99999| 色婷婷久久久综合中文字幕| 91在线丨porny丨国产| 欧美在线小视频| 欧美日韩视频在线一区二区| 欧美一区二区三区公司| 精品蜜桃在线看| 国产日韩欧美精品综合| 亚洲国产一区二区在线播放| 日韩成人dvd| 国产麻豆视频一区| 91蜜桃传媒精品久久久一区二区| 在线综合亚洲欧美在线视频| 欧美一级片在线看| 欧美视频在线一区| 中文子幕无线码一区tr| 亚洲丝袜美腿综合| 国产精品中文欧美| 91久久精品一区二区| 久久久久久久久99精品| 最新高清无码专区| 久久99国内精品| 91日韩在线专区| 91国模大尺度私拍在线视频| 26uuu亚洲| 亚洲一区二区精品视频| 成人免费av网站| 欧美日韩国产精选| 亚洲男人的天堂一区二区 | 日韩午夜在线影院| 国产午夜精品久久久久久免费视| 久久精品男人天堂av| 日韩和欧美一区二区三区| 国产精品一区二区在线看| 欧美精品丝袜久久久中文字幕| 精品国精品国产| 美女网站一区二区| 在线免费不卡电影| 97成人超碰视| 日韩美女久久久| 国产精品亚洲午夜一区二区三区 | 国产一区二区在线电影| 91麻豆蜜桃一区二区三区| 欧美激情在线一区二区| 天堂午夜影视日韩欧美一区二区| 91欧美一区二区| 久久久久久日产精品| 国产精品二区一区二区aⅴ污介绍| 国产精品夜夜嗨| 精品国产自在久精品国产| 免费看黄色91| 欧美另类z0zxhd电影| 日韩成人午夜电影| 欧美日韩精品一区二区| 日韩精品一卡二卡三卡四卡无卡| 96av麻豆蜜桃一区二区| 精品国产免费人成电影在线观看四季| 亚洲图片一区二区| 欧美日韩中文国产| 丝袜美腿亚洲一区| 欧美日韩成人综合天天影院| 五月天网站亚洲| 欧美一a一片一级一片| 日韩经典一区二区| 欧美一区二区播放| 激情都市一区二区| 久久婷婷成人综合色| 免费在线看成人av| 国产色爱av资源综合区| 国产福利精品导航| 亚洲免费观看高清完整版在线| 丁香另类激情小说| 亚洲综合图片区| 欧美中文字幕一区| 国产在线播放一区二区三区| 久久精品亚洲一区二区三区浴池| 不卡一卡二卡三乱码免费网站| 综合婷婷亚洲小说| 色综合久久九月婷婷色综合| 亚洲欧美日韩精品久久久久| 欧洲中文字幕精品| 亚洲久草在线视频| 成人综合在线视频| 亚洲成人资源在线| 欧美色网一区二区| 国产一区二区三区在线观看免费视频 | 日韩电影在线看| 欧美高清视频不卡网| 国产一区欧美日韩| 欧美一区二区三区系列电影| 成人av在线播放网站| 亚洲一区二区黄色| 日本一区二区成人| 欧美主播一区二区三区美女| 粉嫩aⅴ一区二区三区四区五区| 最新热久久免费视频| 欧美成人激情免费网| 97久久精品人人爽人人爽蜜臀| 久久精品国产一区二区| 中文字幕一区二区三区视频| 精品国产一区二区亚洲人成毛片| 国产高清精品在线| 久久精品国产精品青草| 成人欧美一区二区三区视频网页| 精品国产精品网麻豆系列| 色综合一个色综合| 久久99精品视频| 亚洲一区二区三区中文字幕 | 日韩一区日韩二区| 欧美色倩网站大全免费| 成人午夜视频网站| 久久成人免费网站| 亚洲aⅴ怡春院| 亚洲午夜影视影院在线观看| 国产情人综合久久777777| 精品久久一区二区| 欧美三级日韩在线| 欧美主播一区二区三区美女| 国产精品88888| 国产精品乡下勾搭老头1| 日本va欧美va精品| 日本sm残虐另类| 亚洲福利国产精品| 亚洲国产另类av| 亚洲视频小说图片| 亚洲婷婷国产精品电影人久久| 国产亚洲欧美中文| 7777精品伊人久久久大香线蕉超级流畅 | 国内偷窥港台综合视频在线播放| 丝袜美腿亚洲综合| 亚洲免费三区一区二区| 一区二区三区精品在线观看| 中文字幕第一页久久| 亚洲欧洲日产国码二区| 亚洲国产精品传媒在线观看| 国产精品成人网| 国产精品蜜臀在线观看| 亚洲色图在线播放| 亚洲少妇30p| 亚洲欧美一区二区三区孕妇| 亚洲国产精品v| 国产精品黄色在线观看| 亚洲一卡二卡三卡四卡 | 欧美群妇大交群中文字幕| 欧美亚洲丝袜传媒另类| 91精品国产91热久久久做人人| 在线视频综合导航| 91精品国产手机| 欧美大片免费久久精品三p | 欧美一级搡bbbb搡bbbb| 正在播放亚洲一区| 国产日韩欧美a| 国产精品久线观看视频| 亚洲超碰精品一区二区| 午夜婷婷国产麻豆精品| 国产麻豆成人精品| 成人av电影在线| 5858s免费视频成人| 日韩免费一区二区| 国产精品久久久久一区二区三区| 久久久精品天堂| 亚洲一区二区三区四区五区黄| 亚洲制服丝袜av| 国产久卡久卡久卡久卡视频精品| 国产精华液一区二区三区| 欧美日韩一级片网站| 欧美一卡二卡在线| 亚洲最色的网站| 美女网站色91| 欧美亚洲图片小说| 欧美成人三级在线| 亚洲成人福利片| 国产伦精品一区二区三区免费| 在线观看成人小视频| 日韩欧美在线不卡|