在我们编程构建filter链路之前,我们怎么来证明构思中的filter链路是切实可行的呢?最常用的方法是,首先在graphedit中验证,然后再以graphedit中的filter链路为模型在程序中实现。
在DirectShow开发指南中提示:GraphEdit的这个功能仅在Windows2000或Windows XP上支持。那么在win7 系统下能用GraphEdit的辅助调试功能?
在程序中构建完filter链路后,有时候并不会马上能够正常运行。要是能够“直观地”看到在程序中filter是怎么连接的,问题就要好办 一点了。实际上,GraphEdit也提供了这样一种能够显示其它应用程序创建的FilterGraph的功能。
要实用GraphEdit的这个功能,在程序中创建了加入:
For GraphEdit Dubug purpose /
void CDXGraph::AddToObjectTable(void)
{
IMoniker * pMoniker = 0;
IRunningObjectTable * objectTable = 0;
if (SUCCEEDED(GetRunningObjectTable(0, &objectTable)))
{
WCHAR wsz[256];
wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)mGraph, GetCurrentProcessId());
HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
if (SUCCEEDED(hr))
{
hr = objectTable->Register(0, mGraph, pMoniker, &mObjectTableEntry);
pMoniker->Release();
}
objectTable->Release();
}
}
void CDXGraph::RemoveFromObjectTable(void)
{
IRunningObjectTable * objectTable = 0;
if (SUCCEEDED(GetRunningObjectTable(0, &objectTable)))
{
objectTable->Revoke(mObjectTableEntry);
objectTable->Release();
mObjectTableEntry = 0;
}
}
在DirectShow开发指南中提示:GraphEdit的这个功能仅在Windows2000或Windows XP上支持。那么在win7 系统下能用GraphEdit的辅助调试功能?
本人开发环境是:win7(64bit)+vs2010
开始发现并不能用GraphEdit的辅助调试功能,原因:
windows7将一部分功能从quartz.dll转移到了proppage.dll,所以需要以管理员身份在命令行窗口手动注册一下regsvr32 proppage.dll
win7 下配置Directshow 见http://blog.csdn.net/luckyboy101/article/details/7801173
proppage.dll 目录为C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
以管理员身份注册:regsvr32 C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
注册成功后,运行vs2010项目,然后打开GraphEdit->File->connet to remote graph...就可以显示filter的情况了