ビデオ デコード操作の同期
DirectX VA 2.0 の同期メカニズムは 1.0 バージョンから改善され、Microsoft Direct3D 操作で使用される同期メカニズムと類似性が高いものになりました。
DirectX VA 1.0 では、主としてデコーダーによって同期が実行されます。 デコーダーは、圧縮バッファーを使用する前に、DdMoCompQueryStatus 関数を呼び出して、バッファーが使用可能かどうかを判断します (つまり、ハードウェアはバッファーにアクセスしていません)。 バッファーが使用可能でない場合、デコーダーはスリープ、ポーリング、または別の操作を実行する必要があります。
DirectX VA 2.0 では、Direct3D が頂点バッファーとインデックス バッファーで既に使用している同期モデルを使用します。 DirectX VA 2.0 では、デコーダーが圧縮バッファーをロックすることによって同期が実行されます。 ユーザー モード ディスプレイ ドライバーが圧縮バッファーをロックしようとして、バッファーが使用中の場合、ドライバーはロックに失敗するか、バッファーの名前を変更できます。 ユーザー モード ディスプレイ ドライバーは、ドライバーが pfnLockCb 関数の呼び出しで D3DDDICB_LOCKFLAGS 構造体の Discard メンバーを設定するときに、ビデオ メモリ マネージャーにバッファーの名前を変更するように要求します。 ユーザー モードのディスプレイ ドライバーがバッファーの名前を変更した場合、ドライバーは、デコーダーがブロックされずに続行できるように、代替バッファーへのポインターを返します。
通常、DirectX VA 2.0 で同期が問題になるのは、ハードウェアが追加のバッファー コピーなしで圧縮バッファーを直接使用できる場合のみです。