DirectShowを扱う部分のコード、結局全部自分で書いた

前回、DirectShow Java Wrapper ってのを使うって書いたけど、細かな問題がいろいろあって、でも暫定的にそれでリリースしてもいいかなーとも思ったけど、後でどうせ自分で書くことになりそうなことはほぼ間違いなさそうだったので、全部書いちゃった。


Windowsプログラミングするのすごい久しぶり。というか、以前にちょっとやったのもほんの少しだけだったので、ほとんど初心者なんですが、まぁなんとかなりました。やればできるもんですね。
土曜に VC++ 2008 EE インスコして、dxtrans.h が無いだとか、graphedt入手するために1GB以上あるWindows SDKをダウンロードしたり、なんだかんだで環境整えるのに朝までかかってやっと DirectShowプログラミング [VC++]:Geekなぺーじ のサンプルがひとつ動いて、ってな感じで最初はちょっと苦労したけどそっからは結構速かった。日曜のうちに読み込み部分はだいたいできて、月曜夜には出力部分も一応動いてた。あ、コーデック固有の設定ダイアログ出す方法がわからなくて少しはまってた。

あと、ちょっとまだよくわかってないんだけど、DirectShow の AVI Decompressor の出力ピンのメディアタイプに ARGB32 は無いのか? ということ。アルファチャンネル有りの UtVideo (ULRA) で出力したAVIを読み込んでも、アルファチャンネルが読めなくて困ったのよ。で、graphedtで見てみると AVI Decompressor の出力ピンが ARGB32 ではなく RGB32 で繋がってるし、入力ピンだけ繋いでやると出力ピン側には Preferred Media Types が列挙されるけど、その中に ARGB32 は見当たらないし。
でも、AVI Decompressor の出力ピンから出てくるデータを調べてみると、RGB32でもアルファチャンネルの情報はちゃんと載ってるようだったので、それを直接拾えば良いじゃん、ということでそうしたんですが。自動接続にまかせると、AVI Decompressor の次に Color Space Converter が挟まって、そこでアルファチャンネルを 0xFF に埋めてしまうみたいでした。


なんだかまとまりのない文章ですが、要は nukIM@S-2 はAVIの入出力に DirectShow を使いましたよ、無圧縮AVIじゃなくてもよくなったよ。ということです。


Geekなぺーじの他に The DirectShow ,Media Foundation, Core Audio Unraveled もとても参考になりました。感謝です。