先週 M4C の SIMD 化を行いましたが「アセンブラソース以外は配らない」「4回で終わらせる」という方針で進めていたため説明が判りづらく、コンパイルできなかったという方も多いかと思います。
というわけで、先週迄に説明した分+αの変更を加えた ソースファイル一式 を用意しました。これは、BCC + MASM 6.14 環境でそのまま make できます。
追加変更部分は以下の通りです。
実際にやるかどうかは未定ですが「M4C の弄り方(X)――音も一緒に」とかをやる場合はこのソースを説明に使う予定です。
先週末からの仕事でのトラブルがようやく解消。別スレッドから呼んだ場合って Windows メッセージって GUI スレッドには上がってこないのね。
……でもさ、それが嫌だからスレッドに逃げたのに、何でスレッド内で PeekMessage(); GetMessage(); TransrateMessage(); DispatchMessage(); のメッセージポンプをまわさなければいけないのかな。僕そんなに悪いことした?
天使のしっぽの CM 15sec バージョンと 30sec バージョン、および予告編の最後は 30 frame/sec と 60 field/sec で作られている。まあ短いから 60fps で作ってみるのも良いかと考え、TMPGEnc の 24fps 化で 60fps を選び、1e1o をパターンとして入力。補間部分がぼけるのは仕方が無いが、やっぱりテロップががたつくよな〜と感想を抱く。
最後は止め絵なのでインタレース解除は無しにして、そこからコピーしようかと考え 60 枚の切り張りを決意……した時点で、これこそ機械にやらせるべきだと気がついた。
領域コピープラグインのスクリーンショット |
という訳で現在作成中の AUF のスクリーンショットです。昨晩はここまで作った時点でくたばりました。今晩中に何とか WM_COMMAND および WM_NOTIFY の処理を実装する予定です。それさえ済めば後は memcpy 何回か呼ぶだけで済むはずなので楽なんですが。
とりあえず矩形領域のコピーのみを目的とすることにして、PhotoShop のような自動選択機能は次のバージョンに回す予定です。
昨日出した M4C のソース一式ですが、Makefile のアセンブラオプションにミスがあったため、MASM 6.14 では M4C のコンパイルに失敗します。修正版 を用意したので、再ダウンロードしてください。
予想よりもさくっと完成してしまいました。領域複写 AviUtl プラグイン Ver. 0.1.0 を公開します。AUF からどうぞ。
Ver. 0.1.0 では矩形領域の複写機能のみとなっています。Ver. 0.2.0 で指定矩形内からの輝度および色差での領域自動認識機能を付ける予定でいます。こちらは UI 作るのに一晩、内部実装に一晩という見積もりになってます。
あとは優先順位が先頭でなくとも使い物になるようにしたいです。一応方法はあるんですけど、それだと 0.96i 以降専用になってしまうので悩んでいます。色の変化さえ無ければ悩むことはないのですけどね。
おもったよりもトラブル無く領域複写プラグインが完成したので、シュガーが始まるまでに TMPGEnc 2.00 を P4 で試そうとしたら……「MPEG-2 の使用期限が終了しています」だそうで。
あの〜まだ今日は 10/3 なんですが…… 9/30 に HDD 新規購入して Windows 2000 を新規インストールしたばかりなんですが……ひょっとして私の日ごろの行いが悪かった罰なんでしょうかこれは。
アクセスログ |
なんで 9/18 だけこんなにアクセス数が増えてるのか疑問だったのだけど。そう言えば Nimda が大流行したのは 9/18 だったかと思い当たり納得。翌日からは通常のアクセス数に戻っているところを見ると、Nimda の命も短かったのだなぁと感慨深い。
まだ時々 /script/ へのアクセスはあるけど、流行ったのは1日足らずだったらしい。やはり感染速度が速すぎると感染対象を食いつぶしてあっという間に死滅してしまうのだろうか。
領域複写プラグインへのリンクが時報除去へのリンクになってました。申し訳ない。現在は修正済みです。
えーと TMPGEnc の MPEG-2 使用期限切れは……インストール中に BIOS アップデートして 2000, 1/1 に戻ってしまったからかなという心当たりがあるので、今のところ MPEG-2 は使っていないから次のバージョンを待つかという気分になってます。
ただ、現在何故か TPR が読めなくなってしまっているのでこちらの方が致命的です。シュガー第1話、電波状況が非常に悪かったらしくノイズがすごいので何とかしたい所なのですが。これは GNB さんの 3DNR プラグインを使うようにとのお告げなのでしょうか。
むー「天使のしっぽ」脚本がへたれていて見るに耐えない。「シュガー」見た後だと更にその感が強くなる。思わず別の番組に切り替えようかと考えて 「VANDREAD 2nd」 と「ナジカ」予約を入れてしまった。どうしよう「Hellsing」原作が好きだから見ないつもりだったのだけど、予告版 DVD の評判を見るかぎりではそれほど悪くないらしい。とりあえず 4 話までは録っておくことにしよう。
それはさて置き、領域複写プラグイン、0.2.0 が完成したので公開しています。AUF からどうぞ。とりあえず天使のしっぽ予告編でしか動作確認してませんが、そこそこ使えるものになっているのではないかと考えてます。非常に適用範囲が限定されそうですけど。
こんなことが出来ます。領域複写 0.3.1 を AUF に置きました。(仕切りなおし)
時間軸方向の参照を行うフィルタでもフィルタ順を正しく反映して処理することができるようになってます。どうやってるかは、src の get_frame.h/c を見てください。かなり無理矢理な対応で遅い処理ですが。
一応 0.96g でも使えるようになってます。ただし、その場合はアクティブなフィルタの先頭にしておかなければ妙な結果になります。
1月以上見ていなかった趣味のソースファイルを現在編集中。ファイルのタイムスタンプが確かならば最後に手を入れたのが 8/19 ということなのだけど、最初にはじめたのが不要なソースの刈り取り作業だったり。
やっぱり暫く放置していると何がしたかったのか忘れてしまうのが問題点。一応 VFAPI を拡張してフレームのタイプを取れるようにして……とか考えていたはずなのだけど半分以上忘れてしまっていたり、設計が思うように進まなかったりするためその辺りのソースは全て廃棄。
もう少し、堅実に少しづつ進めていくことにした。という訳で 3/11 時点まで後退。とりあえず HDC の取り方とか StretchDIBits の使い方とかから再出発。
デザインパターンとか極めてれば、こんな泥縄ッポイ開発手法を採らずに済むのだろうか。最大の問題点は何が必要なのか自分でも判っていないことのような気がするのだが。
あー PSADBW って K6-III(Enchanced 3D Now!)から使えたのか。とすると、MS-MPEG4 ってなんであんなに P-III と Athlon で速さが違うのだろう?
あの圧倒的なエンコードスピードからして PSADBW 使ってるのは確実なのだけど、それなのにあれだけ速度が違うのは……。
今のところこんな感じ。ようやく VFAPI プラグイン経由で受け取った RGB イメージを窓の中に表示できるようになったというところ。
今は WM_PAINT で VFAPI 開いて(ソース内にハードコーディングされたファイルの)フレーム 0 を受け取って強制表示してるだけなので、次の目標はファイルメニューからファイルを選べるようにすること。焦らず少しずつ実現していく予定。
バスに乗り遅れるな……か。
遅々とした歩みの原因。
どこが間違っていて、どうすれば改善することができるのだろう。
あー仕事のコードの場合は別です。途中で面倒になっても放置することはできませんから。誤解されると不味いので為念。
今週のイベント
GCT-500 が不調になってきて非常に憂鬱。電源状況が悪いのか電波状態が悪いのか、VHF LOW バンドではメダカが飛び交い、HIGH バンドでも 4, 6, 8 が全体的に画像が悪い。12 は比較的好調なのだが、それでも時々妙な輝度ブレが出はじめた。
涙を飲んで録画時の地上波チューナを音が悪いと評判の HR-VTG300 に変更。GCT-500 は熱でコンデンサが飛んでしまったのだろうか。基板の実装密度はあまり高くないのでコンデンサ交換もそれほど面倒ではなさそうなのだけど、半田ごてを使うことに少し抵抗を感じていたり。
9/21 にも 7 〜 9 時にかけて上流回線と完全に切断されていたのに続き、本日も 9 〜 10 時にかけて切断状態になっていた模様。つーか上流とのルータが死んで1時間近く切断状態が続くってプロバイダとして許されることなんでしょうか。お願いだから二重化ぐらいしてください。
いや、タイマー自体は正常に動作していたのだけど、上で書いた GCT-500 不調のあおりを受けて、この縞縞は一体何ですか状態。再 Y/C 分離でなんとかなってくれることを期待しつつ、Wavelet-CbCr でも除去しきれなかったので無理かも。
とりあえず1話は仕方がないにしても次回以降のために何とかしなければと考え、分解。チューナ調整ネジ(GRT ユニットの下にある)を回すも調整しきれず。しばらくは HR-VTG300 をチューナとして使用する予定。
HDD + IDE インタフェースカード + 電源 を月初めに購入したため、今月も財政状況は非常にあやうい。給料出るまで DVD の新刊は買えない(涙)
少し怠けていたせいか、仕事が微妙に忙しくなりつつある。来週は今週よりも更新頻度が落ちるかもしれません。
と、こんな感じです。今週末は実家には帰らないので土日の更新はありません。それでは、また月曜日に。
金が無いので出歩けず、コーディングが進む。シリアル・ママはファイルの OPEN/CLOSE とフレーム移動(および表示)が可能なところまでできたのだけど、m2v.vfp 側でのバグが発覚したため面倒になって作業中断中。
決してサボっている訳ではない。鋭気をやしなってるだけなのだ。まあバグの再現方法は発見できたから、後は半日費やす覚悟を決めればそれで済むのだが……何となく来週末になるまで手をつけようとしない姿が想像できてしまう。
といったことは置いといて、領域コピーでアレコレやってた時の副産物を公開。60fps.c とかいう C のソースファイル。
24/30 fps の AVI ファイルを NULL フレーム挿入して 60 fps の AVI ファイルに出力する。コンパイルして vfw32.lib とリンクすれば(BCC の場合はコンパイルのみで)コマンドラインプログラムができあがり。
M4C のソースを参考に動けばいいや方針で作成したものなので、ソース読めないと使えないくせにソースが汚くて読みづらかったり、Audio 非対応だったりする。その辺は我慢するか、不満を感じた人が何とかするよーに。何しても文句は言わないから。
ここまでアレゲな MPEG-2 ストリームがあったとは…… SONY の CT1 ビットストリーム です。とりあえずピクチャヘッダの解析結果でも眺めてください。
C:\usr\src\m2d\mme\sony-ct1.m2v GOP タイムコードは不連続です トータルフレーム 58 トレース開始 GOP ヘッダ - タイムコード 00:00:00:00, ピクチャ 0, クローズド GOP 1, ブロークンリンク 0 ピクチャヘッダ - カウント 0, 形式 I, 一時参照 2, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 1, 形式 B, 一時参照 0, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 2, 形式 B, 一時参照 1, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 3, 形式 P, 一時参照 5, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 4, 形式 B, 一時参照 3, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 5, 形式 B, 一時参照 4, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 6, 形式 I, 一時参照 8, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 7, 形式 B, 一時参照 6, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 8, 形式 B, 一時参照 7, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 9, 形式 P, 一時参照 11, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 10, 形式 B, 一時参照 9, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 11, 形式 B, 一時参照 10, ピクチャ構造 3, TFF:0, RFF:0 GOP ヘッダ - タイムコード 00:00:00:12, ピクチャ 12, クローズド GOP 0, ブロークンリンク 0 ピクチャヘッダ - カウント 12, 形式 I, 一時参照 2, ピクチャ構造 3, TFF:0, RFF:0 ピクチャヘッダ - カウント 13, 形式 B, 一時参照 0, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 14, 形式 B, 一時参照 1, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 15, 形式 P, 一時参照 5, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 16, 形式 B, 一時参照 3, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 17, 形式 B, 一時参照 4, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 18, 形式 I, 一時参照 8, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 19, 形式 B, 一時参照 6, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 20, 形式 B, 一時参照 7, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 21, 形式 P, 一時参照 11, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 22, 形式 B, 一時参照 9, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 23, 形式 B, 一時参照 10, ピクチャ構造 3, TFF:0, RFF:0 GOP ヘッダ - タイムコード 00:00:00:24, ピクチャ 24, クローズド GOP 0, ブロークンリンク 0 ピクチャヘッダ - カウント 24, 形式 I, 一時参照 2, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 25, 形式 B, 一時参照 0, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 26, 形式 B, 一時参照 1, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 27, 形式 P, 一時参照 5, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 28, 形式 B, 一時参照 3, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 29, 形式 B, 一時参照 4, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 30, 形式 I, 一時参照 8, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 31, 形式 B, 一時参照 6, ピクチャ構造 3, TFF:0, RFF:0 ピクチャヘッダ - カウント 32, 形式 B, 一時参照 7, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 33, 形式 P, 一時参照 11, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 34, 形式 B, 一時参照 9, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 35, 形式 B, 一時参照 10, ピクチャ構造 2, TFF:0, RFF:0 GOP ヘッダ - タイムコード 00:00:01:06, ピクチャ 36, クローズド GOP 0, ブロークンリンク 0 ピクチャヘッダ - カウント 36, 形式 I, 一時参照 2, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 37, 形式 B, 一時参照 0, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 38, 形式 B, 一時参照 1, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 39, 形式 P, 一時参照 5, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 40, 形式 B, 一時参照 3, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 41, 形式 B, 一時参照 4, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 42, 形式 I, 一時参照 8, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 43, 形式 B, 一時参照 6, ピクチャ構造 3, TFF:0, RFF:0 ピクチャヘッダ - カウント 44, 形式 B, 一時参照 7, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 45, 形式 P, 一時参照 11, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 46, 形式 B, 一時参照 9, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 47, 形式 B, 一時参照 10, ピクチャ構造 3, TFF:0, RFF:0 GOP ヘッダ - タイムコード 00:00:01:18, ピクチャ 48, クローズド GOP 0, ブロークンリンク 0 ピクチャヘッダ - カウント 48, 形式 I, 一時参照 2, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 49, 形式 B, 一時参照 0, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 50, 形式 B, 一時参照 1, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 51, 形式 P, 一時参照 5, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 52, 形式 B, 一時参照 3, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 53, 形式 B, 一時参照 4, ピクチャ構造 3, TFF:1, RFF:0 ピクチャヘッダ - カウント 54, 形式 I, 一時参照 8, ピクチャ構造 1, TFF:0, RFF:0 ピクチャヘッダ - カウント 55, 形式 B, 一時参照 6, ピクチャ構造 2, TFF:0, RFF:0 ピクチャヘッダ - カウント 56, 形式 B, 一時参照 7, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 57, 形式 P, 一時参照 11, ピクチャ構造 3, TFF:0, RFF:1 ピクチャヘッダ - カウント 58, 形式 B, 一時参照 9, ピクチャ構造 3, TFF:1, RFF:1 ピクチャヘッダ - カウント 59, 形式 B, 一時参照 10, ピクチャ構造 2, TFF:0, RFF:0 |
えーと、GOP 内に複数の I ピクチャがあったり、再生時 3:2 プルダウンとフィールドピクチャが混在してたり、しかもオープン GOP で I ピクチャがフィールド構造な上に 2nd フィールドが B ピクチャだったりで……はっきり言ってこれは先頭からエラーなくデコードできるだけで誉めるべきストリームで、ランダムアクセスできなくても責められるいわれはない気がするのだけどどーでしょう。
それともやっぱり MPEG-2 の編集ソフト作ろうとする場合はこの手のシャイロック風ストリームまでサポートしなければいけないものなのでしょうか。というより RFF で片フィールドだけ繰り返した空きにフィールドピクチャが入るって……このストリーム以外では見たことないのだけど、そんなのアリ?
skip_2nd_field() とか書いてたの忘れて、ピクチャヘッダ解析ログに 2nd field の情報が無いとかほざく自分萎え。sony-ct1.trace 眺めてたら気が付きました。
そういうわけで「RFF で片フィールドだけ繰り返した空きにフィールドピクチャが入るって」のは勘違いでした。あーストリームが腐ってるからだということにして、仕様だと逃げようと思っていたのに。
単にフィールドピクチャと RFF 両方使ってるだけなら異常ではないので、最終フレームにジャンプしようとするとエラーになるのはバグ。バグは恥。バグは敵。敵は粉砕しなければいけない。
上で書いたバグは修正済みなのだけど…… mpeg2video.c の read_frame() 関数の汚さにいい加減嫌気がさしてきた。作ってたのは自分なのだけど。
RFF 対応やらフィールドオーダ固定機能やらリサイズ機能やらが全て押し込まれていて見通しが悪い上に、コピー&ペーストの塊なため1つの修正が次のバグを呼ぶ無限地獄状態。そのうち何とかしないことには二進も三進もいかなくなる。
まだ MEI の mei.2conftest.60f の最後にシークできないバグが潰せていないため、0.4.4 は公開してません。遅くとも明後日までには何とかするつもりでいますが。
微妙にエラーが取りきれないのでリリースは予定どおり明日に延期。エラーは多分アレで最後だと思うのだが……どんなものやら。
えーと最近気がついたのだけど、MPEG-2 って 720x486 みたいな 16 の倍数じゃない画像のストリームも作れたのね。SONY の 422-Profile のサンプルはすべて 720x512@50Mbps (IPPP) だったから油断してたのだけど Tektronix のサンプルは 720x486 だった。
この場合正しくは 720x512(インタレースストリームの場合、プログレッシブの場合は 720x496)で内部処理してから 720x486 に縮める必要があるのだけど、とりあえず 720x512 で表示してしまうことで逃げた。これもいずれなんとかしなければいけない。
HR-VTG300 の GRT は私の環境では GCT-500 よりもゴースト除去能力が低い模様。ただ GCT-500 の場合、私の手元にあるのはチューナの基礎性能的にノイズに弱いようで粉っぽいとかいうレベルを超越した画像(TBS 深夜では)を作成してくれる。
ゴーストを受容すべきか、それともノイズを受容すべきか。アレに関してはすでに DVD 購入を決意しているのでまあ我慢することも可能なのだが……。サンプルを上げようかとも思ったけれど、比較に丁度良いシーンが切りだせていないのでそれは来週に回す予定。
備忘録: GCT-500 調整項目 | |
AGC 切り替え | AGC をピークモードとキードモードで切り替える(詳細不明) |
VR6901 | GRT チップの DA コンバータ出力レベル調整 |
VR301 | 不明 |
VR202 | チューナの出力レベル調整 |
VR202 | チューナの調整(選局位置調整?) |
T301 | 音声レベル調整 |
T201 | チューナに関連(詳細不明) |
VR??? が可変抵抗で…… T??? はなんだろう? 後、チューナにも T??? タイプの調整できそうな所があったのだけど、基板をケースから外さないと回せないのでここは弄っていない。
判ってると思うけど、上記情報はすべて無保証。ただ最低限の注意として、基板をケースから外すときは電源ケーブルをコンセントから抜いておこうね。スイッチ切ってても基板電源ユニットの裏に触れると感電するよ。
m2v.vfp ver. 0.4.4 公開してます。主にランダムアクセス関係のバグ修正と 720x486 の様な 16x16 の倍数でない解像度への仮対応。さて、次は I/P/B を外部アプリから取れるようにしなければ。
土日に何とかならないかな〜と試していたことは成果を出すところまでたどり着けず。大幅に機能低下したあげく辛うじて動くレベルを維持している。
しっかしこうして暫くぶりに中を見るとつくづく汚いソースだ。中途半端に最適化してたり一つの関数だけで片づけようとしていたことと、後は途中で無理な機能追加をしたのが悪かったと判っているのだが……。今やってるのもある意味さらにコードを汚くしてるだけじゃないかな〜と考えるとちょっぴり憂鬱。
この分ではいつ GUI 側に着手できるか判らないけど、せめて今週中にはある程度目処を付けときたい。
GCT-500 と HR-VTG300 の地上波チューナのサンプル。Y/C 分離は HR-VTG300 にやらせてて ADC は NV-DM1 です。Canopus DV Codec のデコード結果をそのまま PNG にしてます。
HR-VTG300 だとゴーストが残ってる(画面左の縦線が顕著)のに対して、GCT-500 では……ゴースト自体は低減されてるかわりに、ノイズで一杯だったりします。6ch だけでなく、3ch や 1ch でもこのノイズが出ることがあります。(場合によっては出なかったりもするのですが)
まーこのノイズなら Wavelet-NR + 3DNR でほぼ消せるので、時間はかかるけどしばらくは GCT-500 でやっていこうかなとか考えてたりします。調整で何とか直ってくれると嬉しいのですけど、今のところ見込みはなさそうなのが悲しいところですね。
シリアルママ向け殺人トマトのコーディングは……順調なのかな〜。少しはマシと思える状態にできたかもしれない。ただ現状だと YUV -> RGB 変換の MMX コードを潰しているから、リリースするためにはそこを復活させなければいけないのが面倒だったり。小回りの利かないアセンブラなんて嫌いだ〜。
こうなった。
うーん、あっさり改善されてしまった。やっぱり4分岐というのがまずかったのだろうか。まだ1回しか試していないのでこれで完璧とは言えないのだけど。
ということは GCT-500 側でまだ弄ったことのないあれを回してみるとブースタ無しでもいけるようになるのかも。後で試してみよう。
もう少しコード書かなきゃいけないんで死んでます。仕事とは無関係なプログラムなのが救いだったりするのですが〜。
来週はもう少しまともに更新できる……といいな。
現状はこんな感じ。
前回 とどれほどの変化があったのか疑問に感じるかもしれないけど……まあ、それなりに順調ということで。
少し懐具合が暖かくなったので「パターン言語」を購入。「デザインパターン」も理解しきってないうちからそんなもの買うぐらいなら、まだいまいち判っていないところのある C++ をしっかり押さえておくために「プログラミング言語 C++ 第3版」でも買っといた方が身になるのは判っているのだけど。
実際のところまだ全然目をとおしてなくてほぼ置物と化している。無駄遣いの極み。
今のところ仕事の都合でマルチスレッド版 FIFO バッファもどきを作ってるのだけど…… OS のファイルキャッシュがもう少しまともだったらこんなもの作らずに済むのにな〜とか考えてしまひ意欲がさっぱり湧いてこない。
つい先ほどもあやうく食事ができない哲学者をつくりかけてしまい、コードの大幅な修正をする破目になった。
会社の先輩から教えてもらったページ。結構笑えます。教えてもらったページ自体はこの中の「筑波マダム度チェック」だったのですけど、その上も面白かったので。