2008-10-29

Windows 7 Developer Guideについて

http://code.msdn.microsoft.com/Win7DeveloperGuide

とりあえず読んでみた限りの、気になった部分に対する感想を書いてみる。Windows 7についての興味深い情報がある。これは感想であって要約ではない。

2D描画用に、Direct2Dが追加される。「Direct3D 10上に構築されている」とある。"immediate-mode"の意味がよく分からない。簡便な2D描画に期待するのは、むしろ豊富な固定機能だと思うのだが、シェーダーも使えるという意味なのだろうか。"resolution-independent"は、どうせ最後に行列による変換をかますから、実際の解像度を気にしなくていいということなのだろうか。GDI/GDI+やDirect3D 10との混在ができることをほのめかす言葉がある。Direct3D 11との混在はどうなのだろうか。

文字列描画用に、DirectWriteが追加される。GDIやDirect2Dなどで使用できる。Direct2Dと共に使用する場合は、ハードウェアによる支援が得られる。また、わざわざフォントをインストールしなくても使えるらしい。つまり、フォントファイルへのパスを指定して使うなどといったことも可能なのだろうか。それならば素晴らしい機能だ。

Vistaに追加されたWindows Imaging Componentが、新たな規格をサポートする。progressive image decoding(プログレッシブJPEGのことか)や、expanded PNG features(具体的になんだろう)だ。GIF metadataはどうでもいい。だいたいGIFのサポートなんて今時いらないだろう。PNGOUTによるPNGの方がよっぽど圧縮率が高い。

Direct3D 11が追加される。まあVistaにも来るだろうと思う。

Direct3D 10が改良される。シェーダーの命令数の上限がなくなったりとか、汎用的に使えるリソースとか、整数やバイナリなど。あとジオメトリシェーダーが追加(あれ? これって別にWindows 7に限った話ではないような)
Windows Advanced Rasterization Platformが追加される。これはソフトウェアによるDirect3D 10の実装で、マルチコア対応で、速いらしい(本当だろうか) Direct3D 10 Level 9というものが追加される。これにより、Direct3D 9のハードウェアでも、Direct3D 10やDirect3D 11が使えるようになる。足りない部分はWARPとやらで補われるのだろうか。Caps地獄再来はいやだなぁ。自分がDirect 3D 9の学習をやめてしまった理由も、ひとえにGPUベンダーが全然別々の機能だけを実装して謳い文句にしていたからだ。私は理想主義者なので、ハードウェアごとの違いを意識などしたくはなかった。

Direct3DとGDIを混同している糞コードに対する互換性の向上。DWMが無効にならずにすむようになった。また、パフォーマンスも向上している。

従来のDirectShowに変わりMedia FoundationがVistaで導入されたが、Windows 7は最初からH.264のデコーダを搭載しているらしい。さらにmp4にも対応している。やれやれ、さすがのMSも、H.264には勝てなかったか。これは素晴らしいことだ。これで気兼ねなく、H.264なmp4を使えるいうものだ。しかし問題は、AACのサポートするとは書いてないことだ。mp4コンテナといえば、まずH.264とAACである。最近になってmp3も認められたが、何にせよAACの方が音質が高い。とくにHE-AACやAACv2は、低ビットレート(HE-AACは48kbps以下、AACv2は32kbps以下)での音質が驚くほどよい。是非ともサポートして欲しいところだ。しかしこれは、SilverLightでH.264+AACなmp4がサポートされると発表されたことと関係があるのではないか。とすると、AACのサポートも期待してもいいのかもしれない。しかし、とすると、Windows Vistaでも、サポートがあるのではないか。

Media Foundationに、新しい簡便なAPIが追加されるらしい。これには興味がある。というのも、自分のプログラムで動画を再生してユーザに見せたい(たとえばゲームで途中に表示するムービーなど)といった程度のことで、従来のDirectShowやらMedia Foundationやらの複雑怪奇な低レベルのAPIを使うのはどう考えてもやりたくないことだからだ。

