与运动补偿设备驱动程序的操作对应
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
本部分包含 DirectX VA 接口的运动补偿设备驱动程序端的说明。 (参考:Windows 2000 DDK - 图形驱动程序 - 设计指南 - 3.0 DirectDraw DDI - 3.12 运动补偿。有关 boldface.) 结构的文档,请参阅 Windows DDK
以下项引用通过 DD_MOTIONCOMPCALLBACKS 结构访问的条目:
- 在相关处理开始时,设备驱动程序的 DdMoCompCreate 用于通知驱动程序软件解码器将开始使用视频加速对象。
- 从 IAMVideoAccelerator::GetVideoAcceleratorGUID 接收的 GUID 源自设备驱动程序的 DdMoCompGetGUID。
- 调用下游输入引脚的 IAMVideoAccelerator::GetUncompFormatsSupported 会从设备驱动程序的 DdMoCompGetFormats 返回数据。
- 解码器的 IAMVideoAcceleratorNotify::GetCreateVideoAcceleratorData 中的DXVA_ConnectMode数据结构将传递给设备驱动程序的 DdMoCompCreate。
- 从 IAMVideoAccelerator::GetCompBufferInfo 返回的数据源自设备驱动程序的 DdMoCompGetBuffInfo。
- 使用 IAMVideoAccelerator::Execute 发送的缓冲区由设备驱动程序的 DdMoCompRender 接收。
- 使用 IAMVideoAccelerator::QueryRenderStatus 会调用设备驱动程序的 DdMoCompQueryStatus。 主机解码器会将 DdMoCompQueryStatus DDERR_WASSTILLDRAWING的返回代码视为 IAMVideoAccelerator::QueryRenderStatus 中E_PENDING的返回代码。
- 发送到 IAMVideoAccelerator::BeginFrame 的数据由设备驱动程序的 DdMoCompBeginFrame 接收。 需要从 DdMoCompBeginFrame 返回E_PENDING代码,主机解码器才能查看E_PENDING以响应 IAMVideoAccelerator::BeginFrame。
- 发送到 IAMVideoAccelerator::EndFrame 的数据由设备驱动程序的 DdMoCompEndFrame 接收。
- 在相关处理结束时,设备驱动程序的 DdMoCompDestroy 用于通知驱动程序将不再使用当前视频加速对象,以便驱动程序可以执行任何必要的清理。