アセンブラ化した結果、シングルスレッドでもHDキャプチャできるぐらいの速度になった。インストーラを作るところで問題が発生したのでまだリリースできないけど。
ようやくドッグフードを食ってみようかと思ったのだけど、くすのきTVHD経由でも、岳さんのレポートにあるDxCaptureと同様に、やっぱりキャプチャできない。デバッグビルドにしてログを吐かせてみたら、どうやらコーデックに対して RGB(BI_RGB または BI_BITFIELDS)でしかフォーマットをネゴシエーションしないみたい(しかも RGB はサポートしないと返事しているのにしつこく聞いてくる)。DirectShow のグラフマネージャなら自動で色空間を変換するんじゃないのか(誤解しているだけかもしれないが)…ていうか今頃気づくなよ俺。
というわけでさっさと RGB サポートは追加しなければいけないらしい。つーか最初に YUV422 ではなく RGB を作るべきだったな。
読んでいるのはアセンブラソースなのですが、自分じゃ絶対に思いつきそうもないコードが出てきて楽しいです。その代わり理解できるまでに時間がかかるのですが(コメントあんまり書いてないし)。他人のコードを読んで感動したのって久方ぶりなんじゃなかろうか。
残念なのはアセンブラソースだってことなんですよね。読む人をかなり限定するので感動を分かち合えない(笑)
ふと思って65GBある非圧縮AVIファイル(中身はYUY2で10分ぐらいの動画)を、gzipやbzip2で圧縮してみた。
結果
gzip -1 なら 26 分、19.5GB
gzip -9 なら 86 分、17.5GB
bzip2 -1 なら 415 分、13.3GB
bzip2 -9 なら 489 分、12.8GB
bzip2 遅ぇ!遅いという話は予備知識としては知ってましたが、まさかこれほどとは。その代わり圧縮率は申し分ないですね。
ところで、上記の AVI ファイルを huffyuv で圧縮したら、圧縮がうまく効くソースなので 18GB まで縮みます。しかもリアルタイムエンコード可能。利用目的が違うのはとりあえず横に置いといて gzip の負け(笑)。
開くと固まるはずのページをついうっかり開いてしまったのですが、いつのまにやら固まらなくなっていました。
はて、何が起きたのだろう。直ったこと自体は喜ばしいのだが…