来月発売予定の CPU で追加される、SSE4.1 の MPSADBW についての話。個人的にはそれなりに期待しているのだけど x264 ですぐに (--me umh/hex/dia を使ってる人にとって意味のある形で) 利用可能になるかどうかは微妙だと思っている。
MPSADBW は、次の図のような形で、4x1 ブロックで水平に 1 画素ずつずらした 8 座標の SAD を一度に計算することができる命令だ。
x264 での --me esa のようにフルサーチ [参考] を行う手法であれば、この命令でのパフォーマンス向上は 4 倍以上あるだろうと期待できるのだけど、ダイアモンドサーチ [参考] やヘキサゴンサーチ、UMHexagon [参考] では、そもそも水平方向に連続した 8 座標を評価するという検索パターンは存在しないので、MPSADBW をそのまま使ってもメリットのある箇所がない。
検索方法を変えずに MPSADBW を使うとすれば、UMHexagon の中で 5x5 検索を行っている所に適用するぐらいしかなくて、ダイアモンドサーチやヘキサゴンサーチには適用する方法がない。無理矢理 1 座標の SAD を計算する個所に適用することもできるけど、そんなことをしても遅くなるだけだというのは誰から見ても明白。
意味のある形で MPSADBW を使おうとするなら、最初に 8x5 とか 16x7 とかの小さな範囲でフルサーチをして、打ち切り閾値に達しない場合だけ UMHexagon でのクロスサーチやラージヘキサゴンに進むという形の新しい検索パターンを採用するしかないだろうと予想してる。ただ、この手法ではダイヤモンドサーチやヘキサゴンサーチをベースにしていた検索手法と比べれば評価対象座標が増えてしまうので MPSADBW が使えない (PSADBW で代用しなければいけない) 環境では遅くなってしまう。
うだうだ書いてて、何が言いたいのか判らなくなってきた人もいると思うので結論を。現在出てる DivX での SSE4 の高速化効果 100% (エンコード速度が二倍) というのは、旧バージョンと比較して SSE/SSE2 での速度が不当に下げられた (MPSADBW 版と検索パターンを一致させるために評価対象箇所が増えている) ものかもしれないので、SSE4 にあまり期待しすぎない方がいい。
例外は、現在 x264 で --me esa を常用している人。フルサーチでは MPSADBW の恩恵を完全に享受することができるので、何も心配することなく SSE4 に期待していていい。
以上、見事に偏った陣容。
「守り人シリーズ」は夏休み中に書店で見かけて何となく購入。アニメ版は見ていない。とりあえず 1 巻だけ試してみるつもりで買ったのだけど、その日のうちに 2 巻目の「闇の守り人」を買いにもう一度書店に行く羽目になった。多分このシリーズの文庫版が出るたびに継続購入するだろう。(A+)
「ローマ人の物語」はマルクス・アウレリアス帝からコンモドゥス帝を経てセプティミウス・セヴェルス帝まで。防衛線の綻びと北方蛮族との苦闘、内乱による活力の浪費、軍事帝国への変貌、キリスト教の侵食、このように古き良きローマの変化を淡々と物語っている。もちっと文庫版の刊行ペースが上がってくれると嬉しいのだけど、それ以外では特に不満なく楽しめている。(A-, シリーズ全体では A)
「文学少女シリーズ」は巡回先で評判がよかったので購入。実際に読んでみて納得。特に 3 巻 (繋がれた愚者) 以降の展開がお気に入り。(既読分通しで A- 評価, 道化/幽霊は B+ で愚者は A-, 天使が A+ で巡礼者は A-)
というわけで「Bad! Daddy」と「うさ恋。」を作家買い。さくっと読めたのはいいのだけど……。(Bad! Daddy/うさ恋。ともに B-)
「姫宮さんの中の人」は時間つぶしに購入。適当に笑いながら読む分には良いのだけど……正直続きは買わなくてもいいかな。(C-)
「ROOM NO.1301」は継続購入中のシリーズなので。とりあえず短編集 3 巻のあとがきを踏まえてこの巻のあとがきを読むと倍楽しめるので、内容を忘れてた人は再読推奨。(B+)
「お稲荷さま。」も継続購入中のシリーズ。6 巻あたりでそろそろ続きは買わんでもいいかなという気になりつつあったのだけど、同作者の「EaG」がそれなりに面白かったので購入継続。ただし今回は短編集で内容も……だったりするので……まー継続するかどうかの判断は次まで保留。(C)
「GPM 山口防衛戦」も継続購入中のシリーズ。一応これが山口防衛戦最終巻なのかな? GPM 発動のあたりは好みなんだけど、同時多視点進行の表現や構成をなんとかできなかったかなというところが不満点。続き (九州反攻戦) が出たとしても買うかどうか微妙。(C)
職業プログラマというのは悲しいもので、自由になる時間はそんなに多くなかったりします。例えば今日の場合だと……。
とまあこのように自由になる時間はほとんどなく、日中を拘束されてしまうわけです。大変そうでしょ?
そーゆーわけですから、職業プログラマ兼オンラインソフト作者とか、職業SE兼フリーソフト作者とかいう人種はいたわってあげるひつよーがあるわけです。たとえ「むはははー漏れにひれ伏して感謝しろー」とか言いだしたとしても生暖かく見守ってあげましょう。ほんのちょっぴりイタイ人なだけなんですから。
帰宅途中にスーパーで「秋映 (あきばえ)」を見かけたので購入。甘味としゃっきりした歯ごたえが気に入っているので「フジ」や「つがる」よりも優先して買うようにしているのだけど、今年は今日まで見かけることがなかったため、いっそ通販に手を出してしまおうかと考えてみたりもした。
例年なら 9 月の中旬から出回るはずの品種なんだけど……やっぱり今年の天候のせいなのかなぁ。とりあえず一昨日買った「つがる」がまだ 2 つ残っているので、そちらを先に片付けなければいけないけど、日常の楽しみがひとつ増えたのは嬉しい。
今回は 2ch ソフトウェア板の aviutl スレッドで質問者がいた --b-pyramid の意味と、拡張 AVI 出力プラグインから利用した場合の問題点について。まず --b-pyramid (VFW の CODEC 設定用ダイアログ上では "Use as references" というチェックボックス) を設定した場合、x264 は次のように入力フレームを圧縮する。
このように B フレームも参照フレームとして利用していく設定が --b-pyramid になる。(ピラミッドと名づけられているのは、参照フレームがピラミッド状に積み上げられていくため)
この方法の利点は、--b-pyramid を利用しない場合に上図のように時間軸的に遠いフレーム間での予測をする必要があるフレームを、より時間軸的に近いフレームからの予測に置き換えることができて予測誤差 (DCT 係数) の発生量を減らせる (可能性が高くなる) というところにある。
欠点は、未来のフレームからの予測が 1 段階余計に入るようになるため、MPEG-1/2/4 までの (参照画像としては使われない) B フレームの場合よりも、デコード時のフレーム遅延が増えてしまうこと。--b-pyramid を指定してエンコードした AVI を VFW 経由でデコードする場合の入出力画像の対応は、次の順になる。
現時点 (ver. 0.3.11) で、拡張 AVI 出力プラグインでは、上図でαに起因する遅延とβに起因する遅延は考慮しているものの、--b-pyramid に起因するγの遅延を考慮した処理になっていない。このため、--b-pyramid/Use as references/参照フレームとして利用 を設定してエンコードしたデータは、VFW でのデコード時に 1 フレーム分のズレが発生する。
現時点で可能な対策は「--b-pyramid/Use as references/参照フレームとして利用 を設定せずに、MPEG-1/2/4 までと同じ (参照画像としては使われない) B フレームだけを利用する」か「VFW での 1 フレームのズレを許容範囲として受け入れてキニシナイことにする」のどちらかになる。
蛇足。当然だけど --bframes 1 で --b-pyramid とかを指定してもあまり意味はない。--bframes 2 から --b-pyramid の効果が出るけど、バランスよく使いたい場合は --bframes 3 と --b-pyramid を組み合わせることを推奨。
拡張 AVI 出力プラグインを Ver. 0.3.12 に更新。ダウンロードは AUF から。今回の更新で、同一フォーマットで複数の ACM CODEC が PC にインストールされていた場合、その中の一つしか選択できない問題を修正した。
えーと最初に対応依頼メールが来たのが…(メールフォルダを確認)…今年の 2 月か。長らく放置してて申し訳ない。偶々やる気が復活し始めた時期に DTV 板の aviutl スレッドで同じ要望を見かけたので対応してみた。
なお、今回の更新でも --b-pyramid (参照 B フレーム) のデコード時遅延については対応できていないまま。それと x264 でマルチスレッドを利用する場合 B を使ってなくてもエンコード時の初期ディレイが発生するわけなんだが、この場合 B は使われていないからデコード時のディレイは発生しないにも関わらず、B が使われててデコード遅延が発生するものとして AVI に多重化しちまうんだよなー。
その辺り、いろいろと問題が残ってるのだけど対処方法考えても嫌な結論 (x264 の出力ビットストリームをもっとまじめにパースして POC を見て制御する) しか出てこなかったので今回の更新では放置。ひょっとしたらそのうちもっとうまい解決策が思い浮かぶかもしれないので。
拡張 AVI 出力プラグインを Ver. 0.3.13 に更新。ダウンロードは AUF から。Ver. 0.3.12 で、音声形式に PCM を選択した場合、属性情報を選択できなくなるというバグを入れてしまったため、その問題を修正。
バグレポートを送ってくれた方に感謝。そして Ver. 0.3.12 をダウンロードしてしまった人に謝罪。こちらでの動作確認が不十分だったせいで余計な手間を取らせてしまって申し訳ない。
真逆(マサカ)、新聞で「真逆(マギャク)」を見ることになるとは。市民権を得るまでずいぶん早かったな。日経新聞、10/8 の「風向計」の話。以下、該当部分を引用 [オリジナル]
経営学の泰斗であるピーター・ドラッカーは著書「未来への決断」で「大統領のための6つのルール」を挙げている。1つ目のルールは「何を行わねばならないかを問うことだ。何をやりたいかに固執してはならない」。憲法改正や教育再生など持論の実現にこだわった安倍氏の手法はまさにこの真逆だった。5つ目のルールに「政権内に友人を入れてはならない」とあるのも、安倍政権の崩壊を予言したかのようだ。
この文脈で伝統的用法の「真逆(マサカ)」の方を使っているとは思えないので、正反対の同義語として近年使われ始めた「真逆(マギャク)」の方を使っているのだろう。私の知る限りで最も古いこの用法の出現例は 奈須 きのこ の「月姫」だったか「空の境界」だったか。
まー伝統的用法といったところで、所詮「兎角(とにかく)」と同レベルのアテ字なのであんまり目くじらを立てるようなことでもないのだろう。さーて NHK で「真逆(マギャク)」が出てくるのは何時頃になるのだろう。
とはいうものの「真逆(マサカ)」の用法が既に刷り込まれている人間としてはこの用法を見る度に違和感を感じるのまでは止められず。言語が生きてる以上、変化していくのは当然だし、正しい言語なんて虚構の世界にしか存在できないって理屈では納得してるのだけどねー。
「正しい言語」というものをギミックとして取り入れているのが 新城 カズマ の「星のバベル」
ネタバレになってしまうけれども、南洋諸島部で少数民族の独立主義者が「民族的・歴史的に正しい言語」を捏造して子供に使わせるということを背景に置いてたりするお話。正しい言語であるがゆえに変化は許されず生まれた瞬間からその言語は死んでるところとか、そもそも生い立ちからして「正しくない」ところとか、「正しい言語」というものについていろいろ考えさせてくれる作品。
ハルキ文庫とゆーマイナー泡沫レーベルから出てた本なので既にアマゾンでも新品での入手はできなくなっているけど、どこかで見かけることがあったら買ってみるといいかも。
ファニーさんかわいいよファニーさん。いぢめて光線を放ちまくりの声が素晴らしい。
というわけでケラケラと笑いながら「ALICEパレード」を楽しんでいる。まだ 4 日目。いやーエロゲを楽しむのは久しぶりだ。4 クリック目で耐えきれなくなって 1.5 年間放置してた「智代アフター」といい、巡回先の評判を頼りに購入した「Bullet Butlers」といい最近ハズレっぽいものばかり引いてたからなー。
そんなわけで体験版とかを試してから買うよーになってしまってるのだけど、体験版ではファニーさんの魅力を 1/10 も伝えていないのは大いなる損失だと思ってみたり。いや、本当に素晴らしいのですよ。
基本的にすべて見たら捨てる形で保存はしていない。大した量を見ているわけでもない。NHK と BS/CS は面倒 (録画器材の都合) でさっぱりチェックしてない。この程度でアニヲタを名乗ろうというのは不遜にあたるだろう。
ここ 3 年ほど使っているイヤフォン。フォームイヤパッドの S と組み合わせて使っている。以下の点が気に入っている項目。
で、次が不満点。
ケーブルの問題が結構致命的。最初に使っていたものはプレイヤーにケーブルを巻きつけていたためか昨年の 8 月にケーブルが断線。現在使っている 2 代目はまだ断線こそしていないものの、耳に掛ける部分のケーブル被覆が皮脂で硬化して、ひび割れてしまっている。
まー私の扱いが雑だからという問題もあるのだろうけど、正直な感想としてはもーちっと素材には気をつかってほしいところ。とりあえず今使っているのが使えなくなるまではそのまま使うけど、カナル型イヤフォンも増えてきたことだし、次は別のものを試してみようかと考えている。
更新。「Windows Vista 環境で aviutl を起動しなおした場合に、拡張 AVI 出力で設定していた音声出力形式を記録・復元することができなくなっている」という問題に対処。バグレポートを送ってくれた方に感謝。
aviutl スレッドで 2 件報告のあった、マルチスレッド版 huffyuv で出力できないという問題については、可逆圧縮スレッド 667 さんの huffyuv mt では再現しなかったので放置。
今回の修正関連で、Windows Vista と ACM (Audio Compression Manager) 関連の腐れっぷりがますます嫌いになってしまった。
MMRESULT acmDriverOpen( LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen );
つーかこういう API 見るとさ、HACMDRIVERID hadid は PC 内ではユニークな数値が設定されるんだろーなと期待したくならない? ID という名前を付けられた変数がコロコロ変化すると思う?
実際のところ、Windows XP では (ACM ドライバの優先度変更程度では) 変化しないユニークな数値が設定されていたので、HACMDRIVERID を記録しておけば、アプリケーションが再起動された場合でも HACMDRIVERID から ACM ドライバを復元することができていた。
が、Windows Vista では HACMDRIVERID の数値はアプリケーションが起動するごとに (MSB 16 bit が) 変化してくれやがる。HANDLE の H が頭についてる型に永続的な数値が設定されると期待する方が間違ってると言われるとそのとーりなんだけどさ。
typedef struct { const char *name; int name_length; int tag; HACMDRIVERID did; } SELECT_ACM_DRV_PRIVATE; static HACMDRIVERID select_acm_did(const char *name, int tag); static BOOL CALLBACK select_acm_did_drv_enum_cb(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport); static BOOL CALLBACK select_acm_did_tag_enum_cb(HACMDRIVERID hadid, LPACMFORMATTAGDETAILS paftd, DWORD dwInstance, DWORD fdwSupport); static HACMDRIVERID select_acm_did(const char *name, int tag) { SELECT_ACM_DRV_PRIVATE w; w.name = name; w.name_length = strlen(name); w.tag = tag; w.did = 0; acmDriverEnum(select_acm_did_drv_enum_cb, (DWORD)&w, 0); return w.did; } static BOOL CALLBACK select_acm_did_drv_enum_cb(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport) { HACMDRIVER drv; ACMFORMATTAGDETAILS fmt; if( (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) == 0 ){ // do nothing return TRUE; } memset(&fmt, 0, sizeof(fmt)); fmt.cbStruct = sizeof(fmt); if(acmDriverOpen(&drv, hadid, 0) == NO_ERROR){ acmFormatTagEnum(drv, &fmt, select_acm_did_tag_enum_cb, dwInstance, 0); acmDriverClose(drv, 0); } return TRUE; } static BOOL CALLBACK select_acm_did_tag_enum_cb(HACMDRIVERID hadid, LPACMFORMATTAGDETAILS paftd, DWORD dwInstance, DWORD fdwSupport) { int n; SELECT_ACM_DRV_PRIVATE *w; w = (SELECT_ACM_DRV_PRIVATE *)dwInstance; if( (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) == 0 ){ return TRUE; } if( paftd->cStandardFormats < 1 ){ return TRUE; } if( paftd->dwFormatTag != (unsigned int)(w->tag) ){ return TRUE; } n = strlen(paftd->szFormatTag); if(n != w->name_length){ return TRUE; } if( memcmp(paftd->szFormatTag, w->name, n) != 0 ){ return TRUE; } w->did = hadid; return TRUE; }
仕方がないので上のように acmDriverEnum() と acmFormatTagEnum() を使って HACMDRIVERID を特定するように変更し、この問題を回避することにした。何が嫌って ACM ドライバのインスタンスを作るため「だけ」にコールバック関数を二つ作成して、コールバック関数と列挙関数呼び出し元でデータをやり取りするための専用構造体を用意してと無駄なコードを書かされる点。
ACM とか VCM は Windows 3.1 の頃からの歴史ある API だから洗練されていないのは仕方がないにしても、無駄に冗長で複雑な割に、柔軟性が提供されてるわけでもないというのが腹が立つ。
更新。「入力ファイルの音声形式が 48.001kHz で、出力形式が 48.000kHz の場合のように、微妙に異なるサンプリング周波数設定で出力が行われた場合に、例外を発生させる」というバグを修正した。
2ch DTV 板の可逆圧縮総合スレッドで原因調査に協力してくれた 684,686,693 さんに感謝。
今回の原因は拡張 AVI 出力プラグインが内部で使用していたサンプリング周波数変換処理のバグ。上記の例の場合のように最大公約数が 1 になってしまう周波数の組み合わせの場合に、周波数変換処理に利用する作業用バッファ領域のサイズとして必要量よりも小さなものしか確保せずに、範囲外の領域を参照していたのが原因。
完全に私のミスで、テスト不足に起因するもの。今回の更新ではそれなりに (アーカイブの src\acm_test 以下で) テストはしてみたつもりなので PCM フォーマット変換処理関連でのミスはもうないと思うのだけど……。テストケースでは代表的な設定しかこなしていないのであまり自信がなかったり。
前回 書いた acmDriverOpen() と HACMDRIVERID の問題についての補足。2ch ソフトウェア板 aviutl スレッドでの報告によると、XP でも「出力用 WaveFormatEx 構造体の復元に失敗しました」が出ていたらしいので、「Windows Vista の問題」というのは誹謗に相当したかもと後悔中。
もっとも ACM 関連 API が無駄に冗長で判りづらいという点については完全に正当な意見だと考えているので、そちらは全く後悔していない。
昨日 2 回目の TOEIC を受けてきたわけだが……正直 1 月よりも出来が悪くなってるのをどーにかしたい。リーディングは長文二つ残して時間切れ (前回よりも一つ増加) だし、リスニングも自信をもって回答できたのは 30% 程度だし。
まー前回から今回の間にほぼ何もやってない訳で、こーゆー結果も当然なのかもしれないけどなんちゅーかもちっとコストパフォーマンスがいい学習方法がほしいな。
継続購入中のシリーズで、新刊が出ていたので購入。色々とアラがあるのだけど、それを上回る魅力があるので読み続けてる。今回は 4 巻から続いていた地下編の決着回。さほど目立つアラもなかったし楽しめた。(A-)
唯一惜しむべきは、国城田の扱いとか。もーちっと見せ方工夫してくれれば説得力を持たせることもできただろーに、多少は背景描写があったとはいえ、話からは浮いてたからなぁ。
まー私も文献でしかあの時代を知らない世代なのであんま偉そーなことを言う資格はないのだが、BLACK LAGOON のタケナカのよーな描写だったらまだ納得できたのにと考えてしまうともったいなく思えてしまう。