视频端口引脚
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
具有硬件视频端口的捕获设备可能会在 Microsoft® DirectX® 中使用视频端口扩展(VPE)。 如果是这样,捕获筛选器将具有视频端口(VP)引脚。 没有视频数据通过筛选器图从 VP 引脚传输。 而是在硬件中生成视频帧,并直接发送到视频内存。 VP 引脚允许将控制消息发送到硬件。
连接 VP 引脚非常重要,即使应用程序仅执行文件捕获且没有预览。 如果保持未连接固定的固定,则图形将无法正确运行。 这不同于不需要连接的预览引脚。
不同的 DirectShow 视频呈现器为 VP 引脚提供不同的支持:
- 视频呈现器:将 VP 引脚连接到 覆盖混音器 筛选器上的 pin 0,并将覆盖混音器筛选器连接到视频呈现器。
- VMR-7:将 VP 引脚连接到 视频端口管理器 筛选器,并将视频端口管理器连接到 VMR-7。
- VMR-9:如果设备具有 VP 引脚,则无法使用 VMR-9,因为 Direct3D 9 不支持视频端口。 使用视频呈现器或 VMR-7。
对于视频端口方案,建议通过视频端口管理器和 VMR-7 使用覆盖混音器和视频呈现器,因为并非所有驱动程序都支持视频端口管理器。 通常,覆盖混音器是视频端口最可靠的选项。
如果存在 VP 引脚,则 ICaptureGraphBuilder2::RenderStream 方法会自动插入覆盖混音器。 如果在不使用此方法的情况下生成图形,则应检查捕获筛选器上的视频端口引脚,如果存在,请将其连接到覆盖混音器筛选器,如下图所示。
可以使用 ICaptureGraphBuilder2::FindPin 方法在捕获筛选器上搜索 VP 引脚:
hr = pBuild->FindPin(
pCap, // Pointer to the capture filter.
PINDIR_OUTPUT, // Look for an output pin.
&PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
NULL, // Any media type.
FALSE, // Pin can be connected.
0, // Retrieve the first matching pin.
&pVPPin // Receives a pointer to the pin.
);
将覆盖混音器添加到图形后,再次调用 FindPin 以在覆盖混音器上查找引脚 0。 引脚 0 始终是筛选器上的第一个输入引脚。
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
通过调用 IGraphBuilder::Connect来连接两个引脚。
pGraph->Connect(pVPPin, pOvPin);
然后将覆盖混音器的输出引脚连接到视频呈现器筛选器。 可以通过在 Filter Graph 管理器上调用 IVideoWindow::p ut_AutoShow 和 IVideoWindow::p ut_Visible 方法隐藏视频。
对于电视优化器,捕获筛选器也可能具有视频端口 VBI 引脚(PIN_CATEGORY_VIDEOPORT_VBI)。 如果是,请将该引脚连接到 VBI Surface 分配器 筛选器。 有关详细信息,请参阅 查看隐藏式字幕。
相关主题