style: Format source code and support grouping client
This commit is contained in:
@@ -12,262 +12,247 @@ CSampleGrabberCB CCaptureVideo::mCB;
|
||||
|
||||
CCaptureVideo::CCaptureVideo()
|
||||
{
|
||||
m_pCapture = NULL;
|
||||
m_pGB = NULL;
|
||||
m_pMC = NULL;
|
||||
m_pVW = NULL;
|
||||
m_pBF = NULL;
|
||||
m_pGrabber = NULL;
|
||||
m_bExit = FALSE;
|
||||
m_hWnd = NULL;
|
||||
if (FAILED(CoInitialize(NULL)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_pCapture = NULL;
|
||||
m_pGB = NULL;
|
||||
m_pMC = NULL;
|
||||
m_pVW = NULL;
|
||||
m_pBF = NULL;
|
||||
m_pGrabber = NULL;
|
||||
m_bExit = FALSE;
|
||||
m_hWnd = NULL;
|
||||
if (FAILED(CoInitialize(NULL))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CCaptureVideo::~CCaptureVideo()
|
||||
{
|
||||
m_bExit = TRUE;
|
||||
if(m_pMC)m_pMC->StopWhenReady();
|
||||
if(m_pVW){
|
||||
m_pVW->put_Visible(OAFALSE);
|
||||
m_pVW->put_Owner(NULL);
|
||||
}
|
||||
SAFE_RELEASE(m_pMC);
|
||||
SAFE_RELEASE(m_pVW);
|
||||
SAFE_RELEASE(m_pGB);
|
||||
SAFE_RELEASE(m_pBF);
|
||||
SAFE_RELEASE(m_pGrabber);
|
||||
SAFE_RELEASE(m_pCapture);
|
||||
m_bExit = TRUE;
|
||||
if(m_pMC)m_pMC->StopWhenReady();
|
||||
if(m_pVW) {
|
||||
m_pVW->put_Visible(OAFALSE);
|
||||
m_pVW->put_Owner(NULL);
|
||||
}
|
||||
SAFE_RELEASE(m_pMC);
|
||||
SAFE_RELEASE(m_pVW);
|
||||
SAFE_RELEASE(m_pGB);
|
||||
SAFE_RELEASE(m_pBF);
|
||||
SAFE_RELEASE(m_pGrabber);
|
||||
SAFE_RELEASE(m_pCapture);
|
||||
|
||||
CoUninitialize() ;
|
||||
CoUninitialize() ;
|
||||
}
|
||||
|
||||
HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
|
||||
{
|
||||
Mprintf("CCaptureVideo call Open\n");
|
||||
HRESULT hResult = S_OK;
|
||||
do
|
||||
{
|
||||
hResult = InitCaptureGraphBuilder();
|
||||
if (FAILED(hResult))
|
||||
break;
|
||||
if(!BindVideoFilter(iDeviceID, &m_pBF))
|
||||
break;
|
||||
Mprintf("CCaptureVideo call Open\n");
|
||||
HRESULT hResult = S_OK;
|
||||
do {
|
||||
hResult = InitCaptureGraphBuilder();
|
||||
if (FAILED(hResult))
|
||||
break;
|
||||
if(!BindVideoFilter(iDeviceID, &m_pBF))
|
||||
break;
|
||||
|
||||
hResult = m_pGB->AddFilter(m_pBF, L"Capture Filter");
|
||||
hResult = m_pGB->AddFilter(m_pBF, L"Capture Filter");
|
||||
|
||||
hResult = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ISampleGrabber, (void**)&m_pGrabber); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
hResult = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ISampleGrabber, (void**)&m_pGrabber); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
//m_pGrabber <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><>ʽ 2 <20>ڴ滺<DAB4><E6BBBA><EFBFBD><EFBFBD>ʽ
|
||||
CComQIPtr<IBaseFilter, &IID_IBaseFilter> pGrabBase(m_pGrabber);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ʽ
|
||||
AM_MEDIA_TYPE mt; //<2F><>Ƶ<EFBFBD><C6B5>ʽ
|
||||
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
|
||||
mt.majortype = MEDIATYPE_Video;
|
||||
mt.subtype = MEDIASUBTYPE_RGB24; // MEDIASUBTYPE_RGB24
|
||||
//m_pGrabber <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20><>ʽ 2 <20>ڴ滺<DAB4><E6BBBA><EFBFBD><EFBFBD>ʽ
|
||||
CComQIPtr<IBaseFilter, &IID_IBaseFilter> pGrabBase(m_pGrabber);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ʽ
|
||||
AM_MEDIA_TYPE mt; //<2F><>Ƶ<EFBFBD><C6B5>ʽ
|
||||
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
|
||||
mt.majortype = MEDIATYPE_Video;
|
||||
mt.subtype = MEDIASUBTYPE_RGB24; // MEDIASUBTYPE_RGB24
|
||||
|
||||
hResult = m_pGrabber->SetMediaType(&mt);
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
hResult = m_pGB->AddFilter(pGrabBase,L"Grabber");
|
||||
hResult = m_pGrabber->SetMediaType(&mt);
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
hResult = m_pGB->AddFilter(pGrabBase,L"Grabber");
|
||||
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //<2F><>̬
|
||||
&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
if(FAILED(hResult))
|
||||
{
|
||||
//<2F><>
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
break;
|
||||
}
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
hResult = m_pGrabber->GetConnectedMediaType(&mt);
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, //<2F><>̬
|
||||
&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
if(FAILED(hResult)) {
|
||||
//<2F><>
|
||||
hResult = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pBF,pGrabBase,NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
if (FAILED(hResult))
|
||||
break;
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
|
||||
//3 <20><><EFBFBD><D7BD><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>
|
||||
hResult = m_pGrabber->GetConnectedMediaType(&mt);
|
||||
|
||||
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
|
||||
//mCB <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> <20>и<EFBFBD><D0B8>ص<EFBFBD>
|
||||
mCB.m_ulFullWidth = vih->bmiHeader.biWidth;
|
||||
mCB.m_ulFullHeight = vih->bmiHeader.biHeight;
|
||||
if (FAILED(hResult))
|
||||
break;
|
||||
|
||||
FreeMediaType(mt);
|
||||
//3 <20><><EFBFBD><D7BD><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>
|
||||
|
||||
hResult = m_pGrabber->SetBufferSamples( FALSE ); //<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
hResult = m_pGrabber->SetOneShot( FALSE );
|
||||
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
|
||||
//mCB <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> <20>и<EFBFBD><D0B8>ص<EFBFBD>
|
||||
mCB.m_ulFullWidth = vih->bmiHeader.biWidth;
|
||||
mCB.m_ulFullHeight = vih->bmiHeader.biHeight;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><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<43><42><EFBFBD><EFBFBD>
|
||||
FreeMediaType(mt);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>OnTimer
|
||||
hResult = m_pGrabber->SetCallback(&mCB, 1);
|
||||
hResult = m_pGrabber->SetBufferSamples( FALSE ); //<2F>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
hResult = m_pGrabber->SetOneShot( FALSE );
|
||||
|
||||
m_hWnd = CreateWindow("#32770", "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><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<43><42><EFBFBD><EFBFBD>
|
||||
|
||||
SetupVideoWindow(); //<2F><><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>OnTimer
|
||||
hResult = m_pGrabber->SetCallback(&mCB, 1);
|
||||
|
||||
hResult = m_pMC->Run(); //<2F><><EFBFBD><EFBFBD>
|
||||
m_hWnd = CreateWindow("#32770", "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
|
||||
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
} while (false);
|
||||
SetupVideoWindow(); //<2F><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
||||
|
||||
Mprintf("CCaptureVideo Open %s\n", FAILED(hResult) ? "failed" : "succeed");
|
||||
hResult = m_pMC->Run(); //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
return hResult;
|
||||
if(FAILED(hResult))
|
||||
break;
|
||||
} while (false);
|
||||
|
||||
Mprintf("CCaptureVideo Open %s\n", FAILED(hResult) ? "failed" : "succeed");
|
||||
|
||||
return hResult;
|
||||
}
|
||||
|
||||
|
||||
HRESULT CCaptureVideo::InitCaptureGraphBuilder()
|
||||
{
|
||||
HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
|
||||
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<2F><>ʵ<EFBFBD>豸
|
||||
HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
|
||||
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<2F><>ʵ<EFBFBD>豸
|
||||
|
||||
if (FAILED(hResult))
|
||||
{
|
||||
return hResult;
|
||||
}
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, (void**)&m_pGB); //<2F><><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
hResult=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, (void**)&m_pGB); //<2F><><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
|
||||
if (FAILED(hResult))
|
||||
{
|
||||
return hResult;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˰<CBB0><F3B6A8B5><EFBFBD>ʵ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
m_pCapture->SetFiltergraph(m_pGB);
|
||||
hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC);
|
||||
if (FAILED(hResult))
|
||||
{
|
||||
return hResult;
|
||||
}
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˰<CBB0><F3B6A8B5><EFBFBD>ʵ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
m_pCapture->SetFiltergraph(m_pGB);
|
||||
hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC);
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW);
|
||||
if (FAILED(hResult))
|
||||
{
|
||||
return hResult;
|
||||
}
|
||||
return hResult;
|
||||
hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW);
|
||||
if (FAILED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
return hResult;
|
||||
}
|
||||
|
||||
LPBITMAPINFO CCaptureVideo::GetBmpInfor()
|
||||
{
|
||||
return mCB.GetBmpInfor(); //<2F><><EFBFBD><EFBFBD>λͼ<CEBB>ڴ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return mCB.GetBmpInfor(); //<2F><><EFBFBD><EFBFBD>λͼ<CEBB>ڴ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
BOOL CCaptureVideo::BindVideoFilter(int deviceId, IBaseFilter **pFilter)
|
||||
{
|
||||
if (deviceId < 0)
|
||||
return FALSE;// enumerate all video capture devices
|
||||
CComPtr<ICreateDevEnum> pCreateDevEnum;
|
||||
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ICreateDevEnum, (void**)&pCreateDevEnum);
|
||||
if (hr != NOERROR)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
CComPtr<IEnumMoniker> pEm;
|
||||
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0);
|
||||
if (hr != NOERROR)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
pEm->Reset();
|
||||
ULONG cFetched;
|
||||
IMoniker *pM;
|
||||
int index = 0;
|
||||
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId)
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
//ͨ<><CDA8>BindToStorage <20><><EFBFBD>Է<EFBFBD><D4B7>ʸ<EFBFBD><CAB8>豸<EFBFBD>ı<EFBFBD>ʶ<EFBFBD><CAB6>
|
||||
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
VARIANT var;
|
||||
var.vt = VT_BSTR;
|
||||
hr = pBag->Read(L"FriendlyName", &var, NULL);
|
||||
if (hr == NOERROR)
|
||||
{
|
||||
if (index == deviceId)
|
||||
{
|
||||
pM->BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter);
|
||||
}
|
||||
SysFreeString(var.bstrVal);
|
||||
}
|
||||
pBag->Release(); //<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>--
|
||||
}
|
||||
pM->Release();
|
||||
index++;
|
||||
}
|
||||
return TRUE;
|
||||
if (deviceId < 0)
|
||||
return FALSE;// enumerate all video capture devices
|
||||
CComPtr<ICreateDevEnum> pCreateDevEnum;
|
||||
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ICreateDevEnum, (void**)&pCreateDevEnum);
|
||||
if (hr != NOERROR) {
|
||||
return FALSE;
|
||||
}
|
||||
CComPtr<IEnumMoniker> pEm;
|
||||
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0);
|
||||
if (hr != NOERROR) {
|
||||
return FALSE;
|
||||
}
|
||||
pEm->Reset();
|
||||
ULONG cFetched;
|
||||
IMoniker *pM;
|
||||
int index = 0;
|
||||
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK, index <= deviceId) {
|
||||
IPropertyBag *pBag;
|
||||
//ͨ<><CDA8>BindToStorage <20><><EFBFBD>Է<EFBFBD><D4B7>ʸ<EFBFBD><CAB8>豸<EFBFBD>ı<EFBFBD>ʶ<EFBFBD><CAB6>
|
||||
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
|
||||
if(SUCCEEDED(hr)) {
|
||||
VARIANT var;
|
||||
var.vt = VT_BSTR;
|
||||
hr = pBag->Read(L"FriendlyName", &var, NULL);
|
||||
if (hr == NOERROR) {
|
||||
if (index == deviceId) {
|
||||
pM->BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter);
|
||||
}
|
||||
SysFreeString(var.bstrVal);
|
||||
}
|
||||
pBag->Release(); //<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>--
|
||||
}
|
||||
pM->Release();
|
||||
index++;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void CCaptureVideo::FreeMediaType(AM_MEDIA_TYPE& mt)
|
||||
{
|
||||
if (mt.cbFormat != 0) {
|
||||
CoTaskMemFree((PVOID)mt.pbFormat);
|
||||
mt.cbFormat = 0;
|
||||
mt.pbFormat = NULL;
|
||||
}
|
||||
if (mt.pUnk != NULL) {
|
||||
mt.pUnk->Release();
|
||||
mt.pUnk = NULL;
|
||||
}
|
||||
if (mt.cbFormat != 0) {
|
||||
CoTaskMemFree((PVOID)mt.pbFormat);
|
||||
mt.cbFormat = 0;
|
||||
mt.pbFormat = NULL;
|
||||
}
|
||||
if (mt.pUnk != NULL) {
|
||||
mt.pUnk->Release();
|
||||
mt.pUnk = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
HRESULT CCaptureVideo::SetupVideoWindow()
|
||||
{
|
||||
HRESULT hr;
|
||||
hr = m_pVW->put_Owner((OAHWND)m_hWnd);
|
||||
if (FAILED(hr))return hr;
|
||||
hr = m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
|
||||
if (FAILED(hr))return hr;
|
||||
ResizeVideoWindow();
|
||||
hr = m_pVW->put_Visible(OATRUE);
|
||||
return hr;
|
||||
HRESULT hr;
|
||||
hr = m_pVW->put_Owner((OAHWND)m_hWnd);
|
||||
if (FAILED(hr))return hr;
|
||||
hr = m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
|
||||
if (FAILED(hr))return hr;
|
||||
ResizeVideoWindow();
|
||||
hr = m_pVW->put_Visible(OATRUE);
|
||||
return hr;
|
||||
}
|
||||
|
||||
void CCaptureVideo::ResizeVideoWindow()
|
||||
{
|
||||
if (m_pVW){
|
||||
RECT rc;
|
||||
::GetClientRect(m_hWnd,&rc);
|
||||
m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>0 0 0 0 <20><>
|
||||
}
|
||||
if (m_pVW) {
|
||||
RECT rc;
|
||||
::GetClientRect(m_hWnd,&rc);
|
||||
m_pVW->SetWindowPosition(0, 0, rc.right, rc.bottom); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>0 0 0 0 <20><>
|
||||
}
|
||||
}
|
||||
|
||||
void CCaptureVideo::SendEnd() //<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
{
|
||||
InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY);
|
||||
InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY);
|
||||
}
|
||||
|
||||
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
|
||||
{
|
||||
BYTE *szBuffer = NULL;
|
||||
int n = 200; // 10sû<73>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
|
||||
do
|
||||
{
|
||||
if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>·<EFBFBD><EFBFBD>͵<EFBFBD>״̬
|
||||
{
|
||||
if (szBuffer = mCB.GetNextScreen(dwSize)) //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ƶ
|
||||
break;
|
||||
}
|
||||
Sleep(50);
|
||||
} while (!m_bExit && --n);
|
||||
BYTE *szBuffer = NULL;
|
||||
int n = 200; // 10sû<73>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
|
||||
do {
|
||||
if (mCB.bStact==CMD_CAN_SEND) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬
|
||||
if (szBuffer = mCB.GetNextScreen(dwSize)) //<2F>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
||||
break;
|
||||
}
|
||||
Sleep(50);
|
||||
} while (!m_bExit && --n);
|
||||
|
||||
return szBuffer;
|
||||
return szBuffer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user