DirectX Video Acceleration ( DXVA ) は、Microsoft WindowsおよびXbox 360プラットフォーム向けのMicrosoft API仕様であり、ビデオデコードをハードウェア アクセラレーションで実行できるようにします。このパイプラインにより、 iDCT、モーション 補正、デインターレースなどのCPU負荷の高い処理をGPUにオフロードできます。DXVA 2.0 では、ビデオ キャプチャや処理処理など、より多くの処理をハードウェア アクセラレーションで実行できるようになりました。
DXVA は、ビデオ カードで使用されるビデオ レンダリングモデルと連携して動作します。Windows 2000 ( DirectX 7 )で標準化 API として導入され、現在Windows 98以降で利用可能な DXVA 1.0 は、ビデオ オーバーレイ モードまたはビデオ ミキシング レンダラー(VMR) のいずれかを使用できます。[ 1 ] DXVA 2.0 は、Windows Vista、Windows 7、Windows 8以降の OS でのみ利用可能で、Media Foundation (MF) と統合され、MF に存在する拡張ビデオ レンダラー(EVR)を使用し、 [ 1 ]通常はWDDMグラフィックス ドライバーに基づいています。[ 2 ]
DXVAは、ソフトウェアビデオデコーダーによって使用され、コーデックのハードウェアアクセラレーションによるデコードとレンダリングのためのコーデック固有のパイプラインを定義します。パイプラインは、メディアストリームの解析とDXVA互換構造への変換に使用されるCPUから始まります。DXVAは、ハードウェアアクセラレーションが可能な一連の操作と、グラフィックドライバが実装して操作を高速化できるデバイスドライバインターフェイス(DDI)を指定します。コーデックが定義された操作のいずれかを実行する必要がある場合、これらのインターフェイスを使用して、これらの操作のハードウェアアクセラレーション実装にアクセスできます。グラフィックドライバがインターフェイスの1つ以上を実装しない場合、ソフトウェアによるフォールバックを提供するのはコーデックの責任です。デコードされたビデオはハードウェアビデオレンダラーに渡され、そこでデバイスにレンダリングされる前に、さらにビデオの後処理が適用される場合があります。結果として得られるパイプラインは、 DirectShow互換アプリケーションで使用できます。
DXVA はモーション補償DDI を規定しており、 iDCT操作、ハフマン符号化、モーション補償、アルファ ブレンディング、逆量子化、色空間変換、フレーム レート変換操作などのインターフェイスを規定しています。 [ 3 ] [ 4 ]また、デインターレース DDI、COPP DDI、ProcAmp DDI の 3 つのサブ仕様も含まれています。[ 5 ]デインターレースDDI は、デインターレース操作のコールバックを規定しています。COPP (Certified Output Protection Protocol) DDI 関数は、暗号化関数を規定することで、パイプラインをDRM 保護メディア用に保護することができます。ProcAmp DDI は、ビデオの後処理を高速化するために使用されます。ProcAmp ドライバ モジュールは、ハードウェア ビデオ レンダラーとディスプレイ ドライバの間に位置し、解凍されたビデオに後処理フィルタを適用する機能を提供します。
DXVA DDIによって公開される関数は、 DirectShowクライアントから直接アクセスすることはできませんが、ビデオレンダラーへのコールバック関数として提供されます。そのため、レンダラーはパイプラインの基盤となる上で非常に重要な役割を果たします。
DirectX 9.0cで、H.264に対するDXVAのサポートが追加されました。
DXVA 2.0 は、ビデオ パイプラインの実装を強化し、ビデオ キャプチャ用の Capture DDI を含む多数の DDI を追加します。DXVA 1.0 と共有する DDI も、より多くの操作のハードウェア アクセラレーションを使用できる機能で強化されています。また、DDI 関数は呼び出し元に直接利用可能であり、ビデオ レンダラーによる仲介は不要です。[ 6 ]そのため、プログラムは、メディアをデコードするだけのパイプライン (レンダリングなし) や、後処理とレンダリング (デコードなし) を作成するパイプラインを作成することもできます。これらの機能にはWindows ディスプレイ ドライバー モデルドライバーが必要なため、DXVA 2.0 はWindows Vista、Windows Server 2008、[ 1 ] [ 6 ] Windows 7、Windows Server 2008 R2、Windows 8に限定されます。Windows XPおよびWindows 2000では、プログラムは DXVA 1.0 を使用できます。 DXVA 2.0 では、Vista、Windows 7、および Windows 8 でのみ、ビデオ レンダラーとしてEnhanced Video Renderer が使用できます。 [ 1 ] (Windows XP では、VMR9 とよく知られている Overlay Mixer を使用して DXVA レンダリングが可能です。) DXVA はMedia Foundationと統合され、DXVA パイプラインをMedia Foundation Transforms ( MFT )として公開できます。デコーダ パイプラインや後処理パイプラインも MFT として公開でき、Media Foundationトポロジ ローダーで使用して完全なメディア再生パイプラインを作成できます。DXVA 1.0 は DXVA 2.0 を使用してエミュレートされます。[ 1 ] DXVA 2.0 には COPP DDI は含まれておらず、代わりに保護されたコンテンツにはPVPを使用します。Windows 7 では、ドライバーがWDDM 1.1に準拠している場合、 DXVA-HD が実装されます。 [ 7 ] Windows 8 ( DirectX 11.1 )以降、Direct3D 11 ビデオアクセラレーション (D3D11VA) が導入されました。D3D11VA では、DXVA2 デコーダーとEVRレンダラーの両方がDirect3D 11を利用しています。[ 8 ]
DXVA2には、ネイティブモードとコピーバックモードの2つの動作モードがあります。
ネイティブモードでは、デコードされたビデオは表示されるまでGPUメモリに保持されます。ビデオデコーダは、中間処理フィルタを介さずにビデオレンダラーに接続する必要があります。また、ビデオレンダラーはDXVAをサポートしている必要があり、そのためレンダラーの選択肢が限られます。EVR -11は常にDXVA2ネイティブモードを使用します。
コピーバックモードでは、デコードされたビデオがGPUメモリからCPUメモリにコピーされます。このモードには上記のような制限はなく、通常のソフトウェアデコーダーと同様に動作しますが、GPUがメモリからCPUメモリへのコピーを高速に行えない場合、ビデオの途切れが発生します。DXVA2コピーバックモードを使用するには、GPUがDirect3D 9Exをサポートしている必要があります。
ネイティブモードは、追加のコピーバック操作によってGPUメモリ負荷が増加するため、カスタマイズされた処理が必要でない限り有利です。[ 9 ]