支持 Miracast 无线显示器

Windows 8.1(WDDM 1.3)中引入了对 Miracast 无线显示标准的支持。

从 Windows 10 开始支持 Miracast

从 Windows 10(WDDM 2.0)开始,操作系统附带了可在任何 GPU 上运行的内置 Miracast 堆栈。 有关 Microsoft Miracast 堆栈以及从 Windows 10 开始支持 Miracast 显示器的驱动程序和硬件要求的信息,请参阅以下文档:

驱动程序开发人员不应再实现自定义 Miracast 堆栈。 Microsoft可能会在将来的 Windows 版本中删除对自定义 Miracast 堆栈的支持。

在 Windows 8.1 中支持 Miracast

WDDM 1.3 驱动程序可以选择通过 Windows 8.1 中提供的 Miracast DIS 支持 Miracast。 本文的其余部分及其相关文章介绍了如何提供支持。

用户模式设备驱动程序接口 (DDI)

Miracast 用户模式驱动程序调用的无线显示回调函数

下表列出了操作系统实现的无线显示器(Miracast)用户模式功能。 只有 Windows 8.1 Miracast 用户模式驱动程序可以调用这些函数。 指向 Miracast 显示回调函数的指针在MIRACAST_CALLBACKS结构中返回。

函数 说明
PFN_GET_NEXT_CHUNK_DATA 提供有关DXGK_INTERRUPT_TYPE中断类型DXGK_INTERRUPT_MIRACAST_CHUNK_PROCESSING_COMPLETE时向 DirectX 图形内核子系统报告的下一个 Miracast 编码区块的信息。
PFN_MIRACAST_IO_CONTROL 由用户模式显示驱动程序调用,以向内核模式显示微型端口驱动程序发送同步 I/O 控制请求。
PFN_REGISTER_DATARATE_NOTIFICATIONS 由用户模式驱动程序调用以注册到操作系统,以接收网络服务质量(QoS)通知和 Miracast 连接的当前网络带宽。
PFN_REPORT_SESSION_STATUS 由用户模式显示驱动程序调用,以报告当前 Miracast 连接会话的状态。
PFN_REPORT_STATISTIC 由用户模式显示驱动程序调用,以向操作系统报告 Miracast 链接的统计信息。

Windows 8.1 Miracast 用户模式驱动程序实现的无线显示功能

下表列出了 Windows 8.1 Miracast 用户模式驱动程序必须实现的无线显示器(Miracast)函数。 这种类型的驱动程序在独立 DLL 中运行。

为了响应对 QueryMiracastDriverInterface 函数的操作系统调用,Miracast 用户模式驱动程序必须在MIRACAST_DRIVER_INTERFACE结构中提供指向这些函数的指针。 异常为 pfnDataRateNotify,它具有在 RegisterForDataRateNotifications 中 声明的指针。

函数 说明
PFN_CREATE_MIRACAST_CONTEXT 由操作系统调用以创建用户模式 Miracast 上下文。
PFN_DESTROY_MIRACAST_CONTEXT 由操作系统调用以销毁用户模式 Miracast 上下文。
PFN_HANDLE_KMD_MESSAGE 由操作系统调用以处理 Miracast 用户模式驱动程序在显示微型端口驱动程序调用 DxgkCbMiracastSendMessage 函数时收到的异步内核模式消息。
PFN_DATARATE_NOTIFICATION 由操作系统调用,以通知 Miracast 用户模式驱动程序 Miracast 网络链接的比特率已更改。 调用 RegisterForDataRateNotifications 函数时,此函数将注册到操作系统。
QUERY_MIRACAST_DRIVER_INTERFACE 由操作系统调用以查询 Miracast 用户模式驱动程序接口, MIRACAST_DRIVER_INTERFACE
PFN_START_MIRACAST_SESSION 由操作系统调用以启动 Miracast 连接会话。
PFN_STOP_MIRACAST_SESSION 由操作系统调用以启动以前通过调用 StartMiracastSession 函数启动的 Miracast 连接会话。

下表列出了用于 Windows 8.1 Miracast 显示设备驱动程序接口(DDI)的用户模式结构和枚举。

