基于视频端口的捕获
捕获基于视频端口的设备必须提供连接到视频端口管理器的视频端口引脚。 视频端口引脚允许基于硬件的传输显示预览流,而无需 CPU 或外围组件互连(PCI)总线开销。 单独的引脚提供捕获功能(例如,捕获的视频必须写入磁盘时)。 在捕获过程中,捕获缓冲区提供给显示驱动程序,该驱动程序通过总线主控来填充缓冲区。 捕获微型驱动程序与显示驱动程序之间的交互在本节稍后和内核模式视频传输中进行了进一步详细介绍。
在运行 Microsoft Windows 98 SE 或 Windows 2000 的系统上,覆盖混音器筛选器(后续操作系统中的视频端口管理器筛选器的一部分)不支持辅助监视器上的视频端口连接。 在这种情况下,引脚连接失败。 运行 Windows Millennium Edition(Windows Me)和 Windows XP 的系统支持辅助监视器上的视频端口连接。
如果设备支持 VBI 捕获,它通常会公开另外两个引脚:VPVBI 和 VBI。 视频端口管理器筛选器使用 VPVBI 引脚为 VBI 捕获分配视频端口图面。 VBI 引脚本身提供原始 VBI 示例。
下图显示了 VPVBI 和 VBI 捕获的单独路径。
特定于此类筛选器图的属性集是 KSPROPSETID_VPConfig和KSPROPSETID_VPVBIConfig 和 PROPSETID_ALLOCATOR_CONTROL。
使用视频端口扩展 (VPE)
注意: 以下段落仅适用于下一版本的 Windows Vista 之前的操作系统。 如果显示驱动程序使用新的 Windows Vista 驱动程序显示模型(LDDM),则 VPE 在 Windows Vista 中处于禁用状态。
视频捕获微型驱动程序可以使用 DxApi 函数与视频微型端口驱动程序进行通信,以允许捕获流视频在捕获硬件与显示硬件之间的视频端口总线之间传输。 该流由 NTSC、PAL 或 SECAM 视频的顺序字段组成,可以包括空白(VBI)和时间码(水平同步和垂直同步)数据。 视频流特征(包括维度、颜色格式、频率、缩放和裁剪)是通过 VPE DirectDraw 界面在用户模式下配置的。 流式处理启动后, 在内核模式下调用 DxApi 以捕获单个帧。 为了支持显示更改(如分辨率更改或切换到全屏命令提示符),视频捕获微型驱动程序还必须向视频微型端口驱动程序注册,以便他们可以响应此类显示更改事件。
使用 DirectX 5.0 向 DirectDraw DDI 引入了 VPE 和 DxApi 函数。 Windows 2000 及更高版本中的视频微型端口驱动程序支持 DxApi 。 虚拟显示微型端口驱动程序(miniVDD)支持 Windows 98 和 Windows Me 操作系统中的 DxApi 。 若要使用 DxApi 启用内核模式视频传输,WDM 视频捕获微型驱动程序必须包含 ddkmapi.h (DirectDraw 内核模式 API)头文件并链接到 dxapi.lib 库。 DxApi 库使用dxapi.sys导出的功能。 仅当加载 DirectDraw 时,DxApi.sys才可用,因为 DxApi 是 DirectDraw DDI 的 VPN 的一部分。
DxApi 是DxApi.sys公开的单个内核模式 API。 视频端口扩展是DDraw.dll公开的用户模式 API。 视频捕获微型驱动程序必须对 DxApi 进行多次不同的调用,才能设置和配置视频端口硬件以正确进行流式传输。
DxApi 是封装多个函数标识符的单个函数。 微型驱动程序将第一个参数中所需的函数标识符传递给 DxApi。 DxApi 的其余参数用于对应于函数标识符和缓冲区长度的结构的微型驱动程序分配的缓冲区。 函数的行为以及输入和输出缓冲区的大小和格式取决于指定的函数标识符。 此行为记录在 DxApi 函数和标识符中。
WDK 提供了两个示例驱动程序,演示如何实现 DxApi 功能。 ATIWDM 示例要求存在特定的硬件才能运行。 TestCap 示例不需要硬件,并且适用于所有平台。 可以使用 GraphEdt 工具与任一示例进行交互。
视频捕获微型驱动程序必须调用 DxApi 才能执行的常见功能如下:
打开内核模式 DirectDraw 的句柄(DxApi 函数标识符设置为DD_DXAPI_OPENDIRECTDRAW)。 必须在 IRQL = PASSIVE_LEVEL执行此操作。
获取硬件视频端口的内核模式功能(DxApi 函数标识符设置为DD_DXAPI_GETKERNELCAPS)。
注册回调以处理 DirectDraw 事件,例如模式切换到全屏命令提示符(设置为DD_DXAPI_REGISTER_CALLBACK的 DxApi 函数标识符)。
打开指向 DirectDraw 图面的句柄(DxApi 函数标识符设置为DD_DXAPI_OPENSURFACE)。
注销回调(DxApi 函数标识符设置为DD_DXAPI_UNREGISTER_CALLBACK)。
关闭图面的句柄以及内核模式 DirectDraw(DxApi 函数标识符设置为 DD_DXAPI_CLOSEHANDLE)
视频端口子设备和电源管理
使用微型驱动程序时,视频端口子设备(如电视优化器和显示组合适配器)可以阻止电源状态转换。 当微型驱动程序正在主动使用(引脚或筛选器处于打开状态)时,电源状态转换阻塞发生。 如果微型驱动程序已加载但未使用引脚或筛选器,则电源状态将从 S0(完全供电)转换为较低功率状态(例如,S1、S2、S3 和 S4)。 电源状态转换阻止仅发生在 Stream 类微型驱动程序中,这些微型驱动程序是视频端口子设备的客户端。
WHQL 豁免适用于满足此条件的设备,因此供应商仍然可以获取徽标。