2,554
社区成员
发帖
与我相关
我的任务
分享
AddSourceByFilterCLSID(m_pGraph, SOURCE_FILTER, L"SOURCE FILTER", wPath);
HRESULT CDxGraph::AddSourceByFilterCLSID(IGraphBuilder *pGraph,
const GUID& clsid,
LPCWSTR wszName,
LPCWSTR wszFileName)
{
if (!pGraph) return E_POINTER;
IBaseFilter *pF = 0;
HRESULT hr = S_OK;
hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pF));
if (SUCCEEDED(hr))
{
hr = pGraph->AddFilter(pF, wszName);
if (SUCCEEDED(hr))
{
IFileSourceFilter *pSF = NULL;
hr = pF->QueryInterface(IID_IFileSourceFilter, (void**)&pSF);
if (SUCCEEDED(hr))
{
pSF->Load(wszFileName, NULL);
pSF->Release();
}
}
if (SUCCEEDED(hr))
{
IEnumPins *pEnum;
IPin *pPin;
hr = pF->EnumPins(&pEnum);
if (SUCCEEDED(hr))
{
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION pinDirThis;
pPin->QueryDirection(&pinDirThis);
if (PINDIR_OUTPUT == pinDirThis)
{
hr = pGraph->Render(pPin);
if (FAILED(hr))
{
break;
}
}
pPin->Release();
}
pEnum->Release();
}
}
pF->Release();
}
return hr;
}