一个DirectShow应用程序总是执行相同的基本步骤:
- 创建一个Filter Graph Manager的示例;
- 使用Filter Graph Manager来构建Filter graph;
- 运行Graph,使数据通过Filter流动;
在编译之前,请包含头文件Dshow.h并链接到静态库文件strmiids.lib.
首先调用CoInitialize或CoInitializeEx来初始化COM库:
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// Add error-handling code here. (Omitted for clarity.)
}
为了简单起见,这个例子忽略了返回值,但你应该总是从任何方法调用中检查HRESULT值。
接下来,调用CoCreateInstance来创建Filter Graph Manager:
IGraphBuilder *pGraph;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
如上所示,类型标识符(CLSID)为CLSID_FilterGraph。Filter Graph Manager由一个进程内DLL提供,因此执行上下文是CLSCTX_INPROC_SERVER。DirectShow支持免费线程模型,因此你也可以使用C