DXVA解説(その1)
前回の更新で予告したように、今回から、DXVA解説を書いていく事にする。
まず、最初は、この手の解説では、お約束の「概説」と「歴史」から始めたい。
DXVA周りのプログラムを書いている人は、読む必要が無い。もっと、はっきり言えば、この解説シリーズ自体、読む必要が無い。この解説は、プログラムを書く事はできるが、DXVAの事を知らない人向け。
注意
ここに書いてある解説は、ブログ主の主観的な意見であり、他の誰かに検証されたものではありません。そのため、嘘、間違いが含まれる可能性があります。
概説
「DXVAって何だ。」という話。
一言でいうと、DirectX Video Accelerationの略称。これでは、あんまりなので、マイクロソフトの定義をMSDNから引用。
DirectX Video Acceleration (DXVA) is an API and a corresponding DDI for using hardware-acceleration to speed up video codec processing.
非常に手を抜いて日本語にすると、「DXVAとは、APIと、そのAPIに対応するDDIの事である」となる。(for以降は、あえて無視)。問題は、単にAPIと書いていない事だ。普通(勿論、普通の定義は、人によって違うけれど)、この辺りは、単にAPIと書いてある事が多い。
では、「DDIって何だ。」の話になる。これも一言でいうと、Device Driver Interfaceの略称。マイクロソフト的には、Windowsのデバイスドライバが提供するインターフェイスの事だ。
この説明では、一般的過ぎるので、もう少し絞り込んで「DXVAに含まれるDDIって何だ」の答えは、「ディスプレイドライバが提供するインターフェイスの一部で、DXVA専用に書かれたもの」となる。
ここで、最初のDXVAの定義のfor以降を、日本語にすると「ビデオ・コーデック(圧縮・伸張などが代表的)を、より速く処理するために、ハードウェア・アクセレーションを使用する」となる。
ここでいう、ハードウェア・アクセレーションとは、GPUの機能の一つ。つまり、ハードウェア上に実装されている機能の事だ。
ここで、ちょっと余談。
アプリケーションが、より速く処理を行うために、最も効率よく、ハードウェアを使用する方法は、何かというと、アプリケーションを書く人が、直接、ハードウェアにアクセスする事だ。勿論、現代的なOSでは、こんな方法は非難の対象となる。
でも、効率の事だけを考えると、この方法が一番良いし、実際に使われていたりする。一部の業界では、ハードウェア・リソースを、メモリ空間にマップして、そのアドレスを教えるだけのデバイスドライバを書いておいて、アプリケーション側で、そのアドレスをMMAPして、使用するなんていうのは、良くある話。
本題に戻る。
余談に書いたように、アプリケーションが、ハードウェアを直接使う事ができれば、効率は良くなるのだが、さすがに、普通のPCやサーバーでは、そんな事は許されない。アプリケーションのバグの影響で、GPUの動作が止まってしまうと、ユーザーはお手上げになるし、そもそも、アプリケーションを書く人が、使用するハードウェアの機能の詳細を、事前に知っていなければできない。使用する対象ハードウェアを、限定できないWindowsでは、そんなことは、ほぼ不可能だ。
実際のところ、DXVAのAPIをコールするアプリケーションを書く人(代表的なのは、PowerDVDを書いている人とか、WMPを書いている人)は、ハードウェアの詳細なんて知らないし、DDIを含むディスプレイドライバを書く人は、nVidiaかAMDの誰かで、ハードウェアの詳細について聞いても、何も教えてもらえない。
でも、DXVAは、ハードウェアを使用することになっている。つまり、こういうことになる。
アプリケーション 間にいる何か ディスプレイドライバ ハードウェア
DXVAのAPIをコールする -> 得体の知れない変換 -> DDIがコールされる -> GPUが頑張る
これで、「DXVAとは、APIと、そのAPIに対応するDDIの事である」の意味が理解できると思う。つまり、アプリケーションを書く人と、ディスプレイドライバを書く人が、DXVAで決められた約束事を守れば、お互いの事を知らなくても、何とかなるという、よくある話だ。
ここで、冷静になって、ファイルを書き出すアプリケーションを、同じように、考えてみる。
アプリケーション Windows OS IFSドライバ、HDDドライバ ハードウェア
OPEN/WRITE/CLOSE -> よく分からない変換 -> IRPが降ってくる -> HDDが頑張る
本質は、何も変わらない事が良く分かるのではないかと思う。
アプリケーションは、スタンダードAPIをコールして、Windowsが変換し、WDMドライバにIRPが渡されて、最終的に、HDDが仕事をする。違うのは、スタンダードAPIと、WDMドライバのIRPを組み合わせて、「云々」という名前で呼ばない事だ。
「歴史」に続く予定。
次の更新は、いつになるか分かりません。書きたくなったら、更新する予定。
« 進路変更 | トップページ | DXVA解説(その2) »
「パソコン・インターネット」カテゴリの記事
- VMR9とNV12で嵌る(その6)(2009.11.10)
- VMR9とNV12で嵌る(その7)(2009.12.16)
- DXVA解説(その6)(2009.11.14)
- VMR9とNV12で嵌る(その5)(2009.10.25)
- VMR9とNV12で嵌る(その3)(2009.09.19)

コメント