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的命令队列中执行。
同步相关回调 视功能而定 例如 pfnSignalpfnWait,用于处理队列间的同步和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. 创建对象 :调用 pfnCalcPrivateVideoDecoderSizepfnCreateVideoDecoder 创建解码器对象。

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

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

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

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

相关推荐
山顶夕景几秒前
【VLM】Qwen3.8-Omni-Flash长音视频理解Agentic模型
音视频·vlm·视频理解·agentic·全模态
tedcloud12327 分钟前
emilkowalski/skills:让 AI 写出来的网页更有“设计感”
服务器·人工智能·开源·音视频·ai编程
纽格立科技1 小时前
警报叫醒收音机之后——两条应急广播路径的互相参照
车载系统·音视频·信息与通信·传媒
Evanfu02161 小时前
商业短剧上传 AI 工具前,要检查哪些安全与删除规则?
自然语言处理·aigc·音视频·视频·机器翻译·自动翻译
可乐鸡翅yeah_1 小时前
M3U8 测试用例库建设,流媒体团队测试资产沉淀与回归体系搭建
音视频·实时音视频·m3u8·m3u8在线播放·音视频在线播放
m0_614523559 小时前
音频排障|多段视频音量忽大忽小,怎么统一响度:先分类再校准
音视频·视频编辑
梦帮科技10 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
揽秀亭长10 小时前
视频转文字有哪些方法?在线AI、剪辑软件、本地对比
人工智能·音视频
m0_6145235514 小时前
翻译配音比原视频长,如何重新检查镜头与字幕
音视频·视频编辑
纽格立科技15 小时前
声音广播:要么数字化,要么边缘化
车载系统·音视频·信息与通信·传媒