在graphedit中我们可以看到filter,还有filter的pin,以及他们是怎么连接的。
我们在程序中添加filter,连接它们,我们没法可视化查看它们,但是我们可以通过graphedit中远程连接到我们程序中连接的filter,怎么做到呢?
directshow提供了一个
IRunningObjectTable::Register
方法,可以让我们把想要的查看的graphbuilder的注册,然后就可以使用graphedit远程连接了。
具体代码:
HRESULT AddToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
IMoniker * pMoniker;
IRunningObjectTable *pROT;
if (FAILED(GetRunningObjectTable(0, &pROT)))
{
return E_FAIL;
}
WCHAR wsz[256];
swprintf(wsz, L”FilterGraph %08x pid %08x”, (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L”!”, wsz, &pMoniker);
if (SUCCEEDED(hr)) {
hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph,
pMoniker, pdwRegister);
pMoniker->Release();
}
pROT->Release();
return hr;
}
用完之后记得要反注册。
void RemoveFromRot( DWORD pdwRegister )
{
IRunningObjectTable *pROT;
if (SUCCEEDED(GetRunningObjectTable( 0, &pROT ))) {
pROT->Revoke(pdwRegister);
pROT->Release();
}
}
完。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.