次期 MPEG-2 VIDEO VFAPI Plug-In となるはずのものをペチペチと作成中。最大の目標はファイルの読み込みとデコードの分離で、二番目の目標が音声同期補正の実装。
実際 MMA を作っている際、ファイル読み込み部分がデコードの奥にあるせいで、ピクチャ使用ビットの表示やら、DCT/MB ビット率の表示やら諦めなければならない機能が多すぎた。同期補正を実装する際にも必要だし内部構造を変えるのならばはやい方がいいだろうということで。
といいつつも、現在の状態はメモリビットストリーム読み込み部分を作成して、テストドライバから叩いてユニットテストを完了させただけ。ある程度の規模になってからだとユニットテストも面倒になるけど、どうせ半分はコードを捨てて作り直すのだから、今回は真面目にテストファーストを実践していくことにしてみた。
開発言語が C メインでテスト用のフレームワークで使いやすいのを知らないため、かなり泥臭いテスト方法になっているのだけど、多分これは仕方がないことなのだろう。
作業の進捗は、メモリビットストリーム読み込みルーチンの MMX 版を完成させたところまで。8M のバッファに対するビット取得を 16 セット(トータル 128 M)実行してみたところ、C のみ版と比較して 5 秒程度の高速化。
実際には MMX の効果ではなく bswap の効果のような気がするけれど、一応速くなっているので気にしないことに。ただしインラインアセンブラに堕落してしまったのが悲しいところ。
pure C と pure ASM で作りたかったのだけど、インラインアセンブラの便利さの誘惑に勝てずに敗北してしまった。時間があれば直したいところだけど、多分そんなときは永遠にこないだろう。
ディ〜スプレイが死んだ〜、死んだ〜、死んだ〜♪ というわけで、修理費で 20 万が失われてしまった。まぁ保証書なしでじゃんぱらから購入したものだし、治してもらえるだけでもありがたいところなんだけど。
実際どの程度の死に方かというと、画面中央の1ラインが丸々常時点灯画素となってしまった。絵で見ると こんな感じ。
一応絵は映っていることだし、CRT のタンパー線が見えてるんだと自分をだまして使い続けようかとか、いっそ普通の UXGA 液晶に買い換えようかとも考えたものの、一応支払える範囲の見積もりがでたので修理してもらうことにした。で、今日がその振込み日。
貯蓄に回すつもりだった夏茄子の 2/3 はこれで吹き飛んでしまった……どうしてお金って貯まらないんだろう。
現在メイン PC のディスプレイは修理中というわけで、キーボードが不調なノート PC でコードを書いている。しかし、どうやらこちらのバッテリーもそろそろ寿命が近づいてきたらしい。
液晶のバックライト輝度を最低まで落としても、フル充電状態からのテキスト入力のみの利用で1時間持たなくなってきてしまった。代わりのバッテリーとして、ついでだから LLL タイプを選んで購入すると…… 4 万円か〜。
この PC 自体、いつまで使うか分からない代物だしなぁ。だましだましこのまま使っていくべきだろうか。ああ、考えていてあまりのみみっちさに悲しくなってくる。
バージョンアップの噂を聞いて、早速 SDK と本体をダウンロード。深夜だというのにあれこれといじっている。
更新履歴や SDK の filter.h を見た瞬間は、まだ YUY2 モードはフィルタプラグイン側に公開されていないのかと思ったのだけど、環境設定を眺めていたら、ひょっとしたら使えるのかなという気になってきた。
とりあえずバグレポートが入っている DivX 5 と拡張 AVI 出力の問題の調査が先だろうけど、それが片付いたら、少し調べてみることにしよう。
sobig の最新版が非常に邪魔だ。AirH" (32kbps) で繋いでるのに、残り 55 通とか表示されていやがる。(内 2 割がエラーのリターンだったりウィルスチェックの自動応答だったり)
全部とり終わるまでに後 30 分。いったいどうしろというのだか。今日だけで 3 桁到達してるのだけど、どーにかしてほしいものだねまったく。
AviUtl の YUY2 モードはまだプラグインからは使えないらしい。filter.h の SYS_INFO::vram_yc_size を見た時は、そのまま FILTER_PROC_INFO::yc_edit が YUY2 になって入ってくるのかと期待していたのだけど、YUY2 モードに設定した場合はプラグインはすべて無効にされてしまう。
FILTER::flag に YUY2 対応フラグを立てれば YUY2 モードでも有効になるのかとも思ったけれど、それらしいビットフラグ値は見つからず、それじゃ FILTER::func_proc_yuy2() とかが定義されてるのかと思っても、それらしいものは無し。
どっちかでいいから YUY2 モードでもプラグイン使えるようになってくれないものかな〜。
盆からずらして取った夏休み1日目。クーラーを効かせた部屋でアイスをかじりながら、ようやく重版を購入できた宮野ともちか「ゆびさきミルクティー」を読む。今週一杯引きこもってコードを書く予定なので、今日ぐらいはいいだろうと怠けてみた。
本当は部屋の片付けなどは今日のうちに済ませるつもりだったのだけど、流しにためていた洗物だけで力尽きてしまった。多分コーディング中に煮詰まることもあるだろうから、そのときにでもやることにしよう。
進捗は大して変わらず。何とか今日中に Video ES からピクチャデータを切り出す部分がテストできるようになるかなといったところ。肝心のデコード部分に取り掛かれるのはもちっと先になるし、同期補正に手をつけるには、PS の読み込みも作らねばならない。
MPEG-2 VIDEO VFAPI Plug-In 0.1.0 を作ったときは、大学最後の夏休みを全部潰してほぼフルタイムで2ヶ月かかってるからなぁ。この休みの間に 0.7.0 をリリースできるなんてのはまず無理だろうけど、それでも進められるうちに作業はやっとかないと。
とりあえず 0.7.0 では Video ES については .GL ファイルが必ず作られるようになることが決定済みだったり。PS/TS では PTS ベースのシークにしようと思っているけど、そちらでも最初にストリームを全部舐める方に逃げるかもしれない。
色々あって、進捗はものすごく遅れ気味。ようやく Video ES の読み込み部分のテストとバグ修正が完了し、実際のデコード処理に手をつけられるようになった。
とりあえず微妙に MSSG を引きずっている MC 部分の整理と、I/P/B を別関数に分けてしまおうという目的があるせいで、ここから先も順調に進むはずはなし。
一番面倒な VLC デコードの部分はほぼ昔のコードのままいけるはずなので、それだけが救い。