window 显示驱动开发-DirectX 视频加速 2.0
DirectX 视频加速 2.0 结构和枚举
DirectX 视频加速 (VA) 2.0 用户模式显示驱动程序函数使用以下结构和枚举类型。
- DXVADDI_AYUVSAMPLE16
- DXVADDI_AYUVSAMPLE8
- DXVADDI_CONFIGPICTUREDECODE
- DXVADDI_DECODEBUFFERDESC
- DXVADDI_DECODEBUFFERINFO
- DXVADDI_DECODEINPUT
- DXVADDI_EXTENDEDFORMAT
- DXVADDI_FILTERVALUES
- DXVADDI_FIXED32
- DXVADDI_FREQUENCY
- DXVADDI_NOMINALRANGE
- DXVADDI_PRIVATEBUFFER
- DXVADDI_PRIVATEDATA
- DXVADDI_PROCAMPVALUES
- DXVADDI_PVP_HW_IV
- DXVADDI_PVP_KEY128
- DXVADDI_PVP_SETKEY
- DXVADDI_QUERYEXTENSIONCAPSINPUT
- DXVADDI_QUERYFILTERPROPERTYRANGEINPUT
- DXVADDI_QUERYPROCAMPINPUT
- DXVADDI_SAMPLEFORMAT
- DXVADDI_VALUERANGE
- DXVADDI_VIDEOCHROMASUBSAMPLING
- DXVADDI_VIDEODESC
- DXVADDI_VIDEOLIGHTING
- DXVADDI_VIDEOPRIMARIES
- DXVADDI_VIDEOPROCESSBLTFLAGS
- DXVADDI_VIDEOPROCESSORCAPS
- DXVADDI_VIDEOPROCESSORINPUT
- DXVADDI_VIDEOSAMPLE
- DXVADDI_VIDEOSAMPLEFLAGS
- DXVADDI_VIDEOTRANSFERFUNCTION
- DXVADDI_VIDEOTRANSFERMATRIX
- DXVAHDDDI_ALPHA_FILL_MODE
- DXVAHDDDI_BLT_STATE
- DXVAHDDDI_BLT_STATE_ALPHA_FILL_DATA
- DXVAHDDDI_BLT_STATE_BACKGROUND_COLOR_DATA
- DXVAHDDDI_BLT_STATE_CONSTRICTION_DATA
- DXVAHDDDI_BLT_STATE_OUTPUT_COLOR_SPACE_DATA
- DXVAHDDDI_BLT_STATE_PRIVATE_DATA
- DXVAHDDDI_BLT_STATE_TARGET_RECT_DATA
- DXVAHDDDI_COLOR
- DXVAHDDDI_COLOR_RGBA
- DXVAHDDDI_COLOR_YCbCrA
- DXVAHDDDI_CONTENT_DESC
- DXVAHDDDI_CUSTOM_RATE_DATA
- DXVAHDDDI_DEVICE_DESC
- DXVAHDDDI_DEVICE_USAGE
- DXVAHDDDI_FILTER
- DXVAHDDDI_FILTER_RANGE_DATA
- DXVAHDDDI_FRAME_FORMAT
- DXVAHDDDI_NOMINAL_RANGE
- DXVAHDDDI_OUTPUT_RATE
- DXVAHDDDI_RATIONAL
- DXVAHDDDI_ROTATION
- DXVAHDDDI_STREAM_DATA
- DXVAHDDDI_STREAM_STATE
- DXVAHDDDI_STREAM_STATE_ALPHA_DATA
- DXVAHDDDI_STREAM_STATE_ASPECT_RATIO_DATA
- DXVAHDDDI_STREAM_STATE_DESTINATION_RECT_DATA
- DXVAHDDDI_STREAM_STATE_FILTER_DATA
- DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA
- DXVAHDDDI_STREAM_STATE_INPUT_COLOR_SPACE_DATA
- DXVAHDDDI_STREAM_STATE_LUMA_KEY_DATA
- DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA
- DXVAHDDDI_STREAM_STATE_PALETTE_DATA
- DXVAHDDDI_STREAM_STATE_PRIVATE_DATA
- DXVAHDDDI_STREAM_STATE_PRIVATE_IVTC_DATA
- DXVAHDDDI_STREAM_STATE_ROTATION_DATA
- DXVAHDDDI_STREAM_STATE_SOURCE_RECT_DATA
- DXVAHDDDI_SURFACE
- DXVAHDDDI_VPCAPS
- DXVAHDDDI_VPDEVCAPS
1. 核心数据结构
(1) 视频解码器配置
结构体 | 用途 |
---|---|
DXVA2_DecodeBufferDesc | 描述解码缓冲区类型(如压缩比特流、运动向量等)。 |
DXVA2_DecodeExecuteParams | 包含解码执行参数(如缓冲区数量、目标帧表面)。 |
DXVA2_ConfigPictureDecode | 配置图像解码参数(如解码器GUID、渲染目标格式)。 |
(2) 视频处理
结构体 | 用途 |
---|---|
DXVA2_VideoProcessorCaps | 视频处理器的能力描述(如输入/输出格式、缩放范围)。 |
DXVA2_VideoProcessBltParams | 视频处理BLT操作的参数(如目标矩形、背景色)。 |
DXVA2_VideoSample | 定义输入视频样本(如时间戳、源矩形)。 |
(3) 加密与保护
结构体 | 用途 |
---|---|
DXVA2_EncryptProtocolHeader | 加密协议头(如PlayReady、Widevine)。 |
DXVA2_DecodeExtensionData | 扩展数据(用于厂商自定义功能)。 |
2. 关键枚举类型
(1) 缓冲区类型
typedef enum _DXVA2_BufferType {DXVA2_PictureParametersBuffer = 0, // 图像参数DXVA2_MacroBlockControlBuffer = 1, // 宏块控制DXVA2_ResidualDifferenceBuffer = 2, // 残差数据DXVA2_DeblockingControlBuffer = 3, // 去块控制// ... 其他类型
} DXVA2_BufferType;
(2) 视频处理器功能
typedef enum _DXVA2_VideoProcessorOperations {DXVA2_VideoProcess_None = 0,DXVA2_VideoProcess_YUV2RGB = 1, // YUV→RGB转换DXVA2_VideoProcess_AlphaBlend = 2, // Alpha混合// ... 其他操作
} DXVA2_VideoProcessorOperations;
(3) 解码器GUID
// 标准H.264解码器
DEFINE_GUID(DXVA2_ModeH264_E, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);
// VP9解码器
DEFINE_GUID(DXVA2_ModeVP9_VLD, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);
3. 驱动实现流程
(1) 解码器初始化
HRESULT APIENTRY CreateVideoDecoder(D3D10DDI_HDEVICE hDevice,CONST DXVA2_DecodeExecuteParams* pParams,D3D10DDI_HDECODE hDecoder
) {// 1. 验证配置(如GUID支持)if (!IsDecoderSupported(pParams->Config->guidConfig)) {return E_INVALIDARG;}// 2. 分配硬件解码上下文GPU_DECODER_CONTEXT* pCtx = AllocDecoderContext();StoreDecoderHandle(hDecoder, pCtx);return S_OK;
}
(2) 视频处理BLT操作
HRESULT APIENTRY VideoProcessBlt(D3D10DDI_HDEVICE hDevice,D3D10DDI_HVIDEOPROCESSOR hProcessor,CONST DXVA2_VideoProcessBltParams* pParams,UINT NumSamples,CONST DXVA2_VideoSample* pSamples
) {// 1. 验证输入样本for (UINT i = 0; i < NumSamples; i++) {if (!ValidateSample(&pSamples[i])) {return E_INVALIDARG;}}// 2. 提交到GPUSubmitVideoProcessing(pParams, pSamples);return S_OK;
}
4. WHCK 认证要求
测试项 | 验证目标 |
---|---|
Device.Graphics.VA.DecoderConfig | 解码器配置与GUID支持的正确性。 |
Device.Graphics.VA.ProcessingCaps | 视频处理器功能声明是否准确。 |
Device.Graphics.VA.DRMCompliance | 加密协议(如PlayReady)的实现合规性。 |
5. 调试与优化
工具推荐:
- Microsoft PIX:捕获DXVA2调用序列,分析解码/处理流水线。
- GPUView:监控硬件解码器队列状态。
常见问题:
- GUID不匹配:检查驱动声明的解码器GUID是否与媒体格式匹配。
- 内存泄漏:确保 DestroyVideoDecoder 释放所有资源。
6. 总结
必须实现:所有标准结构和枚举,确保与DirectX VA 2.0运行时兼容。
性能关键:
- 零拷贝内存路径(如硬件解码→渲染表面直通)。
- 最小化CPU干预(依赖GPU固定功能单元)。
安全要求:正确处理加密数据(如AES-128解密)。