查看directshow的filter的连接

在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();
    }
}

完。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示