mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-22 07:14:15 +08:00
style: Change files encoding format to UTF8-BOM
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// CaptureVideo.cpp: implementation of the CCaptureVideo class.
|
||||
// CaptureVideo.cpp: implementation of the CCaptureVideo class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -57,13 +57,13 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||
hResult = m_pGB->AddFilter(m_pBF, L"Capture Filter");
|
||||
|
||||
hResult = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ISampleGrabber, (void**)&m_pGrabber); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
IID_ISampleGrabber, (void**)&m_pGrabber); //引脚内存
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
//m_pGrabber <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD>ʽ 2 <EFBFBD>ڴ滺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
CComQIPtr<IBaseFilter, &IID_IBaseFilter> pGrabBase(m_pGrabber);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʽ
|
||||
AM_MEDIA_TYPE mt; //<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʽ
|
||||
//m_pGrabber 属性设置 1 格式 2 内存缓冲形式
|
||||
CComQIPtr<IBaseFilter, &IID_IBaseFilter> pGrabBase(m_pGrabber);//设置视频格式
|
||||
AM_MEDIA_TYPE mt; //视频格式
|
||||
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
|
||||
mt.majortype = MEDIATYPE_Video;
|
||||
mt.subtype = MEDIASUBTYPE_RGB24; // MEDIASUBTYPE_RGB24
|
||||
@@ -77,10 +77,10 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //<EFBFBD><EFBFBD>̬
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //静态
|
||||
&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
if(FAILED(hResult)) {
|
||||
//<EFBFBD><EFBFBD>
|
||||
//扑捉
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
break;
|
||||
}
|
||||
@@ -93,28 +93,28 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||
if (FAILED(hResult))
|
||||
break;
|
||||
|
||||
//3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FDO һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݾͽ<DDBE><CDBD><EFBFBD> <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
//3 扑捉数据 FDO 一旦有数据就进行 回调函数调用 属于一个类
|
||||
|
||||
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
|
||||
//mCB <EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> <20>и<EFBFBD><D0B8>ص<EFBFBD>
|
||||
//mCB 是个另外一个类 并且全局变量 有个回调
|
||||
mCB.m_ulFullWidth = vih->bmiHeader.biWidth;
|
||||
mCB.m_ulFullHeight = vih->bmiHeader.biHeight;
|
||||
|
||||
FreeMediaType(mt);
|
||||
|
||||
hResult = m_pGrabber->SetBufferSamples( FALSE ); //<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
hResult = m_pGrabber->SetBufferSamples( FALSE ); //回调函数
|
||||
hResult = m_pGrabber->SetOneShot( FALSE );
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʱ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BufferCB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//设置视频捕获回调函数 也就是如果有视频数据时就会调用这个类的BufferCB函数
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>OnTimer
|
||||
//返回OnTimer
|
||||
hResult = m_pGrabber->SetCallback(&mCB, 1);
|
||||
|
||||
m_hWnd = CreateWindow("#32770", "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
||||
|
||||
SetupVideoWindow(); //<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>
|
||||
SetupVideoWindow(); //屏蔽窗口
|
||||
|
||||
hResult = m_pMC->Run(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
hResult = m_pMC->Run(); //开灯
|
||||
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
@@ -129,19 +129,19 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||
HRESULT CCaptureVideo::InitCaptureGraphBuilder()
|
||||
{
|
||||
HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
|
||||
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<EFBFBD><EFBFBD>ʵ<EFBFBD>豸
|
||||
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //真实设备
|
||||
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, (void**)&m_pGB); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
IID_IGraphBuilder, (void**)&m_pGB); //虚拟设备
|
||||
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//将过滤绑定到真实设备上面
|
||||
m_pCapture->SetFiltergraph(m_pGB);
|
||||
hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC);
|
||||
if (FAILED(hResult)) {
|
||||
@@ -157,7 +157,7 @@ HRESULT CCaptureVideo::InitCaptureGraphBuilder()
|
||||
|
||||
LPBITMAPINFO CCaptureVideo::GetBmpInfor()
|
||||
{
|
||||
return mCB.GetBmpInfor(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<EFBFBD>ڴ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return mCB.GetBmpInfor(); //构建位图内存头和数据
|
||||
}
|
||||
|
||||
BOOL CCaptureVideo::BindVideoFilter(int deviceId, IBaseFilter **pFilter)
|
||||
@@ -181,7 +181,7 @@ BOOL CCaptureVideo::BindVideoFilter(int deviceId, IBaseFilter **pFilter)
|
||||
int index = 0;
|
||||
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId) {
|
||||
IPropertyBag *pBag;
|
||||
//ͨ<EFBFBD><EFBFBD>BindToStorage <EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD>ʸ<EFBFBD><EFBFBD>豸<EFBFBD>ı<EFBFBD>ʶ<EFBFBD><EFBFBD>
|
||||
//通过BindToStorage 可以访问该设备的标识集
|
||||
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
|
||||
if(SUCCEEDED(hr)) {
|
||||
VARIANT var;
|
||||
@@ -193,7 +193,7 @@ BOOL CCaptureVideo::BindVideoFilter(int deviceId, IBaseFilter **pFilter)
|
||||
}
|
||||
SysFreeString(var.bstrVal);
|
||||
}
|
||||
pBag->Release(); //<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD>--
|
||||
pBag->Release(); //引用计数--
|
||||
}
|
||||
pM->Release();
|
||||
index++;
|
||||
@@ -233,11 +233,11 @@ void CCaptureVideo::ResizeVideoWindow()
|
||||
if (m_pVW) {
|
||||
RECT rc;
|
||||
::GetClientRect(m_hWnd,&rc);
|
||||
m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>0 0 0 0 <EFBFBD><EFBFBD>
|
||||
m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //将窗口设置到0 0 0 0 处
|
||||
}
|
||||
}
|
||||
|
||||
void CCaptureVideo::SendEnd() //<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
void CCaptureVideo::SendEnd() //发送结束 设置可以再取数据
|
||||
{
|
||||
InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY);
|
||||
}
|
||||
@@ -245,10 +245,10 @@ void CCaptureVideo::SendEnd() //
|
||||
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
|
||||
{
|
||||
BYTE *szBuffer = NULL;
|
||||
int n = 200; // 10sû<EFBFBD>л<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
|
||||
int n = 200; // 10s没有获取到数据则返回NULL
|
||||
do {
|
||||
if (mCB.bStact==CMD_CAN_SEND) { //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>·<EFBFBD><EFBFBD>͵<EFBFBD>״̬
|
||||
if (szBuffer = mCB.GetNextScreen(dwSize)) //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
||||
if (mCB.bStact==CMD_CAN_SEND) { //这里改变了一下发送的状态
|
||||
if (szBuffer = mCB.GetNextScreen(dwSize)) //是否获取到视频
|
||||
break;
|
||||
}
|
||||
Sleep(50);
|
||||
|
||||
Reference in New Issue
Block a user