我有一个DirectShow图表来从网络流中呈现MPEG2/4电影.当我通过手动连接引脚组装图形时,它不会渲染.但是当我在GraphBuilder上调用Render时,渲染效果很好.
显然有一些设置步骤,我没有在GraphBuilder执行的图形中的某个过滤器上执行.
有没有办法在组装图形时看到GraphBuilder的调试输出?
有没有办法转储工作图,看看它是如何组合在一起的?
解开生活在DirectShow盒子里的神秘的任何其他想法?
谢谢!-Z
您可以使用DirectShow SDK中的工具GraphEdit观看您创建的图形.在GraphEdit中,选择文件 - >连接到远程图...
要在列表中查找图形,必须在运行对象表中注册它:
void AddToRot( IUnknown *pUnkGraph, DWORD *pdwRegister ) { IMoniker* pMoniker; IRunningObjectTable* pROT; GetRunningObjectTable( 0, &pROT ); WCHAR wsz[256]; swprintf_s( wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId() ); CreateItemMoniker( L"!", wsz, &pMoniker ); pROT->Register( 0, pUnkGraph, pMoniker, pdwRegister ); // Clean up any COM stuff here ... }
在销毁图形之后,应该通过调用IRunningObjectTable :: Revoke将其从ROT中删除
Roman Ryltsov创建了一个DirectShow Filter Graph Spy工具(http://alax.info/blog/777),它是FilterGraph接口上的一个包装器,它记录了对FilterGraph方法的所有调用.
此外,它会将所有创建的图形添加到运行对象表(ROT)中,然后可以使用GraphEdit或GraphStudio等工具进行可视化.当您需要查看Windows Media Player图形的外观时非常有用.