视频演示网络(VidPN)管理器使用 VidPN 对象来维护有关视频演示源、视频演示目标与显示模式之间的关联的信息。 有关详细信息,请参阅 视频演示网络简介 主题。
VidPN 对象
VidPN 对象包含以下子对象。
拓扑学
源模式设置
目标模式已设定
监控源模式集合
监测频率范围设定
监视描述符集
路径
来源
目标
源模式
目标模式
监视源模式
下图演示了 VidPN 对象及其子对象。
上文所示图表说明了特定关联是一对一、一对多、多对一还是多对多。 例如,该图显示源可以属于多个路径,但目标只能属于一个路径。
关系图中的蓝色对象通过句柄和接口进行访问,灰色对象通过结构指针进行访问。 此上下文中的接口是包含函数指针的结构。 例如, DXGK_VIDPNTOPOLOGY_INTERFACE 结构包含指向显示微型端口驱动程序调用以检查和更改拓扑对象的函数(由 VidPN 管理器实现)的指针。 当显示微型端口驱动程序调用其中任一函数时,它必须向拓扑对象提供句柄。 下表列出了用于访问 VidPN 对象及其子对象的句柄、接口和指针数据类型。
| 物体 | 访问方法和类型 |
|---|---|
| VidPN (VidPN 接口) | 通过句柄和接口进行访问。 D3DKMDT_HVIDPN、 DXGK_VIDPN_INTERFACE |
| 拓扑(VidPN 拓扑接口) | 通过句柄和接口进行访问。 D3DKMDT_HVIDPNTOPOLOGY,DXGK_VIDPNTOPOLOGY_INTERFACE |
| 源模式集 (VidPN 源模式集接口) | 通过句柄和接口进行访问。 D3DKMDT_HVIDPNSOURCEMODESET,DXGK_VIDPNSOURCEMODESET_INTERFACE |
| 目标模式设置(VidPN 目标模式设置接口) | 通过句柄和接口进行访问。 D3DKMDT_HVIDPNTARGETMODESET,DXGK_VIDPNTARGETMODESET_INTERFACE |
| 监视源模式设置 | 通过句柄和接口进行访问。 D3DKMDT_HMONITORSOURCEMODESET、 DXGK_MONITORSOURCEMODESET_INTERFACE |
| 路径 | 通过结构指针访问。 D3DKMDT_VIDPN_PRESENT_PATH |
| 来源 | 通过结构指针访问。 D3DKMDT_VIDEO_PRESENT_SOURCE |
| 目标 | 通过结构指针访问。 D3DKMDT_VIDEO_PRESENT_TARGET |
| 源模式 | 通过结构指针访问。 D3DKMDT_VIDPN_SOURCE_MODE |
| 目标模式 | 通过结构体指针访问。 D3DKMDT_VIDPN_TARGET_MODE |
| 监视源模式 | 通过结构指针访问。 D3DKMDT_MONITOR_SOURCE_MODE |
| 监测频率范围设定 | 通过结构指针访问。 [DXGK_MONITORFREQUENCYRANGESET_INTERFACE |
| 监视描述符集 | 通过结构指针访问。 [DXGK_MONITORDESCRIPTORSET_INTERFACE |
VidPN 管理器
VidPN 管理器是 DirectX 图形内核子系统的组件之一,它与显示微型端口驱动程序合作,以生成和维护 VidPN。 以下步骤介绍了显示端口微型驱动程序如何获取到一个 VidPN 对象的句柄和接口。
初始化期间,DirectX 图形内核子系统调用显示微型端口驱动程序的 DxgkDdiStartDevice 函数。 该调用为显示微型端口驱动程序提供了一个 DXGKRNL_INTERFACE 结构,该结构包含指向 DirectX 图形内核子系统实现的函数的指针。 其中一个函数是 DxgkCbQueryVidPnInterface。
有时,VidPN 管理器需要显示微型端口驱动程序的帮助,因此它通过调用以下函数之一为显示微型端口驱动程序提供 VidPN 对象的句柄:
显示微型端口驱动程序将步骤 2 中获取的句柄传递给 DxgkCbQueryVidPnInterface,该句柄返回指向 DXGK_VIDPN_INTERFACE 结构的指针。
在显示微型端口驱动程序获得指向 VidPN 对象的句柄和接口之后,它可以根据需要获取主要子对象的句柄和接口,包括拓扑、源模式集、目标模式集以及监视器源模式集。 例如,显示微型端口驱动程序可以调用 pfnGetTopology (VidPN 接口中的函数之一),以获取 VidPN 拓扑对象的句柄和指向 DXGK_VIDPNTOPOLOGY_INTERFACE 结构的指针。
以下函数(在 VidPN 接口中)为 VidPN 对象的主要子对象提供句柄和接口。
请注意,前面的列表中的两个函数具有释放 VidPN 子对象的相应函数。
在显示微型端口驱动程序获取一个句柄和一个 VidPN 主子对象的接口后,它可以调用接口函数来获取与此主子对象相关的对象的描述符。 例如,给定拓扑对象的句柄和接口,显示微型端口驱动程序可以执行以下步骤来获取拓扑中所有路径的描述符。
-
调用 VidPN 拓扑接口的 pfnAcquireFirstPathInfo 函数,以获取指向描述拓扑中第一个路径 的D3DKMDT_VIDPN_PRESENT_PATH 结构的指针。
-
重复调用 pfnAcquireNextPathInfo 函数以获取指向描述拓扑中剩余路径的D3DKMDT_VIDPN_PRESENT_PATH结构的指针。
同样,显示微型端口驱动程序可以通过调用以下任何模式集接口的 pfnAcquireFirstModeInfo 和 pfnAcquireNextModeInfo 函数来获取模式集的模式的描述符。
请注意, DXGK_VIDPNSOURCEMODESET_INTERFACE 接口没有从源模式集中删除模式的函数。 当显示微型端口驱动程序需要更新源模式集时,它不会通过添加和删除模式来更改现有模式集。 而是创建一个替换旧模式集的新模式集。 必须更新模式集的函数示例是显示微型端口驱动程序的 DxgkDdiEnumVidPnCofuncModality 函数。 更新源模式集所涉及的步骤如下所示:
调用 DXGK_VIDPNSOURCEMODESET_INTERFACE 接口的 pfnCreateNewModeInfo 以获取指向D3DKMDT_VIDPN_SOURCE_MODE结构的指针(由 VidPN 管理器分配)。
重复调用 pfnAddMode 以将模式添加到源模式集。
调用DXGK_VIDPN_INTERFACE的 pfnAssignSourceModeSet 函数,将新模式设置为特定的视频演示源。 新的源模式集替换当前分配给该源的源模式集。
更新目标模式集类似于更新源模式集。 DXGK_VIDPNTARGETMODESET_INTERFACE接口具有以下函数:
-
用于创建新的目标模式集的 pfnCreateNewModeInfo 函数,以及用于将模式添加到集的 pfnAddMode 函数。
没有用于获取属于特定路径的源和目标的接口(函数集)。 显示微型端口驱动程序可以通过检查表示路径的 D3DKMDT_VIDPN_PRESENT_PATH 结构的 VidPnSourceId 和 VidPnTargetId 成员来确定哪个源和目标属于特定路径。