2,542
社区成员
发帖
与我相关
我的任务
分享
{{
// 创建IGraphBuilder接口
hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&(m_pGB));
CHECK_RET(hr);
// 创建ICaptureGraphBuilder2接口
hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **) &(m_pCapture));
CHECK_RET(hr);
m_pCapture->SetFiltergraph(m_pGB);
hr = m_pGB->QueryInterface(IID_IMediaControl, (void **)&(m_pMC));
CHECK_RET(hr);
}}
if(!BindFilter(0, &(m_pBF)))
{
LogD(_Q_D,L"[摄像头]-[BindFilter失败]");
return E_FAIL;
}
hr = m_pGB->AddFilter(m_pBF, L"Capture Filter");
if(FAILED(hr))
{
LogD(_Q_D,L"[摄像头]-[AddFilter失败]");
return hr;
}
//Added Code
const GUID CLSID_AVIDecompress ={0xCF49D4E0, 0x1115, 0x11CE, 0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70};
hr = AddFilterByCLSID(m_pGB, CLSID_AVIDecompress, TEXT("AVI Decompressor"),&m_pAviDec);
if (FAILED(hr))
{
LogD(_Q_D,L"[摄像头]-[OSDFilter加载失败]");
AfxMessageBox(TEXT("Capturefliter to OSDFilter load fail!"));
}
const GUID CLSID_FilterFont ={0xe3fb4bfe, 0x8e5c, 0x4aec, 0x81, 0x62, 0x7d, 0xa5, 0x5b, 0xe4, 0x86, 0xa1};
hr = AddFilterByCLSID(m_pGB,CLSID_FilterFont, TEXT("HQ Title Overlay Std."),&m_pMuxOsd);
if (FAILED(hr))
{
LogD(_Q_D,L"[摄像头]-[OSDFilter加载失败]");
AfxMessageBox(TEXT("Capturefliter to OSDFilter load fail!"));
}
hr = ConnectFilters(m_pGB,m_pBF,m_pAviDec);
if (FAILED(hr))
{
LogD(_Q_D,L"[摄像头]-[OSDFilter连接失败]");
AfxMessageBox(TEXT("Capturefliter to OSDFilter connect fail!"));
}
hr = ConnectFilters(m_pGB,m_pAviDec,m_pMuxOsd);
if (FAILED(hr))
{
LogD(_Q_D,L"[摄像头]-[OSDFilter连接失败]");
AfxMessageBox(TEXT("Capturefliter to OSDFilter connect fail!"));
}
IBaseFilter *pMux = NULL;
m_pCapture->SetOutputFileName(&MEDIASUBTYPE_Asf,
m_sFileName.c_str(),
&pMux,
NULL);
if(pMux == NULL)
{
LogD(_Q_D,L"[摄像头]-[SetOutputFileName失败]");
}
IConfigAsfWriter *pConfig = 0;
hr = pMux->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if (SUCCEEDED(hr))
{
pConfig->ConfigureFilterUsingProfileGuid(WMProfile_V80_288VideoOnly);
pConfig->Release();
}
//hr = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF,NULL,pMux);
hr = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pBF, NULL, pMux);
if( FAILED( hr ) )
{
LogD(_Q_D,L"[摄像头]-[RenderStream失败]");
//hr = m_pCapture->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF,NULL,pMux);
hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, m_pBF, NULL, pMux);
}
pMux->Release();