Capture Graph Builder
原文:http://msdn.microsoft.com/en-us/library/ms940047.aspx
执行视频或者音频捕获的过滤图表叫做捕获图表。捕获图表经常比 文件回放图表复杂。为了应用程序更简单的创建捕获图表,DirectShow提供了一个Capture Graph Builder 帮助对象。Capture Graph Builder暴露了ICaptureGraphBuilder2接口,这些接口包含创建和控制捕获图表的方法。
开始时调用CoCreateInstance创建一个新Capture Graph Builder和 Filter Graph Manager实例。然后使用指向过滤器图表管理器的IGraphBuilder 接口的指针调用ICaptureGraphBuilder2::SetFiltergraph来初始化Capture Graph Builder。
下面的代码显示了执行这些步骤的相关函数
HRESULT InitCaptureGraphBuilder(
IGraphBuilder **ppGraph, // Receives the pointer.
ICaptureGraphBuilder2 **ppBuild // Receives the pointer.
)
{
if (!ppGraph || !ppBuild) {
return E_POINTER;
}
IGraphBuilder *pGraph = NULL;
ICaptureGraphBuilder2 *pBuild = NULL;
// Create the Capture Graph Builder.
HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder, NULL,
CLSCTX_INPROC_SERVER, IID_IcaptureGraphBuilder2, (void**)&pBuild);
if (SUCCEEDED(hr)) {
// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void**)&pGraph);
if (SUCCEEDED(hr)) {
// Initialize the Capture Graph Builder.
pBuild->SetFiltergraph(pGraph);
// Return both interface pointers to the caller.
*ppBuild = pBuild;
*ppGraph = pGraph; // The caller must release both interfaces.
return S_OK;
}
else {
pBuild->Release();
}
}
return hr; // Failed
}
在这段视频捕获的代码中,假设你使用Capture Graph Builder来创建捕获图表。并且可以使用IGraphBuilder方法来创建完整的捕获图表。这被认为是一个高级的方法,而且Capture Graph Builder 方法要优先选择。要获取更多信息参加Advanced Capture Topics.