ローパスフィルターを調整
昨日書いたように、TiVSoundの修正版を出すハメになったのだが、現行版ではリサンプル時にローパスフィルターを使っていなかった。なので、単なる修正版を出すのも面白くないので、今日、ローパスフィルターを追加してみた。同時に、ムービーカッターも調整した。
« 2011年2月 | トップページ | 2011年4月 »
昨日書いたように、TiVSoundの修正版を出すハメになったのだが、現行版ではリサンプル時にローパスフィルターを使っていなかった。なので、単なる修正版を出すのも面白くないので、今日、ローパスフィルターを追加してみた。同時に、ムービーカッターも調整した。
今日はDCTエンコードモードをAG-Webカメラレコーダーにも適用した。結果は期待通りで、低性能のDynabook MX/33でも内蔵Webカメラの映像をストレスなく録画でき、画質を落とせば、かなり出力サイズも減らせた。しかし、その後、11025Hzに振り回される事になった。
今日は、AGM形式の新エンコードモードをAG-デスクトップレコーダーにも適用した。適用作業自体は簡単だったのだが、適用後に色々な映像をキャプチャーして画質と性能を見ていたため、時間がかかってしまった。性能的には、1280x1024画面でギリギリ30FPSはOkだ。
AGM形式に追加するDCTエンコードでは、前段でYV12変換を行っている事もあり、エンコード可能な画像サイズは、内部的には、縦横共に16の倍数でなければならないのだが、それでは使い勝手が悪いので、16の倍数ではない場合には、前段で16の倍数にするようにした。
DCTエンコードを追加し、ムービーカッターで確認中の新しいAGM形式は、当然の事ながら、AG-デスクトップレコーダーとAG-WebカメラレコーダーとAmuseGraphics本体にも適用するつもりだ。AGM形式用には全てで同じC++クラスを使っているので対応は簡単な筈だ。
今回の開発でAGM形式にはDCT変換を使ったエンコードモードが追加されるため、AGM形式の仕様は拡張されるのだが、それとは別に、従来のYV12/RGB形式でのエンコードモードについても仕様を小変更した。互換性は大体はあるのだが、少しだけ動作に違いが出る。
今日は現行版AGM形式の再生速度を上げようとデコードルーチンの高速化をやってみたのだが、代わり映えしなかった。遅い理由は別の所にあったからだ。判ってみれば当然の事なのだが、ディスクネックのようだった。なので、体感速度を上げる別の改良を行った。
ここの所、AGM形式に追加しようとしているDCT変換を使ったエンコードルーチンの性能を上げてきたのだが、遂に、現行のAGM形式の性能を超えた。エンコード性能についてはマルチコアCPUでの話なのだが、デコード性能はシングルコアCPUでも現行版よりも速い。
作成中のJPEGもどきのエンコードルーチンでは、一度SSE2命令を使ってみたのだが、速くならなかった。しかし、今日はメモリ配置を変えたり、特殊命令を使ったりしてみたところ、10~20%程度の高速化は実現出来た。なので、SSE2命令はこのまま使う事にした。
作成中のJPEGもどきルーチンは、モドキのため、JPEGの仕様には則っていないのだが、今日、ネットで検索していると、JPEGの仕様書に載っているという量子化テーブルが見つかった。なので、その値を使用するように変更した。多分、同一画質での圧縮率は上がった筈だ。
今日もムービーカッターに適用してみている新しいエンコードルーチンを弄っていたのだが、想定している最終的な利用形態では、動的な画質変更に対応できなければならないため、今日はそのための変更を行った。お陰で性能は劣化したので再度最適化が必要になる。
AGM形式の新エンコードモードに対するデコード性能を上げてみているのだが、まだ少し足りない。AGM形式はリアルタイムエンコード用途を強く意識しているため、エンコード性能は最適化済みなのだが、デコード性能については元々最適化していなかったのが影響している。
昨日は次に進む、と、書いたのだが、新しいエンコードモードでムービーカッターを使っていると問題が発生するケースが3個あった。なので、今日はそれらの問題が発生する原因を調査し、修正する作業を行っていた。ついでに、デコード性能を少し上げておく事にした。
今日もムービーカッターに適用しているJPEGもどきの圧縮ルーチンの高速化を行っていたのだが、まあまあ高速化できた。現状のAGM形式と比べると、動きの激しい動画での圧縮率は5倍程度、少ない動画でも2倍程度はあり、エンコード時間は数割程度遅いだけだ。
今日はムービーカッターに追加したJPEGもどき圧縮を使ったエンコード処理の高速化をやってみた。色々と試してみたところでは、DCT変換のSIMD化には効果はなく、符号化部分は少し改善できたものの、高速化の割合は少ない。意外な部分が重いので、作業は継続する。
今日は昨日書いていたADPCMによる音声圧縮ルーチンをムービーカッターのAGM形式に追加した。ADPCMの圧縮率は4倍固定だ。音質の良し悪しについては、エンコーダーの作り方で若干変わるのだが、少し使ってみた所では、劣化は感じられなかった。
JPEGもどきの圧縮ルーチンに差分圧縮を加えると、MJPEGを大幅に上回る圧縮率が得られた。WMVと比べると3~5倍になってしまうのだが、その分、エンコードは軽い。多目的に使うためには相対的に音声データの比率が高くなったため、次は音声圧縮もやってみる。
JPEGもどきの圧縮ルーチンを動画に適用するためのテスト環境はAG-ムービーカッターにすることにして、今日は差分圧縮なしで動画をエンコード/デコードできるようにした。方式的に、MJPEGとほぼ同様の圧縮率/CPU負荷になっているのだが、これからが本番だ。
JPEGもどきの圧縮ルーチンの性能は、浮動小数点演算をやめてみた所、1280x1024で75mSec程度になった。DCT変換が50mSec、符号化が25mSec程度の割合だ。現状ではSIMD命令も未使用で、並列化も行っていない。なので、性能的にも何とかなるだろう。
今日は、JPEGもどきの圧縮クラスのテストを兼ねて、色々な画像ファイルを圧縮し、圧縮率や画質を見ていた。GDI+のJPEGと比べると、若干画質は悪いみたいなのだが、大した違いでもない。問題は性能で、現状ではMJPEGより劣る。なので、高速化したいところだ。
現時点で、JPEGもどきの静止画圧縮ルーチンはあるのだが、例によって、ベタなコンソールアプリとして存在しているだけなので、今日は主要部分を整理しつつ、C++のクラスにしていた。このクラスをより複雑な用途で使用し、インタフェースを決めていくのが作者流だ。
今日はJPEGもどきの圧縮方式の前段にYV12変換を入れてカラー対応してみたのだが、YV12変換については、既存プログラムから流用できたため、大した手間でも無かった。問題は、動画への応用なのだが、作者的には、MJPG以上、WMV未満の圧縮率を狙っている。
今日は、数日前に書いていたJPEGもどきの静止画圧縮ルーチンの続きを作っていた。前回の時点では、画像をDCT変換・量子化した後、そのまま逆変換していたのだが、今日は量子化後にデータを圧縮するルーチンを追加して、実際に圧縮データを出力をできるようにした。
昨日書いたように、今日は試用中の@NiftyホームページでPerlのSocketモジュールを使用したUDP送信テストをやったのだが、送信は失敗した。プログラムに問題がある可能性もあるのだが、ローカル環境では送信出来たので、送信は禁止されているのかもしれない。
いつものようにITmedia Newsをみていたところ、日立、HDD事業をWestern Digitalに売却という記事が国内記事として載っていた。作者の開発マシンには2台の3.5インチHDDが実装されているのだが、両方ともWestern Digital製だ。一時はIBM製しか使わなかったのだが。
月末まで無料で試用できるようなので、@Niftyホームページサービスの試用を開始してみた。@homepageは容量が100MBしかなく、oggファイルの利用に支障があり、.htaccessの設定もできない。また、新規受付も終了状態なので、将来的にも不安だからだ。
IE9RC版がリリースされた時点で、IE9RC版だと音声ファイルの最初の再生時に遅延が発生する、と、書いていたのだが、その問題への対処として、プログラムの初期化時に、ボリュームを0として一度再生しておく処理を追加した。これで、IE9RC版でも大きな問題はなくなった。
ここの所、作者はJPEGについて調べていたのだが、少なくとも日本では、特許問題は無さそうだ。なので、今はJPEGもどきの圧縮ルーチンを作っているのだが、とりあえず、XGAのモノクロ画像の圧縮/展開はCore2Quadネイティブルーチンで30mSec程度で出来ている。
昨日問題があったVectorのライブラリデータが復旧したようだ。これは、予想通りの展開なのだが、データが消失?という記事を書いておいて復旧した旨の記事を書かないのはマズいので、今日は二つ目の記事を書く事になった。MasterReversiは2位に上がっていた。
ネットを検索していると、窓の杜に「ダウンロードサイト“ソフトニック”のソフト配布方式に一部作者より懸念の声」という記事が昨日アップされていたのを見つけた。なので、便乗することにしたのだが、ここには、MasterReversi 1.4.0の名前で、Ver1.3.1が収録されている。
作者はVectorに色々なソフトをアップしてあるのだが、その目的の一つは世間の反応を知ることだ。なので、人気順は小まめに確認しているのだが、今日、MasterReversiの人気順を見ると異常に落ちていた。AmuseGraphicsとTiVSoundのページは無くなっていた。
昨日はJpgファイルのイメージデータをCanvasは取り込めない、と、書いたのだが、Imageオブジェクトなら取り込めそうだ。ImageオブジェクトはソースにData URLを指定できるため、Data URLを作れば、何とかなる筈だ。まだ、ちゃんとは試していないのだが。