今日の作業

7:05

AMRコーデックを有効にする方法が分かった。

- [MPlayer-users] Where is amr_nb code? (SOLUTION)

って、固定小数点演算版がクロスコンパイルに対応してない……。面倒だからとりあえず浮動小数点版でいいや。

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 動作報告でも安定して動いているようで、こりゃ完全に安定したとみて良いようですな。バンザイ。

13:16

今日はここまで。bvddの作業は一通り終わったので、明日はMPlayerをいじろう。vo_bvdd.cはbvddが不安定で真面目に書く気がおこらなかったところだから、これからマトモにしていく。

そいや久しぶりにBetaPlayerのフォーラムを覗いたら、作者さんが夏ごろにLinuxへポーティングするかも、って言ってらした。実現したらMPlayerはお役御免ですな。それまでは頑張ろう。

*1:ドキュメントにflush()を使ってるのはNFSドライバだけって書いてあって不安になる

*2:コーディングミスでしょっちゅうリセットボタンを押してる。電池蓋は開けっぱなし