DirectX Video AccelerationDirectX Video Acceleration (DXVA) は、ハードウェアアクセラレータを使用してビデオ処理を高速化するための、マイクロソフトによるAPIおよびデバイスドライバーインターフェイス (DDI) である[1]。Microsoft WindowsやXbox 360において、DXVAのパイプライン処理により、逆離散コサイン変換 (iDCT)、動き補償、およびデインターレース処理(インターレース解除)などの特定のCPU集約型処理をGPUにオフロードすることで、ビデオのデコードをハードウェアで高速に実行すること(ハードウェアアクセラレーション)が可能となる。DXVA 2.0ではさらに、キャプチャや加工操作など、より多くの操作をハードウェアアクセラレートできる。しかしAPIの一貫性の観点から、同様の機能は後にリリースされたMicrosoft Windows 8/Microsoft Windows Server 2012においてDirect3D 11に統合され[2]、DXVAは旧世代のAPIとなりつつある。 DXVAは、ビデオカードなどのグラフィックスハードウェアで使用されるビデオレンダリングモデルと連携して動作する。DXVA 1.0は、Windows 2000で標準化されたAPIとして導入され、現在[いつ?]Windows 98以降で利用可能で、オーバーレイレンダリングモードまたはVMR 7/9のいずれかを使用できる[3]。DXVA 2.0は、Windows Vista/Windows Server 2008以降のOSでのみ利用可能で、Media Foundation (MF) と統合されており、MFにあるEnhanced Video Renderer (EVR) を使用する。 概要DXVAは、ハードウェアアクセラレーションによるコーデックのデコードとレンダリングのためのコーデック固有のパイプラインを定義するソフトウェアビデオデコーダによって使用される。パイプラインはCPUで開始され、CPUはメディアストリームの解析とDXVA互換構造への変換に使用される。DXVAは、ハードウェアアクセラレーションが利用可能な操作と、グラフィックスドライバーが操作を高速化するために実装できるデバイスドライバーインターフェイス (DDI) を規定する。定義された操作をコーデックが実行する必要がある場合、これらのインターフェイスを使用して、ハードウェアアクセラレートされた実装にアクセスできる。グラフィックスドライバーが一部のインターフェイスを実装していない場合、ソフトウェアによるフォールバックを行うかどうかはコーデックにより異なる。デコードされたビデオはハードウェアビデオレンダラに渡されるが、ハードウェアビデオレンダラでは、デバイスにレンダリングされる前にさらなるビデオ後処理が適用されることがある。生成されたパイプラインは、DirectShow互換アプリケーションで使用できる。 DXVAは動き補償DDIを規定する。これはiDCT、ハフマン符号化、動き補償、アルファブレンディング、逆量子化、色空間変換およびフレームレート変換操作のためのインターフェイスを規定するものである[4][5]。また、Deinterlacing DDI、COPP DDI、ProcAmp DDIという3つのサブ仕様も含んでいる[6]。Deinterlacing DDIは、デインターレース処理のコールバックを指定する。COPP (Certified Output Protection Protocol) DDI関数は、暗号化関数を指定することで、DRM保護されたメディア用にパイプラインのセキュリティ保護を可能とする。ProcAmp DDIは、ビデオの後処理を高速化するために使用される。そしてProcAmpドライバーモジュールは、ハードウェアビデオレンダラとディスプレイドライバーの間に配置され、圧縮解除されたビデオに後処理フィルタを適用する機能を提供する。 DXVA DDIによって公開される関数は、DirectShowクライアントから直接アクセスすることはできないが、ビデオレンダラにコールバック関数として提供されるため、レンダラはパイプラインを支える非常に重要な役割を果たす。 Windows Vista以降でのDXVADXVA 2.0はビデオパイプラインの実装を強化し、ビデオキャプチャ用のキャプチャDDIを含む他のDDIのホストを追加する。DXVA 1.0と共有するDDIでも、より多くの操作でハードウェアアクセラレーションを使用できるようになった。また、DDI関数は呼び出し元が直接利用することができ、ビデオレンダラが仲介する必要はない[7]。このように、プログラムはメディアを単純に(レンダリングせずに)デコードするか、(デコードなしで)後処理およびレンダリングをするためのパイプラインを作成することもできる。これらの機能には、Windows Display Driver Model (WDDM) 準拠のドライバーが必要となる。WDDMドライバーは、Windows Vista/Windows Server 2008[3][7]以降でのみ利用可能であるため、DXVA 2.0も対象がそのOSのみに制限される。Windows XPおよびWindows 2000では、代わりにDXVA 1.0を使用できる。DXVA 2.0はVista以降でのみビデオレンダラとしてEnhanced Video Rendererを使用できる[3](Windows XPでは、VMR9とオーバーレイミキサでDXVAレンダリングが可能)[要出典]。DXVAは、Media Foundation DXVAパイプラインを、デコーダパイプラインや後処理パイプラインであっても、Media Foundation Transforms (MFT) として公開することができる[要出典]。MFTはMFトポロジローダーでフルメディア再生パイプラインを作成するために使用できる[要出典]。 DXVA 1.0はDXVA 2.0を使用してエミュレートされる[3]。DXVA 2.0はCOPP DDIを含まないどころか、保護されたコンテンツにはPVPが使用されている。ドライバーがWDDM 1.1に準拠している場合、Windows 7/Windows Server 2008 R2はDXVA-HDを提供する[8][9][10]。 DXVA 2.0の実装:ネイティブとコピーバックDXVA 2.0の実装には、ネイティブとコピーバックの2種類がある[要出典]。 ネイティブ実装では、デコードされたビデオは表示されるまでGPUメモリにとどまる[要出典]。ビデオデコーダは、中間処理フィルタを通さず直接ビデオレンダラに接続する必要がある[要出典]。さらに、ビデオレンダラもDXVAをサポートしている必要があるため、レンダラの選択の自由度が低くなる[要出典]。 コピーバック実装では、デコードされたビデオはGPUメモリからCPUメモリにコピーされる[要出典]。この実装では上記の制限はなく、通常のソフトウェアデコーダと同様の働きをするが、GPUがGPUメモリからCPUメモリへのコピーを実行するのに十分高速でない場合、ビデオのカクつき(スタッタリング)が発生する[要出典]。 ネイティブモードは、CPUにおける追加処理が必要でない限り負荷軽減という意味でコピーバックモードより有利である。CPUにおける処理を可能にするためにコピーバックモードで実行されるVRAMからメインメモリへの処理結果のコピーバック操作はGPUのメモリ負荷を増加させることになる[11]。 DXVAよりも後に同様の機能が統合されたDirect3D 11の場合、システムの性能評価に基づきネイティブとコピーバックが自動的に切り替えられる仕組みになった。 GPUは以下の条件を満たす必要がある。 ソフトウェア
参考文献
関連項目外部リンク |