"New DVXA video processing APIs, which use a more flexible compositing model and are better suited for HD video formats."、などといった文章もあるけれど、正直DVXAにはまったく期待していない。なぜなら、DVXAでは、H.264規格のある機能を使うと再生できないなどといった程度のことならまだかわいいもので、主要なGPUベンダーのドライバでは、かなりの確率でブルースクリーンを表示してOSが落ちるからだ。GPUベンダーに自浄能力はなく、各社ともあいかわらず、ベンチマークとパフォーマンスに特化していて、安定ということをまったく考えていないドライバばかり出荷する。動画を再生しようとしただけでBSoDになるのはふざけているにも程がある。動画ファイルは規格違反のものが非常に多い。規格を守らないエンコーダもさることながら、HDDなどの不調でビット列が書き換わったとか、ダウンロードの途中の動画ファイルなど、データの構造が壊れていることは往々にしてある。いかなる入力があったとしても、BSoDを発生させるべきではない。

追記:AACもサポートされるらしい。

5 comments:

Anonymous said...

>Windows 7は最初からH.264のデコーダを搭載しているらしい。

ちょうど Expression Encoder 2 SP1 で H.264/AAC エンコードがサポートされたようです.
http://blogs.msdn.com/expressionencoder/archive/2008/09/23/8962401.aspx

もっとも,私は動画関係のことがさっぱり分からないのですが.
よろしければ機能面での感想等お聞かせ頂けると幸いです.
こちらの Expression Encoder 2 体験版(30日) + SP1 でも H.264/AAC エンコードを試せるんじゃないかと思います.
http://www.microsoft.com/downloads/details.aspx?familyid=A04DCC8C-9DB7-41CB-A27C-08CBEB0A01BA&displaylang=en
http://www.microsoft.com/downloads/details.aspx?FamilyId=A29BE9F9-29E1-4E70-BF67-02D87D3E556E&displaylang=en

Anonymous said...

済みません,やっぱり体験版だと機能制限されているかもしれないです.
製品版 + SP1 で,Video Profile に "Hardware Device - H.264 podcast (Large)" が追加されていることは確認できましたが,体験版だと今のところみつからず,です.

江添亮 said...

どうでしょう。doom9ではまったく取り上げられていないので、あまり人気のあるエンコーダではないのでは(doom9がx264に偏りすぎているのは事実ですが)
マイクロソフトなどの大手に期待することは、画質よりもむしろ、使いやすいGUIです。
マウスしか使えない人たちでも、iPodやPSPやPS3用に動画をエンコードできることが重要であって、画質はあまり謳い文句にはならないのでしょう。
実際、MSのWebサイトでも、H.264の画質についてはあまり宣伝されていないように思います。

画質を追及する人は、わざわざマウスなんかを使って雑多なGUIを使うのがわずらわしい人たちですから、自然とオープンソースでコマンドラインなx264を選びます。
x264は速いし画質もいいので、個人的に気に入っています。
ただ、GPLライセンスなので、特許的にかなりグレーなのですが。

DivXも次のバージョンはH.264になるので(名称はブランド力のあるDivXですが)、DivX社は、もっかエンコーダとデコーダを開発中だそうで、しばらくはH.264の天下になりそうですね。

Anonymous said...

なるほどー
画質・手軽さ的にはx264強し,と.

万人向けのGUIとしては,Windows 7 世代の(といっても Windows Live ブランドでしょうが)ムービーメーカーの動向に注目という感じなんですかね.

一方Expression EncoderのGUIですが,私は結構気に入っています.(WPF を使っているためという贔屓目もあるのですが)
特にいいなと思ったのは,バックグラウンド処理がきちんと分離されているところです.
ダイアログボックスにプログレスバーという鬱陶しい組み合わせはまず見ることがありません.
これは映像系に限らず,他のアプリケーションでも見習って欲しいですね.

ちなみにExpression Encoderはコマンドライン実行もサポートしているようです.
http://msdn.microsoft.com/en-us/library/cc294683.aspx
個人的にはサーバサイドで使いたいのですが,個人向けライセンスなのに大丈夫かなぁという不安もあったり.

江添亮 said...

動画サイトでも作るお仕事ですかね。