Windows 图形显示驱动开发-WDDM 3.0功能- D3D12 视频编码(一)

关于 Direct3D 12 视频编码

在 Windows 11(WDDM 3.0)之前,DirectX 12 提供了应用程序和驱动程序级接口(API 和 DDI),以支持多个视频应用程序的 GPU 加速,包括视频解码、视频处理和运动估计。

从 Windows 11 开始,D3D12 向现有视频 API/DDI 系列添加了视频编码功能。 此功能提供一组一致的编码 API/DDI,这些 API/DDI 与现有的 D3D12 框架一致,并允许开发人员使用 GPU 加速的视频引擎执行视频编码。

视频编码框架提供对视频编码器硬件加速功能的访问权限。 它可用于不同的方案,例如物联网(IoT)、云、媒体 API、机器学习(ML)和游戏流式处理。

Windows 11 版本 24H2(WDDM 3.2)中添加了对 AV1 编码的支持。 有关详细信息,请参阅 D3D12 AV1 视频编码。

支持的编解码器

从 Windows 11 开始,支持的编解码器为 H.264 和 HEVC,尽管 D3D12 视频编码框架为新的编解码器(如 AV1)提供了开放扩展性。

框架接口的编解码器特定方面将委托给编解码器特定结构及其对联合类型的访问权限。 例如,D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 结构包含一个联合,其中包含指向编解码器特定 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 的指针,以及包含编解码器特定配置信息的 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 结构。(包含视频编解码器的配置信息 :如

语法
复制代码
typedef struct D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 {
  UINT  DataSize;
  union {
    D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 *pH264Config;
    D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 *pHEVCConfig;
    D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_0095    *pAV1Config;
  };
} D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0;
成员

**DataSize:**所引用数据的大小(以字节为单位)。

**pH264Config:**指向包含 H.264 编解码器配置信息的 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 结构的指针。

**pHEVCConfig:**指向包含 HEVC 编解码器配置信息的 D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 结构的指针。

**pAV1Config:**指向包含 AV1 编解码器配置信息的 D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_0095 结构的指针。

为了在扩展性上保留二进制接口兼容性,联合类型始终包含指向编解码器特定结构的指针。 根据主机体系结构的指针大小,联合类型具有固定大小。 此决定还阻止包含联合类型成员或含有匿名成员的结构在扩展接口时更改其类型大小。 某些联合仅包含指向枚举类型的指针;为了保持一致,这些枚举类型也作为指针引用,在这种情况下,新编解码器需要一些比枚举更复杂的类型,以便表示这些概念。

报告视频编码支持和功能

扩展了与视频相关的现有框架,以允许驱动程序报告视频编码支持和功能。

  • D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 是版本号,用于定义 Windows 11 中引入的所有 D3D12 视频编码里程碑的第一个完整实施。
  • D3D12DDICAPS_TYPE_VIDEO_0020 枚举已扩展为包括以下视频编码支持值:
  1. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
  2. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
  3. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
  4. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
  5. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
  6. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
  7. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
  8. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
  9. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
  10. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
  11. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
  12. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
  13. D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43

D3D 运行时会调用驱动程序的 PFND3D12DDI_VIDEO_GETCAPS 回调来查询视频编码支持。

  • 支持视频编码的驱动程序为 D3D 运行时提供了指向 D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 结构中的视频编码回调函数的指针。
相关推荐
非凡ghost1 小时前
可拓浏览器:给手机浏览器装上“外挂“!2W+拓展+AI搜索,玩出无限可能!
windows·智能手机·音视频·firefox
小神.Chen1 小时前
如何删除远程桌面的连接记录,一键清理mstsc远程桌面连接的记录
windows
John_ToDebug1 小时前
WebHostView 与 TabStrip 交互机制深度解析
c++·chrome·windows
L1624762 小时前
Win11 共享→Windows Server 访问故障总结(极简可复用)
开发语言·windows·php
love530love3 小时前
ComfyUI MediaPipe 终极填坑:解决 incompatible function arguments 报错,基于代理模式的猴子补丁升级版
人工智能·windows·comfyui·mediapipe·猴子补丁·monkey patch·python 3.12
今夕资源网3 小时前
Windows Terminal更舒适的命令行环境 仅11MB 支持并行运行WSLLinux子系统 github开源项目
windows·github·命令行·cmd·terminal
java_logo5 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
测试员周周7 小时前
【AI测试系统】第1篇:LangGraph 实战:用 State Graph 搭建 AI测试流水线(4 步编排 + RAG 增强 + 完整代码)
linux·windows·python·功能测试·microsoft·单元测试·多轮对话
祖国的好青年7 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
love530love7 小时前
Python 3.12 解决 MediaPipe “no attribute ‘solutions‘” 终极方案:基于全版本硬核实测的避坑指南
开发语言·人工智能·windows·python·comfyui·mediapipe·solutions