DirectX Video Acceleration

出典: フリー百科事典『ウィキペディア(Wikipedia)』

DirectX Video Acceleration (DXVA) は、マイクロソフトAPI仕様である。WindowsXbox 360において、パイプラインにより、離散コサイン変換動き補償、およびデインターレース処理などの特定のCPU集約型処理をGPUオフロードすることで、ビデオのデコードハードウェアアクセラレーションを利用して実行できるようにする。DXVA 2.0ではさらに、キャプチャや処理操作など、より多くの操作をハードウェアアクセラレーションで実行することができる。APIの一貫性の観点から、同様の機能は後にリリースされたDirect3D 11に統合され、DXVAは旧世代のAPIとなりつつ有る。

DXVAは、ビデオカードで使用されるビデオレンダリングモデルと連携して動作する。DXVA 1.0は、Windows 2000で標準化されたAPIとして導入され、現在Windows 98以降で利用可能で、オーバーレイレンダリングモードまたはVMR 7/9のいずれかを使用できる[1]。DXVA 2.0は、Windows VistaWindows 7Windows 8以降のOSでのみ利用可能で、Media Foundation (MF) と統合されており、MFにあるEnhanced Video Renderer (EVR) を使用する。

概要[編集]

DXVAは、ハードウェアアクセラレーションによるコーデックのデコードとレンダリングのためのコーデック固有のパイプラインを定義するソフトウェアビデオデコーダによって使用される。パイプラインは、メディアストリームの解析とDXVA互換構造への変換を行うCPUで開始される。DXVAは、ハードウェアアクセラレーションが利用可能な操作と、グラフィックスドライバが動作を高速化できるデバイスドライバ インターフェイス (DDI) を指定する。コーデックが定義された操作を実行する必要がある場合、これらのインターフェイスを使用して、ハードウェアによる高速化が行われた実装にアクセスできる。グラフィックスドライバが一部のインターフェイスを実装していない場合、ソフトウェアによるフォールバックを行うかどうかはコーデックにより異なる。デコードされたビデオはハードウェアビデオレンダラに渡されるが、ハードウェアビデオレンダラでは、デバイスにレンダリングされる前にさらなるビデオ後処理が適用されることがある。生成されたパイプラインは、DirectShow互換アプリケーションで使用できる。

DXVAは、離散コサイン変換ハフマン符号化、動き補償アルファブレンディング、逆量子化色空間変換およびフレームレート変換演算のためのインターフェースを指定する動き補償DDIを指定する[2][3]。また、Deinterlacing DDI、COPP DDI、ProcAmp DDIという3つのサブ仕様も含んでいる[4]。Deinterlacing DDIは、デインターレース処理のコールバックを指定する。COPP (Certified Output Protection Protocol) DDI機能を使用すると、暗号化機能を指定することで、DRM保護されたメディアのパイプラインを保護できる。ProcAmp DDIは、ビデオの後処理を高速化するために使用される。そしてProcAmpドライバモジュールは、ハードウェアビデオレンダラとディスプレイドライバの間に配置され、圧縮解除されたビデオに後処理フィルタを適用する機能を提供する。

DXVA DDIによって公開される関数は、DirectShowクライアントから直接アクセスすることはできないが、ビデオレンダラにコールバック関数として提供されるため、レンダラはパイプラインを固定する上で非常に重要な役割を果たす。

Windows Vista以降でのDXVA[編集]

DXVA 2.0はビデオパイプラインの実装を強化し、ビデオキャプチャ用のキャプチャDDIを含む他のDDIのホストを追加する。DXVA 1.0と共有するDDIでも、より多くの操作でハードウェアアクセラレーションを使用できるようになった。また、DDI関数は呼び出し元が直接利用することができ、ビデオレンダラが仲介する必要はない[5]。このように、プログラムはメディアを単純に(レンダリングせずに)デコードするか、後処理およびレンダリング(デコードなしで)をするためのパイプラインを作成することもできる。これらの機能には、Windows Display Driver Model (WDDM) ドライバが必要となる。WDDMドライバは、Windows Vista、Windows Server 2008[1][5]、Windows 7、Windows Server 2008 R2およびWindows 8以降でのみ利用可能であるため、DXVA 2.0も対象がそのOSのみに制限される。Windows XPおよびWindows 2000では、代わりにDXVA 1.0を使用できる。DXVA 2.0はVista、Windows 7、Windows 8以降でのみビデオレンダラとしてエンハンスドビデオレンダラを使用できる[1](Windows XPでは、VMR9とオーバーレイミキサでDXVAレンダリングが可能)[要出典]DXVAは、Media Foundation DXVAパイプラインを、デコーダパイプラインや後処理パイプラインであっても、Media Foundation Transforms (MFT) として公開することができる[要出典]MFTはMFトポロジローダーでフルメディア再生パイプラインを作成するために使用できる[要出典]

DXVA 1.0はDXVA 2.0を使用してエミュレートされる[1]。DXVA 2.0はCOPP DDIを含まないどころか、保護されたコンテンツにはPVPが使用されている。ドライバーがWDDM 1.1に準拠している場合、Windows 7は DXVA-HDを提供する[6]

DXVA 2.0の実装:ネイティブとコピーバック[編集]

DXVA 2.0の実装には、ネイティブとコピーバックの2種類がある[要出典]

ネイティブ実装では、デコードされたビデオは表示されるまでGPUメモリにとどまる[要出典]ビデオデコーダは、中間処理フィルタを通さず直接ビデオレンダラに接続する必要がある[要出典]さらに、ビデオレンダラもDXVAをサポートしている必要があるため、レンダラの選択の自由度が低くなる[要出典]

コピーバック実装では、デコードされたビデオはGPUメモリからCPUメモリにコピーされる[要出典]この実装では上記の制限はなく、通常のソフトウェアデコーダと同様の働きをするが、GPUがGPUメモリからCPUメモリへのコピーを実行するのに十分高速でない場合、ビデオのカクつき(スタッタリング)が発生する[要出典]

ネイティブモードは、CPUにおける追加処理が必要でない限り負荷軽減という意味でコピーバックモードより有利である。CPUにおける処理を可能にするためにコピーバックモードで実行されるVRAMからメインメモリへの処理結果のコピーバック操作はGPUのメモリ負荷を増加させることになる[7]

DXVAよりも後に同様の機能が統合されたDirect3D 11の場合、システムの性能評価に基づきネイティブとコピーバックが自動的に切り替えられる仕組みになった。

GPUは以下の条件を満たす必要がある。

ソフトウェア[編集]

参考文献[編集]

関連項目[編集]

外部リンク[編集]