连接两个筛选器
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
本主题介绍一些用于连接 DirectShow 筛选器的帮助程序函数。
若要连接两个筛选器,必须在上游筛选器上找到一个未连接的输出引脚,并在下游筛选器上找到一个未连接的输入引脚。
如果已有指向这两个图钉的指针,请调用 IGraphBuilder::Connect 方法来连接它们。 如果引脚无法直接相互连接, IGraphBuilder::Connect 方法可能会插入其他筛选器以完成连接。 有关详细信息,请参阅 智能连接。
如果你有指向筛选器的指针,但没有指向引脚的指针,则必须使用 IBaseFilter::EnumPins 方法来查找引脚。 (请参阅 枚举 Pins.) 本主题中的帮助程序函数演示了此方法。
输出固定到筛选器
以下函数采用两个参数:指向输出引脚的指针和指向筛选器的指针。 函数将输出引脚连接到筛选器上第一个可用的输入引脚。
// Connect output pin to filter.
HRESULT ConnectFilters(
IGraphBuilder *pGraph, // Filter Graph Manager.
IPin *pOut, // Output pin on the upstream filter.
IBaseFilter *pDest) // Downstream filter.
{
IPin *pIn = NULL;
// Find an input pin on the downstream filter.
HRESULT hr = FindUnconnectedPin(pDest, PINDIR_INPUT, &pIn);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pIn->Release();
}
return hr;
}
此函数执行以下操作:
-
FindUnconnectedPin
调用 函数以获取未连接的输入引脚。 此函数在 主题查找筛选器上的未连接固定中显示。 - 调用 IGraphBuilder::Connect 以连接两个引脚。
筛选到输入引脚
下一个函数采用指向筛选器的指针和指向输入引脚的指针。 它将输入引脚连接到筛选器上的第一个可用输出引脚。
// Connect filter to input pin.
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IPin *pIn)
{
IPin *pOut = NULL;
// Find an output pin on the upstream filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pOut->Release();
}
return hr;
}
筛选到筛选
第三个函数采用指向上游筛选器的指针和指向下游筛选器的指针,并尝试连接这两个筛选器。
// Connect filter to filter
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IBaseFilter *pDest)
{
IPin *pOut = NULL;
// Find an output pin on the first filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
hr = ConnectFilters(pGraph, pOut, pDest);
pOut->Release();
}
return hr;
}
相关主题