`
jgsj
  • 浏览: 975706 次
文章分类
社区版块
存档分类
最新评论

DirectShow 视频捕获(3)

 
阅读更多

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.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics