DirectX Video Acceleration

DirectX Video Acceleration (DXVA) とは



DirectX Video Acceleration (DXVA) は、マイクロソフトが提供するAPIおよびデバイスドライバーインターフェース (DDI) で、ハードウェアアクセラレータを使用してビデオ処理を高速化する技術です。WindowsやXbox 360などの環境で、DXVAを利用することで、逆離散コサイン変換 (iDCT)、動き補償、デインターレース処理といった、CPU負荷の高い処理をGPUにオフロードし、ビデオデコードのハードウェアアクセラレーションを実現します。DXVA 2.0では、キャプチャや加工操作など、さらに多くの処理がハードウェアアクセラレーションの対象となりました。

しかし、APIの一貫性の観点から、同様の機能はWindows 8/Server 2012以降でDirect3D 11に統合され、DXVAは旧世代のAPIとなりつつあります。

DXVAの仕組み



DXVAは、ビデオカードなどのグラフィックスハードウェアのレンダリングモデルと連携して動作します。DXVA 1.0は、Windows 2000で標準化され、Windows 98以降で利用可能です。オーバーレイレンダリングモードやVMR 7/9を利用できます。DXVA 2.0は、Windows Vista/Server 2008以降のOSでのみ利用可能で、Media Foundation (MF) と統合されており、MFのEnhanced Video Renderer (EVR) を使用します。

DXVAは、ソフトウェアビデオデコーダによって使用され、ハードウェアアクセラレーションによるコーデックのデコードとレンダリングのためのパイプラインを定義します。パイプラインはCPUで開始され、メディアストリームの解析とDXVA互換構造への変換を行います。DXVAは、ハードウェアアクセラレーションが可能な操作と、グラフィックスドライバーが高速化のために実装できるデバイスドライバーインターフェース (DDI) を規定します。コーデックが定義された操作を実行する必要がある場合、これらのインターフェースを使用してハードウェアアクセラレートされた実装にアクセスします。

グラフィックスドライバーがインターフェースの一部を実装していない場合、ソフトウェアによる代替処理を行うかどうかは、コーデックによって異なります。デコードされたビデオはハードウェアビデオレンダラに渡され、デバイスにレンダリングされる前に、さらなるビデオ後処理が適用される場合があります。生成されたパイプラインは、DirectShow互換アプリケーションで使用できます。

DXVAは、動き補償DDIを規定し、iDCT、ハフマン符号化、動き補償、アルファブレンディング、逆量子化色空間変換、フレームレート変換のためのインターフェースを提供します。また、デインターレース処理のコールバックを指定するDeinterlacing DDI、DRM保護されたメディア用の暗号化関数を提供するCOPP (Certified Output Protection Protocol) DDI、ビデオ後処理を高速化するProcAmp DDIも含まれます。ProcAmpドライバーモジュールは、ハードウェアビデオレンダラとディスプレイドライバーの間に配置され、圧縮解除されたビデオに後処理フィルタを適用する機能を提供します。

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

Windows Vista以降でのDXVA



DXVA 2.0は、ビデオパイプラインの実装を強化し、ビデオキャプチャ用のキャプチャDDIを含む、他のDDIを追加します。DXVA 1.0と共通のDDIでも、より多くの操作でハードウェアアクセラレーションが利用可能になりました。また、DDI関数は呼び出し元が直接利用でき、ビデオレンダラが仲介する必要はありません。これにより、プログラムはメディアを単にデコードしたり、後処理とレンダリングを分離して実行するパイプラインを作成できます。これらの機能には、Windows Display Driver Model (WDDM) 準拠のドライバーが必要で、Windows Vista/Server 2008以降でのみ利用可能です。Windows XPおよびWindows 2000では、DXVA 1.0を使用できます。DXVA 2.0は、Vista以降でのみEnhanced Video Rendererを使用できます(Windows XPでは、VMR9とオーバーレイミキサーでDXVAレンダリングが可能です)。

DXVAは、Media Foundation DXVAパイプラインを、デコーダパイプラインや後処理パイプラインであっても、Media Foundation Transforms (MFT) として公開できます。MFTはMFトポロジローダーでフルメディア再生パイプラインを作成するために使用できます。

DXVA 1.0はDXVA 2.0でエミュレートされます。DXVA 2.0はCOPP DDIを含まず、保護されたコンテンツにはPVPが使用されます。ドライバーがWDDM 1.1に準拠している場合、Windows 7/Server 2008 R2はDXVA-HDを提供します。

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



DXVA 2.0の実装には、ネイティブとコピーバックの2種類があります。

ネイティブ実装:デコードされたビデオは表示されるまでGPUメモリにとどまります。ビデオデコーダは、中間処理フィルタを通さず直接ビデオレンダラに接続する必要があります。また、ビデオレンダラもDXVAをサポートしている必要があります。
コピーバック実装:デコードされたビデオはGPUメモリからCPUメモリにコピーされます。この実装では上記の制限がなく、通常のソフトウェアデコーダと同様に動作しますが、GPUのメモリコピー速度が十分でない場合、ビデオのスタッタリングが発生する可能性があります。

ネイティブモードは、CPUでの追加処理がない場合、負荷軽減の点でコピーバックモードより有利です。コピーバックモードでは、VRAMからメインメモリへのコピー操作がGPUのメモリ負荷を増加させる可能性があります。

Direct3D 11では、システムの性能評価に基づき、ネイティブとコピーバックが自動的に切り替えられるようになりました。

DXVA対応GPU



DXVAに対応しているGPUは以下の通りです。

AMD: Radeon HD 6xxx 以降
NVIDIA: GeForce 500 シリーズ以降
Intel: Intel HD Graphics 2000 以降

DXVA対応ソフトウェア



DXVAをサポートしているソフトウェアの例を以下に示します。

Adobe Flash v10.3 以降
Daum PotPlayer
DivX H.264 Decoder v1.2 以降
ffdshow-tryouts revision 3185 以降
Freemake Video Converter v2.2 以降
Kodi
Media Player Classic Home Cinema
Nero Multimedia Suite (Nero Kwik Media, Nero MediaHub, Nero Showtime)
PowerDVD
VLC media player v1.1 以降 (DXVA 2.0 のみ)
WinDVD
Windows Media Player 11 (WMV3 のみ)
Windows Media Player 12
* 5KPlayer

まとめ



DXVAは、GPUの処理能力を動画再生に活用することで、CPU負荷を軽減し、よりスムーズな動画再生を実現するための重要な技術です。バージョンや実装方式によって、機能や利用条件が異なるため、注意が必要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。