Share via


モーション補正

モーション補正は、圧縮デジタル ビデオのデコード プロセスにおける重要な段階を指す用語です。 グラフィック アクセラレータ デバイスの多くは、圧縮されたビデオのデコードをサポートするために何らかの種類のアクセラレーション機能を搭載しています。 モーション補正プロセスは、ビデオのデコードで最も頻繁にサポートされる部分であるため、圧縮されたビデオのデコードをサポートするデバイス ドライバー インターフェイスは、モーション補正 DDI と呼ばれます。 一部のデバイスでは、モーション補正に加えて、IDCT (逆離散コサイン変換) を実行したり、ソフトウェア ビデオ デコーダーに搭載されたその他のハードウェア機能を使用したりして、デコード プロセスを高速化できます。 モーション補正 DDI は、こういったその他の機能を搭載しているデバイスを処理できるだけの十分な柔軟性を備えています。

ソフトウェア MPEG デコーダーへの入力データは、明確に定義されています。 デコーダーが MPEG-2 用に設計されている場合の入力は、MPEG-2 形式です。 デコーダーの出力も、明確に定義されています。 さまざまな形式の非圧縮フレームです。 とはいえ、ソフトウェア デコーダーとディスプレイ デバイス間の中間形式は明確に定義されておらず、多くのデバイスで独自のデータ形式が必要になります。 それゆえモーション補正デバイス ドライバー インターフェイスは高い柔軟性を備えていて、中間形式は GUID として記述されます。 ディスプレイ ドライバーによってサポートされている機能を表す GUID が報告され、ソフトウェア デコーダーによって最も要件に適した GUID が選択されます。

モーション補正機能を有効にするには、ドライバーで以下の手順を実行する必要があります。

  • DdGetDriverInfo 関数を実装し、DrvGetDirectDrawInfo が呼び出されたときにこの関数を指す DD_HALINFO 構造体の GetDriverInfo メンバーを設定します。 ドライバーの DdGetDriverInfo 関数で、GUID_MotionCompCallbacks GUID を解析する必要があります。

  • GUID_MotionCompCallbacks GUID で DdGetDriverInfo 関数が呼び出されたときに、設定された適切なドライバー コールバック ポインターとコールバック型フラグを DD_MOTIONCOMPCALLBACKS 構造体に入力します。 その後、ドライバーは、この初期化された構造体を、DD_GETDRIVERINFODATA 構造体の lpvData メンバーがポイントする、Microsoft DirectDraw によって割り当てられたバッファーにコピーし、dwActualSize 内のバッファーに書き込まれたバイト数を返す必要があります。