结构/枚举 说明
MIRACAST_CALLBACKS 包含指向 Miracast 用户模式驱动程序可以调用的无线显示器(Miracast)运行时回调函数的指针。
MIRACAST_CHUNK_DATA 包含当用户模式驱动程序调用无线显示器 (Miracast) GetNextChunkData 函数时要使用的区块数据。
MIRACAST_CHUNK_ID 存储标识无线显示器(Miracast)编码区块的信息。
MIRACAST_CHUNK_INFO 包含有关指定无线显示器(Miracast)编码区块的信息。
MIRACAST_CHUNK_TYPE 指定要处理的无线显示器(Miracast)区块信息的类型。
MIRACAST_DATARATE_STATS 包含无线显示器 (Miracast) pfnDataRateNotify 函数中有关音频/视频编码器比特率和失败或重试的 Wi-Fi 帧的信息。
MIRACAST_DRIVER_INTERFACE 包含指向 Miracast 用户模式驱动程序实现的无线显示器(Miracast)函数的指针。
MIRACAST_PROTOCOL_EVENT 指定用户模式显示驱动程序应报告的无线显示器(Miracast)协议事件的类型。
MIRACAST_SESSION_INFO 包含无线显示器(Miracast)连接会话的信息。
MIRACAST_STATISTIC_DATA 包含用户模式显示驱动程序向操作系统报告的 Miracast 统计信息数据。
MIRACAST_STATISTIC_TYPE 指定用户模式显示驱动程序生成的 Miracast 统计信息数据类型。
MIRACAST_STATUS 指定用户模式显示驱动程序用于报告 Miracast 连接状态的状态类型。
MIRACAST_WFD_CONNECTION_STATS 包含 Wi-Fi Direct 连接上的比特率信息。

以下用户模式结构和枚举支持 Miracast 显示,并且已针对 Windows 8.1 进行了新的或更新:

内核模式 DDI

无线显示器 (Miracast) 回调接口

Miracast 显示回调接口包含 DirectX 图形内核子系统实现以支持 Windows 8.1 中的无线(Miracast)显示器的函数。

下表列出了 WDDM 1.3 显示微型端口驱动程序调用的这些内核模式函数:

函数 说明
DXGKCB_MIRACAST_SEND_MESSAGE 将异步消息发送到用户模式显示驱动程序。
DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK 当通过调用 DxgkCbMiracastSendMessage 函数发送到用户模式驱动程序的消息已完成或取消时,在内核模式下调用
DXGKCB_MIRACAST_REPORT_CHUNK_INFO 显示微型端口驱动程序调用以报告有关编码区块的信息。

显示微型端口驱动程序必须在DXGK_MIRACAST_DISPLAY_CALLBACKS结构中填写指向这些函数的指针。

无线显示器 (Miracast) 接口

下表列出了在 Windows 8.1 中显示微型端口驱动程序实现以支持无线(Miracast)显示的内核模式函数。 指向 Miracast 接口函数的指针在DXGK_MIRACAST_INTERFACE结构中返回。

函数 说明
DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK 当通过调用 DxgkCbMiracastSendMessage 函数发送到用户模式驱动程序的消息已完成或取消时,在内核模式下调用
DXGKDDI_MIRACAST_CREATE_CONTEXT 为 Miracast 设备创建内核模式上下文。
DXGKDDI_MIRACAST_DESTROY_CONTEXT 销毁 Miracast 设备的实例。
DXGKDDI_MIRACAST_HANDLE_IO_CONTROL 由操作系统调用以请求显示微型端口驱动程序处理同步 I/O 控制请求,以响应对 MiracastIoControl 函数的用户模式显示驱动程序调用。
DXGKDDI_MIRACAST_QUERY_CAPS 查询当前显示适配器的 Miracast 功能。 操作系统仅在首次启动显示适配器时调用此函数,然后存储返回的功能。

这些内核模式结构和枚举支持 Miracast 显示,并且已针对 Windows 8.1 进行了新的或更新:

  • DXGK_MIRACAST_CAPS
  • D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY(已添加D3DKMDT_VOT_MIRACAST常量)
  • D3DKMDT_VIDEO_SIGNAL_INFO (添加了 AdditionalSignalInfo 子结构)
  • DXGK_CHILD_STATUS(添加了 Miracast 子结构)
  • DXGK_CHILD_STATUS_TYPE (添加了 StatusMiracast 常量)
  • DXGKARGCB_NOTIFY_INTERRUPT_DATA添加了 MiracastEncodeChunkCompleted 子结构)