DXVA-HD DDI 编程注意事项

本部分仅适用于 Windows 7 及更高版本以及 Windows 操作系统的 Windows Server 2008 R2 及更高版本。

在用户模式显示驱动程序中实现 DXVA-HD DDI 时,应考虑以下编程提示:

  • 驱动程序必须在 D3DCAPS9 结构的 Caps3 成员中设置D3DCAPS3_DXVAHD (0x00000400L) 位,以指示它支持 DXVA-HD DDI,否则 Direct3D 运行时无法调用 CreateVideoProcessor 函数来创建 DXVA-HD 设备。 DirectX 9.0 SDK 文档中介绍了 D3DCAPS9 结构。 驱动程序设置D3DCAPS3_DXVAHD位,以响应对其 GetCaps 函数的调用,其中D3DDDICAPS_GETD3D9CAPS值在 pData 参数指向的 D3DDDIARG_GETCAPS 结构的 Type 成员中设置。

  • 应用程序级别DXVAHD_SURFACE_TYPE枚举的DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE值没有相应的 DDI 值。 应用程序为屏幕外普通表面设置DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE值,该表面以不同的格式类型为 CPU 或基于着色器的视频处理器插件分配。

  • 应用程序级别DXVAHD_SURFACE_TYPE枚举的DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT值对应于D3DDDI_RESOURCEFLAGS结构的 VideoProcessRenderTarget 位字段标志。 当运行时调用驱动程序的 CreateResource 函数来创建视频处理呈现目标时,Direct3D 运行时在 D3DDDIARG_CREATERESOURCE 结构的 Flags 成员中设置 VideoProcessRenderTarget

  • Direct3D 运行时维护位块传输 (bitblt) 和流状态。 查询运行时时,运行时将返回到应用程序。

  • 应用程序级 IDXVAHD_VideoProcessor::GetVideoProcessBltState 方法没有相应的 DDI 函数。 但是,当应用程序调用 IDXVAHD_VideoProcessor::GetVideoProcessBltState 来检索视频处理器的专用 bitblt 状态数据时,Direct3D 运行时会调用驱动程序的 GetVideoProcessBltStatePrivate 函数。

  • 应用程序级 IDXVAHD_VideoProcessor::GetVideoProcessStreamState 方法没有相应的 DDI 函数。 但是,当应用程序调用 IDXVAHD_VideoProcessor::GetVideoProcessBltState 来检索视频处理器的专用流状态数据时,Direct3D 运行时会调用驱动程序的 GetVideoProcessStreamStatePrivate 函数。

  • 应用程序级别DXVAHD_STREAM_STATE枚举的DXVAHD_STREAM_STATE_D3DFORMAT值在 DXVAHDDDI_STREAM_STATE 枚举中没有相应的 DDI 值。 视频处理器插件对使用应用程序级别DXVAHD_SURFACE_TYPE枚举DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE值分配的图面使用DXVAHD_STREAM_STATE_D3DFORMAT值。

  • DXVAHD_DEVICE_TYPE枚举没有相应的 DDI 枚举 (例如,没有DXVAHDDDI_DEVICE_TYPE) 。 保留DXVAHDDDI_VPDEVCAPS结构的第一个成员,而应用程序级DXVAHD_VPDEVCAPS结构的第一个成员设置为 DeviceType 成员中的DXVAHD_DEVICE_TYPE值。 DeviceType 成员由运行时或视频处理器插件设置,该插件始终将驱动程序报告为DXVAHD_DEVICE_TYPE_HARDWARE。

  • DXVAHDDDI_FILTER_RANGE_DATA 结构的乘数成员是浮点值。 驱动程序应使用可以完全表示为基 2 小数的值。 例如,0.25 可以完全表示为基 2 小数,但 0.1 不能。

  • 任何 DXVA-HD DDI 函数都应返回S_OK、E_INVALIDARG或E_OUTOFMEMORY。