Ver1.0.0βをアップロードしました
正式版を5月中にリリースする予定でしたが、完成が少し遅れているため、ドキュメント等に不備がある状態のものをβ版として暫定ホームページにアップしました。プログラム自体は正式版と同等のため、機能確認等は行えますので、使ってみてください。ただし、開発中バージョンとは異なり、正式版と同様の機能制限が施されています。
« 2009年4月 | トップページ | 2009年6月 »
正式版を5月中にリリースする予定でしたが、完成が少し遅れているため、ドキュメント等に不備がある状態のものをβ版として暫定ホームページにアップしました。プログラム自体は正式版と同等のため、機能確認等は行えますので、使ってみてください。ただし、開発中バージョンとは異なり、正式版と同様の機能制限が施されています。
今日はAmuseGraphicsのβ版を暫定ホームページにアップした。プログラムコード自体は不具合が若干心配な点を除けば、ほぼ完成品だが、やはり、ヘルプ関連は間に合わなかった。というより、間に合わせる気があったとは思えない。こういうのを確信犯というのだろう。
過去に何度か触れたが、AmuseGraphicsの完成後にはデスクトップのリモート操作プログラムを作るつもりだ。しかし、それなりに動くフリーのソフトが幾つもある状況なので普通のプログラムを作ってみても仕方ない。なので、普通じゃないものを作るつもりだ。
開発中バージョンがそうであったように、AmuseGraphicsのリリース版も特にインストーラは必要なく、実行ファイルとDLL等のその他のファイルを同一フォルダに置いておけば使える。しかし、インストーラが無いとカッコが付かないので出来合いのインストーラを作成した。
デスクトップレコーダーの改良で時間を食ってしまい、5月中の正式リリースが間に合わなくなったので、β版を暫定ホームページにアップする予定だ。β版と言っても、機能/性能的にはリリース版と変わらないため、レジストキー登録システムと機能制限を入れた。
デスクトップレコーダーの改良について色々と書いてきたが、開発中バージョンと比べると雲泥の差になっている。突き詰めればもう少しは改良の余地があるかもしれないが、少なくとも作者的には必要十分になったので最初のバージョンに関しては開発完了ということにした。
このブログを書き始めてから、毎日何かしらの進展があるようにしているのだが、今日はちょっとヤボ用で全然作業ができなかった。なので、書くべき内容が無い。しかし、それでは折角記事を読んでくれる人に申し訳ないので、何かしらでっち上げてみよう。
デスクトップレコーダーの取り込み速度は速くなり、Core2Quadマシンでは1280x1024での100FPS採取も可能になった。もっとも、DirectX描画画面の取り込みはサポートしないので、実際には30FPSで十分だろう。それを超える速さは処理の軽さとしてのメリットになる。
デスクトップレコーダーのコード変更を行ったが、処理性能はメモリアクセス形態によるところが大きいので、現状の性能がどの程度のものなのかを判定するために、CrystalMarkを使ってメモリ性能を測定してみた。
今週はデスクトップレコーダーの高速化ばかりやっていたが、こういうことが好きなので仕方ない。直接関係しないので削除させてもらったが、Corei7対応マザーの広告とかが載ったブログからトラックバックされるのも不思議ではない。
驚いたことに、VistaのテーマをWindowsクラシックに変更するとデスクトップからのBitBltが高速になった。このため、デスクトップレコーダーで全画面表示での30FPS取り込みが行えた。しかし、H/Wアクセラレータが効かないのか、動画が遅くなるため、実効FPSは低下した。
デスクトップレコーダーの改造を終えたので、今日は、コード整理や使い勝手向上用の微修正を行った。高FPSでの確認ばかりしていたので、低FPSでの動作を行わせてみたところ、5FPSなら全画面キャプチャーでもCPU負荷は5%未満、ディスク書き込みは0MB/Sとなった。
デスクトップからのBitBltについて手持ちのマシン数台で色々と確認したが、結局、デスクトップ画面の生成と転送に時間がかかるようなので、より高いFPSを望むことは出来そうもない。まあ、色々と試したキャプチャーツールのどれよりも高速になっているので良しとしよう。
昨日のディスク書き込み性能の件は、OverlappedI/Oを指定しているにも関わらず、ディスクへの書き込みが終わるタイミングまでWriteFileが制御を戻して来ないのが原因だと判った。OverlappedI/Oではディスクへの書き込み完了を待たずに制御が戻ると信じていたのだが、実際にはそうではなかった。
昨日の性能測定結果で特徴的なのは、全画面キャプチャーではYV12変換を行わないと20FPSにも届かなかったということだ。これだけを見るとランレングスエンコードに時間を要している可能性も否定できないが、他の検証からディスクネックであることが判っている。
数日前にデスクトップからの取り込み用BitBltが遅いと書いたが、OS処理なのかドライバ処理なのかビデオチップ処理なのかは判らないが、書き換えタイミングでの取り込み防止のためか、応答タイミングを書き換えタイミングと同期化しているようだ。性能測定の準備をしていて気が付いた。
デスクトップキャプチャーのバッファリングモードにYV12変換やハフマン符号化を追加したり差分の取得方式を変更したりしたことで、コードが汚くなっていたので整理を行った。これで、全てのモードの組み合わせで処理を実行できるようなった。
デスクトップキャプチャーのバッファリング時圧縮の最後にハフマン符号化を追加した。これに伴い、フレーム間の差分取得用演算はXORから普通の減算に変更した。性能劣化させないために計算にはSSE2命令を使っている。
デスクトップキャプチャー時のバッファリングで使用する圧縮方式としてYV12+差分RLEを追加したが、結構重かった。その後、OS添付のMJPEGエンコーダを使ってみると、かなり軽く、バッファリングなしでも動画取り込みに使えそうだった。これではバッファリングモードのメリットが無くなってしまうので、圧縮コードを最適化してMJPEGよりもかなり軽くした。
昨日書いたバッファリングモードへの非可逆圧縮の導入を行った。基本的には、MPEG1等で用いられているYV12空間を利用して色解像度の誤魔化しを行って圧縮率を向上させた。前フレームとの差分RLEとのあわせ技で、動きのある動画でも10倍程度の圧縮率にはなる。
バッファリングモードを使えばデスクトップレコーダーでYouTubeの小窓程度なら30FPSでのキャプチャーが出来るが、HD映像を全画面でキャプチャーするとさすがに辛い。バッファリングでの圧縮率が低いため、ディスクネックになる。このため、バッファリング中の圧縮率をUPできるオプションを追加することにした。
昨日の問題はとりあえず解決できた。最初の予想通り、メディアタイプの設定がキーだったのだが、設定すべきメディアタイプを作れていなかったため手間取ってしまった。フォーマットデータの拡張部分に登録された内容が問題だったようだ。
一昨日書いた通り、Vistaのデスクトップレコーダーで作成したMP3付のAVIファイルはXPのメディアプレイヤーをクラッシュさせる。ムービーメーカーもクラッシュするのでコーデックの問題なのだが、メインプログラムで作成すればクラッシュしない。色々調べたが、原因は判然としない。
AVIファイルの作成完了時にグラフをStopする時点でフィルター側がデータ待ちに入っているとフィルターがタイムアウトするまでStopは完了しない。元々そういう作りにしていたのだが、VirtualPCのXPでは頻繁にタイムアウトが発生するのでチャンとした終了処理に変更した。
過去にも何度か触れたが、XPとVistaでは微妙に挙動が異なることがある。XPでは厳密にインタフェース仕様が守られ、Vistaではそれなりに動作することが多い感じだ。開発環境がXPなら良かったのだが、Vistaなので、潜在バグがXPでの動作確認で色々と見つかる。
現在、リリースに向けてAmuseGraphicsの使い込みを行っているのだが、メインプログラムと付属アプリのアイコンを同じにするとアイコンの意味を成さないことを痛感されられた。このため、デスクトップレコーダーとWebカメラレコーダー用に専用アイコンを作成した。やっぱりアイコンは重要だ。
今日はWebカメラレコーダーの複数起動時等に発生するデバイスのBusy状態をチェックしてエラー表示する機能の追加を行った。その後、デスクトップレコーダーで遊びながらリリース版完成後の事を色々と考えてみた。
今日は、デスクトップレコーダーの高速化を行った。高速化手法は昨日のデスクトップキャプチャーと同じだが、雑に作っていた部分の修正を行い、ディスクへの書き込みをライトスルーに変更したこともあり、バッファリングモードでの最高FPSはかなり向上した。Youtubeの動画なら、滑らかに動く20~30FPSで取り込めるようになった。
今日はデスクトップキャプチャーの高速化を行ってみた。1280x1024のキャプチャーで非バッファリングモードでは9.6FPS→12.1FPSに、バッファリングモードでは動きの有無で変化するが、Youtubeの動画を一つ表示している状態だと、16.6FPS→23.8FPSに向上した。
GWの真っ只中ということもあり、気合が入らないので、今日もメインプログラムの修正を少しやっただけで終わりにした。やったのは、ちょっとしたバグの修正と、あまり効果の無い高速化だ。
AmuseGraphicsのVer1.00は完成に近づいているが、今日は幾つかの微修正を行った。使い勝手の向上が主な目的だが、見た目が寂しい点を修正する意味もある。
一括処理用の並列化を実装しても、ディスクネックでさほど高速化されなかったため、その元凶と言えるアンドゥ用のディスク書き込みを禁止できるオプションを追加した。このオプションを使用すると、CPU処理は既に高速化されているので、処理時間はかなり短縮される。