次の方法で共有


モーション補正コールバック

DirectX ビデオ アクセラレーションでは、デジタル ビデオ デコード処理の高速化のために DirectDraw ドライバーで提供され、DVD サブ画像のサポートなどの目的でアルファ ブレンドがサポートされる、以下のモーション補正コールバック関数を使用します。

DdMoCompBeginFrame

DdMoCompCreate

DdMoCompDestroy

DdMoCompEndFrame

DdMoCompGetBuffInfo

DdMoCompGetFormats

DdMoCompGetGuids

DdMoCompGetInternalInfo

DdMoCompQueryStatus

DdMoCompRender

モーション補正コールバック関数は、DirectX ビデオ アクセラレーション インターフェイスのデバイス ドライバー側で構成されます。 モーション補正コールバック関数は、DD_MOTIONCOMPCALLBACKS 構造体のメンバーによって指定されます。 モーション補正コールバック関数へのアクセスが起きるしくみは、以下の流れのとおりです。

  1. デバイス ドライバーの DdMoCompGetGuids で生成された IAMVideoAccelerator::GetVideoAcceleratorGUIDs から GUID が届きます。

  2. ダウンストリーム入力ピンの IAMVideoAccelerator::GetUncompFormatsSupported への呼び出しによって、デバイス ドライバーの DdMoCompGetFormats からデータが返されます。

  3. 関連する処理の開始時に、デコーダーの IAMVideoAcceleratorNotify::GetCreateVideoAcceleratorData の出力ピンからの DXVA_ConnectMode データ構造がデバイス ドライバーの DdMoCompCreate に渡され、これによりビデオ アクセラレーション オブジェクトのことがデコーダーに通知されます。

  4. デバイス ドライバーの DdMoCompGetBuffInfo で生成されたデータが、IAMVideoAccelerator::GetCompBufferInfo から返されます。

  5. IAMVideoAccelerator::Execute を使用して送信されたバッファーを、デバイス ドライバーの DdMoCompRender が受信します。

  6. IAMVideoAccelerator::QueryRenderStatus を使用してデバイス ドライバーの DdMoCompQueryStatus が呼び出されます。 DdMoCompQueryStatus からの DDERR_WASSTILLDRAWING のリターン コードは、ホスト デコーダーによって IAMVideoAccelerator::QueryRenderStatus からの E_PENDING のリターン コードとして認識されます。

  7. IAMVideoAccelerator::BeginFrame に送信されたデータを、デバイス ドライバーの DdMoCompBeginFrame が受信します。 IAMVideoAccelerator::BeginFrame への応答でホスト デコーダーによって E_PENDING が認識されるには、DdMoCompBeginFrame からの DDERR_WASSTILLDRAWING のリターン コードが必要です。

  8. IAMVideoAccelerator::EndFrame に送信されたデータが、デバイス ドライバーの DdMoCompEndFrame に受信されます。

  9. 関連する処理の終了時に、デバイス ドライバーの DdMoCompDestroy を使用して、現在のビデオ アクセラレーション オブジェクトが今後は使用されないことがドライバーに通知されます。これにより、ドライバーは必要なクリーンアップを実行できるようになります。