若要更高效地处理视频(包括高清视频),用户模式显示驱动程序应实现 Windows 7 随附的 DirectX 视频加速 (VA) High-Definition (DXVA-HD) DDI。 以下部分介绍在用户模式显示驱动程序中使用 DXVA-HD DDI 时需要注意的 DXVA-HD DDI 和编程注意事项。
1. DXVA-HD DDI 核心组件与驱动职责
关键接口与功能
组件 | 驱动实现要求 |
---|---|
DXVAHD_Device | 创建视频处理设备,声明支持的输入/输出格式、转换能力(缩放、去隔行、色彩空间转换)。 |
DXVAHD_VideoProcessor | 执行实际视频处理(如帧率转换、Alpha混合),需硬件加速。 |
DXVAHD_VideoProcessBlt | 处理视频帧块传输(Blt),支持多目标输出(如主表面与预览窗口)。 |
驱动初始化流程
// 1. 声明支持的视频格式(示例:NV12 输入 → BGRA 输出)
DXVAHD_VPDEVCAPS caps = {};
caps.InputFormatCount = 1;
caps.InputFormats[0] = DXVAHD_FORMAT_NV12;
caps.OutputFormatCount = 1;
caps.OutputFormats[0] = DXVAHD_FORMAT_B8G8R8A8_UNORM;
// 2. 创建视频处理器
DXVAHD_CONTENT_DESC desc = {
.InputFrameFormat = DXVAHD_FRAME_FORMAT_PROGRESSIVE,
.InputWidth = 1920,
.InputHeight = 1080,
.OutputWidth = 1280,
.OutputHeight = 720
};
DXVAHD_Device_Create(hDevice, &desc, DXVAHD_DEVICE_USAGE_OPTIMAL, &caps, &hVideoProcessor);
2. 高性能视频处理实现
硬件加速要求
零拷贝流水线:视频帧数据应始终驻留显存,避免 CPU-GPU 间传输。
固定功能单元利用:优先使用显示引擎的专用视频处理单元(如 Intel Quick Sync、NVIDIA NVENC)。
帧处理优化(Blt 路径)
void ProcessVideoFrame(
DXVAHD_VideoProcessor hVP,
ID3D11Texture2D* pInputTexture,
ID3D11Texture2D* pOutputTexture
) {
DXVAHD_VideoProcessBltParams params = {
.TargetFrame = 0,
.BackgroundColor = { 0.0f, 0.0f, 0.0f, 1.0f }, // 黑色背景
.OutputColorSpace = DXVAHD_COLOR_SPACE_RGB_FULL_G22_NONE_P709
};
DXVAHD_VideoProcessBltHD(hVP, pOutputTexture, 0, 1, ¶ms, pInputTexture, 0, nullptr);
}
3. 格式转换与色彩空间处理
强制支持的转换组合
输入格式 | 输出格式 | 转换要求 |
---|---|---|
DXVAHD_FORMAT_NV12 | DXVAHD_FORMAT_BGRA | YUV→RGB 转换需支持 BT.601/BT.709 标准,可配置伽马曲线(G22/G2084)。 |
DXVAHD_FORMAT_YUY2 | DXVAHD_FORMAT_RGB16 | 保留色度抽样(4:2:2→4:4:4),支持动态范围调整(Limited/Full Range)。 |
寄存器配置示例
void ConfigureColorConversion(DXVAHD_COLOR_SPACE colorSpace) {
switch (colorSpace) {
case DXVAHD_COLOR_SPACE_RGB_FULL_G22_NONE_P709:
WriteRegister(VIDEO_CSC_MODE, RGB_FULLRANGE_GAMMA22);
break;
case DXVAHD_COLOR_SPACE_YCbCr_STUDIO_G2084_TOPLEFT_P2020:
WriteRegister(VIDEO_CSC_MODE, YUV_STUDIORANGE_PQ_P2020);
break;
}
}
4. 多引擎同步与资源管理
解码器-视频处理器协作
sequenceDiagram
participant Decoder
participant VideoProcessor
participant Driver
Decoder->>Driver: 提交解码帧 (NV12纹理)
Driver->>VideoProcessor: 配置色彩空间转换
VideoProcessor->>Driver: 执行Blt到RGB目标
Driver->>Decoder: 释放解码帧内存
驱动资源池化
视频帧池:预分配一组 ID3D11Texture2D 用于零拷贝解码-处理流水线。
命令缓冲区复用:为高频 Blt 操作维护专用 GPU 命令缓冲区。
5. 调试与性能验证
DXVA-HD 能力检查
DXVAHD_VPDEVCAPS caps = {};
DXVAHD_GetVideoProcessorDeviceCaps(hDevice, &caps);
assert(caps.FeatureCaps & DXVAHD_FEATURE_ALPHA_FILL && "Alpha blending not supported");
性能分析工具
GPUView:追踪视频处理引擎的 GPU 利用率与延迟。
PIX:捕获视频帧处理流水线,验证格式转换正确性。
6. 兼容性回退路径
旧硬件适配策略
软件回退:若硬件不支持某功能(如 HDR 转换),驱动应返回 DXVAHD_ERR_UNSUPPORTED,触发运行时软件处理。
混合模式:允许部分处理由 GPU 计算着色器完成(需声明 DXVAHD_FEATURE_CUSTOM_RATE)。
7. 总结
硬件加速优先:最大化利用固定功能单元,减少着色器负载。
格式全覆盖:确保主流 YUV/RGB 转换组合的高效实现。
资源零拷贝:通过驱动管理的帧池与命令缓冲区,消除内存传输瓶颈。