与运动补偿设备驱动程序的操作对应

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本部分包含 DirectX VA 接口的运动补偿设备驱动程序端的说明。 (参考:Windows 2000 DDK - 图形驱动程序 - 设计指南 - 3.0 DirectDraw DDI - 3.12 运动补偿。有关 boldface.) 结构的文档,请参阅 Windows DDK

以下项引用通过 DD_MOTIONCOMPCALLBACKS 结构访问的条目:

  1. 在相关处理开始时,设备驱动程序的 DdMoCompCreate 用于通知驱动程序软件解码器将开始使用视频加速对象。
  2. IAMVideoAccelerator::GetVideoAcceleratorGUID 接收的 GUID 源自设备驱动程序的 DdMoCompGetGUID。
  3. 调用下游输入引脚的 IAMVideoAccelerator::GetUncompFormatsSupported 会从设备驱动程序的 DdMoCompGetFormats 返回数据。
  4. 解码器的 IAMVideoAcceleratorNotify::GetCreateVideoAcceleratorData 中的DXVA_ConnectMode数据结构将传递给设备驱动程序的 DdMoCompCreate
  5. IAMVideoAccelerator::GetCompBufferInfo 返回的数据源自设备驱动程序的 DdMoCompGetBuffInfo
  6. 使用 IAMVideoAccelerator::Execute 发送的缓冲区由设备驱动程序的 DdMoCompRender 接收。
  7. 使用 IAMVideoAccelerator::QueryRenderStatus 会调用设备驱动程序的 DdMoCompQueryStatus。 主机解码器会将 DdMoCompQueryStatus DDERR_WASSTILLDRAWING的返回代码视为 IAMVideoAccelerator::QueryRenderStatus 中E_PENDING的返回代码。
  8. 发送到 IAMVideoAccelerator::BeginFrame 的数据由设备驱动程序的 DdMoCompBeginFrame 接收。 需要从 DdMoCompBeginFrame 返回E_PENDING代码,主机解码器才能查看E_PENDING以响应 IAMVideoAccelerator::BeginFrame
  9. 发送到 IAMVideoAccelerator::EndFrame 的数据由设备驱动程序的 DdMoCompEndFrame 接收。
  10. 在相关处理结束时,设备驱动程序的 DdMoCompDestroy 用于通知驱动程序将不再使用当前视频加速对象,以便驱动程序可以执行任何必要的清理。