マイコン工作実験日記

Microcontroller を用いての工作、実験記録

JPEG伸長とフォトフレーム機能のイメージ

2010-01-11 22:17:53 | MP3プレーヤ
Linux上での動作確認でJPEG伸長に要するメモリ量は把握できたので、今度は実際にLPC2388上にコードを移植してみました。昨年、AT91SAM9260にCMOSカメラをつなげた際に同様の作業をしていますので、その時のインタフェース用コードを流用すればいいだけなので比較的スムーズに作業は終了。もともとlibjpegは移植性を重視した作りになっていますので、移植作業はわりと簡単です。主な作業としては、

  • jconfig.txtをjconfig.hにrenameして、編集。以下の行を追加。
    #define NO_GETENV
    #define MAX_ALLOC_CHUNK 20000
    #define ALLIGN_TYPE long
  • 浮動小数演算を使わないようにjmorecfg.hを編集して、DCT_FLOAT_SUPPORTEDの定義をコメント・アウトする。
  • stdio用のインタフェースであるjdatasrc.cを参考にして、FatFs用のI/Oインタフェースを作成する。
  • vmunix用のメモリ管理インタフェースであるjmemnobs.cを参考にして、メモリプールからの割り当てルーチンを用意する。
  • jerror.cを編集し、エラー出力をTOPPERSのsyslogに変更する。

といったところでしょうか。適宜、必要に応じてヘッダファイル部分を変更したりして、コンパイル、リンクを通します。まずは、デバックコンソールからの操作で展開処理が動くことを確認し、処理時間を測定してみました。まだ、画面への表示はおこなっていません。



アルバム画像のサイズであれば50msかかっていませんから、ほとんど処理時間は気になりません。VGAサイズだとちょっと待つ感じ。最後の1600x1200だと、ハングしたのかと心配になるくらいに長く感じられます。どうやら、フォトフレーム機能での表示にはVGAくらいの大きさが適していそうです。しかし、いずれの場合も画面サイズに合わせてスケーリングした結果、メモリは30KBも使わないことが確認できました。これなら、問題なさそうです。

表示サイズのスケーリングですが、上の処理例からもわかるように表示サイズを240x180に制限することにしました。実際のLCDの画面サイズは 320x240ですが、すでに画面を縦置き(portrait)で使うことにしてしまっているので、landscapeのVGAデジカメ画像を1/2にスケールしたのでは、表示が90度回転してしまうことになります。90度回転して表示させる処理は、LCDの表示モードを設定することで簡単に実現できるのですが、やはり見にくくていけません。そこで、画像幅を240ピクセルとすることで、縦置き状態で正常に画像を表示させることにします。当然、縦方向が余ってしまうわけですが、時計表示のモードにフォトフレーム機能を持たせることにすれば、余りの部分に時計表示を入れることができ、ちょうど良いと思われます。目標とする表示イメージはこんな↓感じです。