Windows D3D12 DDI中的视频函数调用

D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 D3D12DDI_COMMAND_LIST_FUNCS_VIDEO_DECODE_0088 D3D12DDI_COMMAND_LIST_FUNCS_VIDEO_PROCESS_0088 D3D12DDI_COMMAND_QUEUE_FUNCS_VIDEO中需要注册很多callback函数,这些视频函数表定义了大量回调,它们的注册和调用遵循着清晰的两阶段流程:"能力查询与创建" 阶段和**"录制与执行"** 阶段。

🏗️ 驱动架构与流程概览

在深入细节前,先用一张图来总览整个生命周期:

1. 设备层 (D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0) ------ 资源的"工厂"

这个函数表是视频功能的根对象 ,由驱动在 CreateDevice 时填充。它就像一家工厂,负责创建所有视频相关的核心"机器"(解码器、处理器、编码器等)和进行能力查询。

回调函数 必要性 调用顺序/说明
pfnGetCaps 必须 第1步:最先被调用。运行时用来查询驱动支持哪些视频功能,如解码格式、编码能力等。
pfnCalcPrivate...Size 系列 必须 第2步 :在创建具体对象前调用。运行时让驱动计算其私有数据所需的内存大小,以进行精确的内存分配。
pfnCreateVideo... 系列 必须 第3步 :在实际分配内存后调用,用于创建具体的视频对象句柄。
pfnDestroyVideo... 系列 必须 最后一步 :在应用销毁对象时调用,用于清理驱动侧分配的资源,防止内存泄漏。

核心流程 :pfnGetCaps (查能力) -> pfnCalcPrivate...Size (算大小) -> pfnCreateVideo... (建对象) -> ... 使用 ... -> pfnDestroyVideo... (销毁)。


2. 命令队列层 (D3D12DDI_COMMAND_QUEUE_FUNCS_VIDEO)

命令队列是GPU执行命令的通道。

回调函数 必要性 调用顺序/说明
pfnExecuteCommandLists 必须 运行时调用此函数将填充好的命令列表提交到GPU的命令队列中执行。
同步相关回调 视功能而定 例如 pfnSignal、pfnWait,用于处理队列间的同步和GPU/CPU的协调工作。

3. 命令列表层 (以解码/处理为例)

命令列表负责录制具体的GPU操作。

A. 视频解码 (D3D12DDI_COMMAND_LIST_FUNCS_VIDEO_DECODE_0088)
回调函数 必要性 调用顺序/说明
pfnDecodeFrame 必须 核心录制函数 。在应用调用 DecodeFrame 时被调用,驱动将此帧的解码操作录制到命令列表中。
B. 视频处理 (D3D12DDI_COMMAND_LIST_FUNCS_VIDEO_PROCESS_0088)
回调函数 必要性 调用顺序/说明
pfnProcessFrame 必须 核心录制函数 。在应用调用 ProcessFrame 时被调用,驱动将色彩转换、缩放等视频处理操作录制到命令列表中。

特别说明 :编码命令的录制流程更复杂,除了核心的 pfnEncodeFrame 外,还必须 调用 pfnEncodeResolveOutputMetadata 来解析编码后的元数据,这是一个不可或缺的步骤。


📝 总结与标准工作流

将这些碎片拼凑起来,一个典型的视频解码工作流如下:

  1. 初始化 :运行时调用 pfnGetCaps 查询解码能力。

  2. 创建对象 :调用 pfnCalcPrivateVideoDecoderSize 和 pfnCreateVideoDecoder 创建解码器对象。

  3. 准备录制:创建命令队列和命令列表。

  4. 录制命令 :应用调用 API,运行时调用命令列表的 pfnDecodeFrame 将解码操作录制下来。

  5. 执行 :应用调用 ExecuteCommandLists,运行时的 pfnExecuteCommandLists 将命令提交给 GPU。

这个流程中,pfnGetCaps 是所有功能的前提,pfnCalcPrivate...Size 和 pfnCreateVideo... 是每类对象创建的必需对,而各种 ...Frame 函数则是驱动完成实际工作的核心。

相关推荐
程序猿追12 分钟前
HarmonyOS 6 音视频实战:用 AVPlayer 做一个本地音乐播放器
华为·音视频·harmonyos
weixin_690654743 小时前
龙迅#LT9611EX 现MIPI转HDMI1.4功能主推型号,分辨率高达4K30HZ,IC内置I2C无需外部12C控制。
嵌入式硬件·音视频·信号处理
Light606 小时前
谁在给大模型出题、卖题、判卷:一门 300 亿估值的生意,和它正在漏掉的部分
音视频
甜到心里的蛋糕6 小时前
云主机部署图片/视频管理系统的实践经验
python·音视频
可乐鸡翅yeah_7 小时前
HLS 业务 Referer‑Policy 网页元标签引发播放异常排错
前端·javascript·网络·ffmpeg·php·音视频
YEGE学AI算法7 小时前
KWS语音唤醒系统完整链路:音频前处理、Fbank、阈值与冷却逻辑
python·音视频·语音唤醒·kws·fbank
EasyDSS8 小时前
基于WebRTC的视频会议系统:私有化视频会议平台EasyDSS视频会议到底能干什么
音视频·webrtc·easydss
mont evergreen8 小时前
RTMP 连接单元测试之旅
单元测试·音视频·源码解读
阿明副业观察9 小时前
AI视频生成工具:功能、特点与高效制作攻略
人工智能·音视频
weixin_690654749 小时前
龙迅#LT7911EXS 高性价比IC,功能适用于HDMI/DP/TPYE-C转单PORT MIPICSI/DSI ,分辨率高达4K60HZ。
嵌入式硬件·音视频·信号处理