« 進路変更 | トップページ | DXVA解説(その2) »

2009年8月11日 (火)

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) »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 進路変更 | トップページ | DXVA解説(その2) »