[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
本部分包含 DirectX VA 接口的动作补偿设备驱动程序端的说明。 (参考:Windows 2000 DDK - 图形驱动程序 - 设计指南 - 3.0 DirectDraw DDI - 3.12 运动补偿。有关粗体结构的文档,请参阅 Windows DDK。
以下项引用通过 DD_MOTIONCOMPCALLBACKS 结构访问的条目:
- 在相关处理开始时,设备驱动程序 DdMoCompCreate 用于通知驱动程序软件解码器将开始使用视频加速对象。
- 从 IAMVideoAccelerator::GetVideoAcceleratorGUIDs 接收的 GUID 源自设备驱动程序的 DdMoCompGetGUIDs。
- 调用下游输入引脚的 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 用于通知驱动程序当前视频加速对象不再使用,以便驱动程序可以执行任何必要的清理。