今日の作業
7:12
ふと考えたら、mplayer-bvdd-noiwmmxtとmplayer-w100の違いってbvdd/w100ドライバが有無だけじゃん。んで、両方のドライバを有効にしたバイナリも問題無く作れるから、一つにパッケージに纏められる。そうしよう。
8:52
MPlayerに複数の動画ファイルを渡したとき、最初の一つしか再生出来ない問題に取り組んでみた。
ドライバ側のrelease()はプロセスでclose()を実行したときに呼ばれるものだと思っていたけど違うらしい。file descriptor(fd)を複製していた場合は、最後のfdがcloseされたときにのみrelease()が呼ばれるようだ。んで、MPlayerはfork()してるのでfdが複製されている。よって、bvdd_release()が意図するタイミングで実行されていなかった。
最後のclose()以外はrelease()が呼ばれないわけだけど、その場合は代わりにflush()が呼ばれるらしい。試しにrelease()の中の処理を一部flush()に移動させてみたら、無事動くようになった。これが正しいアプローチなのか分からないけど。*1
9:58
んん? 画面からハミ出すような動画を再生すると固まるような。はやいとこクリッピングを実装しないとな。
11:50
VGA<>QVGAの変更はサポートしないつもりだった。MPlayer側でソフトウェアによる2倍拡大表示を実装するつもりだったから。しかし、あんまりヤル気がなかったところで、ぴろさんがQVGA対応を行なって下さったので方針転換してQVGAもサポートすることにする。
bvddはそのままでMPlayerを適当に変更したら案の定ホワイトアウトしてくれたので、ゴリゴリとbvddを改造。ついでにベースフレーム4bppサポートのためのコードを追加。まだまだ。
12:33
QVGAサポート完了。QVGAモードだと画面の縦方向に縞々が見えるなぁ。
''-vm''オプションでソース解像度がQVGA以下の場合は、QVGAモードに移行してから再生開始するようにした。''-vm''本来の意味と合致していて良いと思う。強制QVGAモードはvoのサブオプションに持ってこようかな。
ぴろさんのバージョンではbvddが解像度変更を行なっている関係からスペシャルカーネルが必須だったけど、今回のは普通に/dev/fb0経由で解像度変更を行なうようにしたのでノーマルカーネルでも動くはず。bvddに解像度変更のコードを入れるのは初期の頃に考えたけど、lcdtg_lcd_change()が色々なところに依存していて諦めた覚えがある。たぶんこのアプローチで正解。
12:44
ここまでMPlayerをかなりの回数起動したが、明らかに自分のコーディングミスによるもの以外でのフリーズ/ホワイトアウトは起こっていない。*2 動作報告でも安定して動いているようで、こりゃ完全に安定したとみて良いようですな。バンザイ。