モーション補正デバイスドライバとの動作対応

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

このセクションでは、DirectX VA インターフェイスのモーション補正デバイス ドライバー側について説明します。 (リファレンス:Windows 2000 DDK - グラフィックス ドライバー - デザイン ガイド - 3.0 DirectDraw DDI - 3.12 モーション補正。太字の構造については、Windows DDK のドキュメントを参照してください)。

次の項目は、 DD_MOTIONCOMPCALLBACKS 構造を介してアクセスされるエントリを参照します。

  1. 関連する処理の開始時に、デバイス ドライバーの DdMoCompCreate を使用して、ソフトウェア デコーダーがビデオ アクセラレーション オブジェクトの使用を開始することをドライバーに通知します。
  2. IAMVideoAccelerator::GetVideoAcceleratorGUIDs から受信した GUID は、デバイス ドライバーの DdMoCompGetGUIDs から生成されます。
  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 によって受信されます。 IAMVideoAccelerator::BeginFrame に応答してホスト デコーダーがE_PENDINGを確認するには、DdMoCompBeginFrame からE_PENDINGのリターン コードが必要です。
  9. IAMVideoAccelerator::EndFrame に送信されたデータは、デバイス ドライバーの DdMoCompEndFrame によって受信されます。
  10. 関連する処理の最後に、デバイス ドライバーの DdMoCompDestroy を使用して、ドライバーが必要なクリーンアップを実行できるように、現在のビデオ アクセラレータ オブジェクトが使用されなくなることをドライバーに通知します。