MPEG-2 VIDEO VFAPI Plug-In 0.5.27 を公開。如何にして途中で解像度が変更されるストリームに対処したかというと、シーケンスヘッダを処理するタイミングで、サイズ変更があれば強制的に出力サイズへのリサイズを呼び出すようにしただけだったりする。
当然のコトながら、この対処方法をではランダムアクセスで問題が発生する。現在シークは GOP ヘッダ(が存在しない場合は I ピクチャ)に対してのものとなっているので、シーク時にサイズ情報が記録されているシーケンスヘッダを読み飛ばしてしまう。シーク先の解像度が変更されていても、それを知ることはできない。そもそもシーケンスヘッダどころか GOP ヘッダも無く、I&B ピクチャのみが存在するストリームでは全ストリームを走査しない限り問題を解決することができない。
ストリームの問題。異常なストリームを許容する規格の問題。そう主張しても逃げられはしない。
規格がそうであるならば、何故それを前提としたコードにしなかったのか。プロジェクトファイルを必須とした DVD2AVI のアプローチの方が正しいと認めるのが嫌だっただけじゃないのか。
そもそも、GL ファイルというプロジェクトファイルもどきを作成してるじゃないか。ファイル読み込みのタイミングで GL ファイルの作成を始めるから、未だに他所様の BBS で、プラグインを導入したらフリーズしたとという書き込みで迷惑を掛けてるじゃないか。
VFAPI の仕様で、プラグイン側が処理中ダイアログを出すことができない? なら尚更、プロジェクトファイルを作るための別アプリケーションを用意するべきだったんじゃないのか。
ファイルを全部走査しないと解決不能? おいおい、ffx2mov で吸い出した m2v ファイルだと全て GL ファイルを作ってるように見えるのは気のせいかい? 走査してるのに解決できてないじゃないか。無能だね。
いかん。休みは明日からだというのに。まったく仕事をする気が出てこない。ついつい 一昔前に購入した ISO/IEC 11172-3 のプリントアウト 158 ページを眺めながら休みの過ごし方に心をはせてしまう。
一応来週いっぱい休みを取ってリフレッシュのつもりなんだけど、何をするかと言えば MPEG Audio 対応作業なんで日頃と何も変わらない生活になりそうな予感。休み中に公開できるところまで持っていけたらいいなと思っている。
インタレース解除および拡張 AVI 出力に関しては、現在完全に頓挫しててな〜んも作業をしていない。MPEG Audio 対応にケリがついた時から作業再開予定。
情報処理技術者試験(秋)って今日が申し込み締め切りだったのね。あわててネットワークの受験を申し込む。去年は申し込みを忘れたので、これが2回目の挑戦。さて、今回は受験料を無駄にせずに済むだろうか?
とある事情により必要になったので ITU-R BT.656-4 の購入手続きを行う。年間制限を超過してなければ無料で入手可能だったのだけど、1月にはもう使い切っていた ため、クレジットカード決済で購入。
これは直ちに購入できて、ダウンロードにも成功したのだけど、引き続き BT.709 を購入しようとすると、何故か VISA との間で認証エラーが発生したとのメッセージが出て購入できない。ひょっとしたらある程度時間を置いてからでないと決済ができないような仕組みなっているのだろうか?
しょっぱなから打ちのめされる記述発見。
A reset of the audio decoder may be required to change sampling rate.ISO/IEC 11172-3:1993(E) Page 21
えー「サンプリングレートの変更でデコーダのリセットが要求されるだろう」って途中でサンプリングレートが変わるのは当然の前提なのですか。サンプリングレートコンバータの搭載は必須ということですか。
どうせ音ズレ補正とか要求されると、結局サンプリングレートコンバータは必要になるわけだけど、初期リリースにはそんな機能付ける予定は無かったのにー。
ひょっとして Layer-2 のデコードってものすごく楽なんじゃないだろうかという気がしてきた。規格には Layer-3 のデコーダの作り方も載っている訳なのだけど、そちらと比較すると解説の分量がものすごく少ない。
どれくらい少ないかと言うと、解説自体は A4 でわずか 1.5 ページ分しかなく、デコードのダイアグラムを追加しても高々 3.5 ページにしかならない。これが Layer-3 だと解説だけで 5 ページに、ダイアグラムまで加えると 10 ページに到達してしまう。
MPEG-2 HW キャプチャカードの現状を考えるに、Layer-3 のデコードは当面不要っぽいので、楽な Layer-2 のみ対応でコードを書いて見ることにしよー。とりあえず demux とかランダムアクセスは考えずにデコードのみを実現する方向で。
m4c.auo および exavi.auo が、AviUtl 0.98c (and (2K or XP)) で使用不能になっています。現在原因調査中なのですけれども、はっきり言って行き詰ってます。
最初は AVIFileInit を本体側で呼ばなくなっただけかと考えて、プラグイン側で func_init() / func_exit() を作成し、そこで AVIFileInit() および AVIFileExit() を呼ぶようにしてみたのですが症状は変わらないままでした。もう少し詳しく調べてみると、AVIFileOpen で REGDB_E_CLASSNOTREG (0x80040154) が帰ってきてるため出力ファイルが開けず、それで出力が行われないと判りました。
でーすーがー。どうしたらそれを解消できるのかが判らないので困ってます。AVIFileInit() を忘れた場合に返るエラーは CO_E_FIRST (0x800401f0) のはずですし、AVIFileOpen() で REGDB_E_CLASSNOTREG (0x80040154) が返る場合といえば、ファイル名の拡張子が avi では無かった時ぐらいなのですが、そこは正しいファイル名が渡ってきていることを確認していますし、原因を掴みかねています。
いっそのこと gshot のように AVI 出力関係を全部自前のコードでやってしまえばこんなエラーに悩むこともないのでしょうけど、それを始めると修正がかなり大掛かりになるので躊躇してます。将来的に AVI2 対応を考えた場合、そちらのほうが潰しが利きそうなのですけどね。
えー、盛大に愚痴をこぼしてから1時間と経たずにこんなことを書くのもどうかと思うのですけど、AviUtl 0.98c での出力プラグインの動作不良の原因が判明しましたので報告します。
OUTPUT_PLUGIN_TABLE 構造体の filefilter メンバーをヌルターミネートするのを忘れていたのが原因でした。filefilter メンバーは最後に二つ NULL 文字が必要らしいのですが、m4c/exavi 共に 一つしか NULL 文字をつけていなかった為に出力ダイアログのフィルタ欄が異常になっていた模様。
exavi は auf に 0.1.4 を公開してます。M4C は、今回はバイナリ付きで m4c_2002_08_08.lzh に置いてます。双方とも 2000SP2 で動作確認済みです。
ぐふぅ、REGDB_E_CLASSNOTREG が返るのは私の XP 環境が腐ってる可能性が高い。コマンドライン版で入力ファイルに AVI ファイル指定しただけでも同じエラーがでるし、vmaid でも開けないからほぼ確定っぽい。
あー後で調べよう。XP での動作確認ができないのは痛いけど、Crusoe でエンコードなんて絶対ありえないから、当面は VfW の API が使えなくても困らないし。
遅れている MPEG AUDIO Layer-2 のデコード実装作業。一応フレームデータを読み込んで、サブバンドサンプルを復元する所までは完了したので、サブバンドフィルタの合成処理を作成すれば PCM へのデコードが(バグを組み込んでいなければ)実行できる予定。
何とか今日中にそこまではいけるかなという感触。デコードができるようになれば、サンプル単位でのシークに取り掛かることができる。次第にずれていく場合については後回しにするにしても、先頭でのズレの補正ぐらいは実装しとく必要があるだろう。
あー PTS やら DTS やら SCR について真面目に調べる必要が発生するのか。どこまでやるのかにもよるのだろうけれども、ものすごく面倒な処理になりそうな予感。
音は鳴るようになったのだけど、未だに怪音波状態。一応元の曲の面影は残っているので、単純なミスだと推測してる。もう少しがんばればデコードだけなら何とかなりそう。
多少改善。低音に面影を感じるしか出来なかったのが、ボーカルを聞き取れるようになった。まだ怪音波だけど。うー何処でバグってるのかな〜。
元の楽曲を復元できるようになった。まだ 128kbps の 44.1kHz しか試していないので、後でもう少し高いビットレートのものや低いもの、サンプリングレートの違うものなど試しておかなければいけない。
ただ、それは後でもできることだから、プラグインへの組み込みを急がないと。このままでは休みが終わってしまう。
蝶々が飛ぶお花畑なストリーム。フレームがドロップすることはなく、ビデオ信号は正しく 59.94 Hz で同期し、オーディオサンプリングのクロック誤差も全く無い状態で取り込まれたファイル。
PC 向けの環境で、そんなものがあるわけ無いと判ってはいるのだけど、補正まで組み込んでいたら完成が何時になるか予想できないので思考停止。音ずれ補正を組み込む場合はどうせ作り直しになるのだから、その時考える。遅くても構わない。初期ディレイぐらいは考慮したかったけど、能力を超えるので断念。後ろ向きまっしぐらの方針で現在作業中。
layer2 のデコーダ作成にあたっては他の方が書かれたソースも参考にしてます。つーか規格書だけじゃ作れないです。特にサブバンドサンプルの requantization は絶対に規格書読んだだけでは理解不能です。私の英語読解能力が低かったせいもあるんでしょうけど。
参考にしたソースは dist10 と mpg123 と同じところで作成された java 版のデコーダですね。dist10 はすごーく読みづらいのですが、java 版は非常に読みやすいのでデコーダ作ってみたい人にオススメです。
音声対応はまだ組み込めていません。不具合報告を受けての修正のみです。比較的重要な不具合だったので修正を急ぎました。
修正内容は 00 00 01 E0 00 03 81 00 00 という PES パケットへの対応です。これ腹立つことに、そのすぐあとに 00 00 01 BE 07 E3 ... と padding パケットが続いてるんですよね〜。なら最初から 00 00 01 BE 07 ED ... にしときゃいいじゃないかと思ったりしません?
えーと、一般人がついてこれない話を展開してしまって申し訳ありません。MPEG の demuxer 作ってる方が、もしも読んでたりしたらそーゆー腐ったストリームを出力する muxer もあるんだと心に留めておいてください。
ああ、休みが終わってしまった。MPEG AUDIO 対応は完成せず、職場で休んでいる間のメールをチェックすると不具合の報告が2件ほど。ぐんにょり。朝も寝坊してるし駄目人間っぷりが上がってる。
休み中も、実家にいる間は他に何もできないので作業が進んだけど、借りてる部屋にいる間はついつい遊んでしまったからなー。真人間への道は遠い。
……色々と大変なのだろうなー。
別に不満の表明という訳ではないのです。私的には仕様が明解で不具合さえなけりゃ本体のソースなんていりません。どちらかというとソースよりも、詳細なプラグイン API ドキュメントがあったほうが嬉しかったりします。
ああ、自分で書いといて自身に突き刺さる。mpeg2 のページ、もう少し読みやすく修正しなきゃ。FAQ が繰り返されるのは、FAQ が読みづらいからだ。
アスペクト比は 無視 するのを推奨しておきます。フィールド維持するために縦解像度を 480 のまま 16:9 にすると 480*16/9 で 853.3333 になるのです。m2v.vfp のサイズ変更は全然最適化してない lanczos3 なので、ひたすら重いだけですから正直使わない方がいいです。無視に設定しててもリサイズがかかる場合は連絡してくれれば調べますので。
何故今まであんなもので我慢できていたのだろう。目の前に圧倒的に正しい世界が開けて、自分の作ってきたものが只のゴミでしかなかったと思い知らされる。それでも即効性のある賛美を求めて、いずれ捨てなければいけないソースに手を入れる。
何でこんなこと書いてるかというと「将来、Audio ES に対応するときも使えるように」と思って作っといた PS/TS 読み込みルーチンが同期補正を考えると全く使い物にならないことが判明した挙句、それでも、なるべく早期に MPEG Audio 対応版を投入するためにはそのコードを捨てることが出来ず、コピペで Audio ストリーム用 PS/TS 読み込みルーチンを作ることが決定してたりするからです。あはははは。
PTS/DTS について真面目に調べてみた結果、映像でも GOP タイムコードでシークするより、PES packet の PTS/DTS を元にシークした方が正しいし、楽なんじゃないかということに気がついてしまったのです。ES への対応は全く別の方法を用意しなければいけないという欠点はありますが、.GL ファイルを作らなくて(ユーザを待たせずに)済むってのは素晴らしいことのように思える上 ── MPEG Audio や その他のストリームに対応する必要があるときも、ほぼ汎用的に使えるものにできそうなのですね。
あるべき姿が判っているのに、作業量を減らしたつくれる形で妥協しなきゃいけないのは悲しいことです。
どうやら趣味としては MPEG エンコーダを作れない身の上になってしまいそうです。まだデコーダに関しては大丈夫そうだけど、そちらも駄目になるのは時間の問題のような気がしてきました。オーディオ対応は PS のみになるかもしれません。それだけは意地でも完成させますがー。
昨日の google の検索ワードで「パターン認識 K-NN」というのが入っていたので、どの辺りに出てきてしまうのかなと調べてみた。結果は 7/26。母数が少ないので1ページ目に来てしまっているけど、あんまり高い評価は受けていない模様。一安心。
ついでにヒットしたページをまわって見た結果、多変量解析というキーワードを仕入れることに成功。後で調べてみようと決意する。調べた結果を利用するだけの余裕ができるのはかなーり先になってしまいそうな気がするけれども。
いやー [Thx sysop_If u want any warez_plz tell me] ですかーそういわれると照れますね。でも私あまりそういう UG な世界になじみがないのですが、そんな私でも頼めば聞き入れてもらえるようなやさしいところなのでしょうか?
ところで、延々 8:00 から 13:30 まで時間をかけてアップロードされていたファイル、ダウンロードすることはできたでしょうか? いえ、その FTP サーバ、Anonymous でのアップロードしか許可してないので、256 kbps しかない貴重なアップロード帯域を無駄に使わせてしまったのではないかと危惧しております。
とりあえず誰もダウンロードしないというのはあまりにも不憫なので、アップロードされたファイルは私の手元に保護することにしました。ネットの露と消えた訳ではないので、その点だけは安心してください。
決まってしまいました。今後「まるも製作所」あるいは「茂木和洋」名義で MPEG のエンコーダが公開されることは、無いでしょう。つーかそもそも作る気があったかと聞かれると微妙なのですが。
そーゆー訳で、MME.EXE に部分再圧縮機能とかが付くこともなくなりました。そもそもそんなことを実現するだけのスキルがあったのかと聞かれると返事に困りますけど。
えーと、デコーダの開発は暇を見ながらなら、まだ続けられそうです。ただし、最適化とかは Intel で公開されてる技法をつかう以外のことはできなくなるかもしれません。音声対応を進めるのには、今のところ一切障害はありません。
PS からのシークつき AUDIO ES 読み取り部分は作業完了。これから PCM バッファの作成に移る。これが済んだら後は作成済みデコード部分と組み合わせて、外部から使うためのインタフェースを実装してやればとりあえず公開できるレベルになる予定。
何とか今日中に片付けたいところだったのだけど、どうも明日いっぱいまでかかってしまうかもしれない。MME.EXE のウィンドウへの D&D も対応しとかなきゃいけないしなー。
Layer2 Audio に対応しました。MPEG-2 Program Stream か、MPEG-1 System Stream に入ってる MPEG-1 Audio Layer-2 データを、16 bit 2ch PCM データとしてランダムアクセスで取り出すことが可能です。
音ズレの調整機能は、初期遅延の補正のみです。少しずつズレが拡大していくタイプのズレには対応できません。また、モノラル形式の Layer-2 データも、片チャネルが無音の 2ch PCM データとして出力します。
規格そのままに、浮動小数点処理をしているのでデコードはものすごく遅いです。さらに、あまりテストしていないので、ファイルによっては無限ループに落ちることがあるかもしれません。
と、このように色々と制限の多いリリースですが、よっしゃ試してやるぜという漢気(別名人柱気質)のある方は試してみてください。
どうやら昔の私はかなり仕合せだったらしい。時間と金銭以外に何の制約もなく自分の能力を投入することができて、好きなだけ愚痴を書き連ねても許されることがどれほど仕合せか、私は判っていなかった。
特に愚痴を書き連ねることができないのが辛い。日々明らかになる衝撃の新事実を愚痴るだけで圧倒的に仕合せになれそうなのだけど、それは許されないし、許せない。
これから先1・2ヶ月ほど、多忙のためプログラム系の更新はできそうにありません。よっぽど恥ずかしいバグの場合は別ですが、新機能の追加はしばらくありえないと考えてください。
一昨日の台風以来、日差しは相不変だけど気温がすごしやすくなってきたので昼を外に食べに行ってみる。今までは暑さに耐えかねて出勤途中で購入したカロリーメートでしのいでいた。
多少は汗が出るけれども、ひところと比べればだいぶマシになっている。このまま暑さが戻らなければクーラーの利いてる部屋に閉じこもっている必要はなさそう。
シミュレーションの結果待ちの間に、どうやら次の仕事になってしまいそうな H.264 の調査中。なんでも昔 H.26L と呼ばれていたもので……ってどこかで見た記憶があるとおもったら以前 デーブイ(DV) で紹介されてた H.26L ですか。
リファレンスソフトウェアと規格の最終草案が 公式 FTP サイト からダウンロードできるみたいだから、今のうちから調べておいた方がよいのかも。
駄目人間的発想の元、8月頭に引き受けていながら、今まで手をつけていなかった某副業に手をつける。とりあえずこの週末にある程度進めておかないと締め切りに間に合わなくなってしまう。何もしないまま、既に 1/3 の時間が失われてしまったから多少はあせらないと。
今週は音声対応版を出せた自分へのご褒美ってことで、家に帰ってからは一切コードを見ないだらけた生活をしていたけど、同期補正の実装にも取り掛かりたい(それが済んだら次は AAC 対応かな)ので副業をさくさくと片付けたいところ。
linux-users ML 東北サーバからの配送が止まってそろそろ2週間。盆の間の電源点検か何かで止まっているのかと放置してたのだけど、ping が通るようになった今週にも配送は再開されず。
stat コマンドを fml のコントロールアドレスに送ってみても user-unknown が帰ってくるのはなんでだろ。サービスを停止したにしては www.linux.or.jp にも何も書いてないのだが。抜けてるメールを取り寄せるのが面倒で別サーバに乗り換えてなかったのだけど、そろそろ考えたほうがいいかな〜。
会社の飲み会で話題に上がった宮部みゆき「模倣犯」読了。確かに名作。昨日はこれを読むだけでつぶれてしまった。気に入った登場人物は水野久美と有馬義男。
圧縮は理解できる。分割もまだ理解できる。だけど偽装だけはその必要性が理解できない。
少なくとも WEB スペースに対価を支払っているならばファイル形式など問題にはならない。まともなサーバ管理者ならば、ファイル形式よりも、ヘッダの内容よりも確実で嘘の入る余地の無い転送量を監視してるはず。
そうである以上、ファイルの偽装というのは手間が増えるだけの全く無駄なステップに思える。自分が公開するものはとっても価値があるもので、その程度の手間を惜しむ人間には入手する資格が無いといいたいのだろうか。
W32/Kmnz に感染してます。現在ウィルスの除去を試みておりますが、除去に成功するまで電波がだだモレになる可能性が高いので注意してください。
むー、私が GPL を嫌いな訳について思いっきり電波な発言をしてしまおうとしていたのだけど、なんかその気が失せてしまった。後でもう少し考えてから書くことにしよう。
職場にて。インラインアセンブラの邪悪さを痛感する。つーか stdcall も cdecl も判らない人間がアセンブラコード触らないでくれ。頼むから。本当に頼むから。
了解です。帰宅してから aui インタフェースを復活させます。
すげぇ。ホークはドミネーターを手に入れたドミネーター を見るとつくづくそー思う。きっと御祓いが足りなかったんだね。やっぱりアクマって実在するんだ。ふつーのプログラマならこんなバグ入れるほうが難しいもん。
ジョナサン……とうとう道を踏み外してしまったのか。ある意味仕合せなのかもしれないけど……。本日発売の「ザ花とゆめ」掲載の山田南平「BOYS BE AWAKE」を読んでの感想。
今週は邪悪なコードと闘う毎日を送っていた。決して、2ch にコテハンで書き込みした挙句、恥かいたので更新をする気がおきなくなったわけではないのだ。
実際どれほど邪悪なコードだったかというと……。
一応最後まで動いていて、それなりにファイルを出力できてるのが奇跡。多分来週も衝撃の新事実が発覚するのだろう。もう悟った。
締め切りさえなきゃ「これ一から書き直した方が絶対いいですよ〜」と言ってしまえるのだけどなぁ。