GR-PeachでQuickTime動画を再生するプログラムを作りました.
peach_mov 

動作の様子はこちら

概要

GR-PeachでQuickTime動画を再生するプログラムです.

ソースコードはこちら

https://developer.mbed.org/users/mtkrtk/code/MovPlayer/

Audio CameraシールドとLCDシールドを使っています.

上に載せた動作動画ではAudio Cameraシールドに接続したUSBメモリから動画を読み込み,音声も同シールドのLine Outから出力しています.

その出力を片方だけTDA7052ATで増幅(というより音量調整を兼ねたバッファ)し,スピーカに流し込みました.

Audio CameraシールドがなければGR-PeachのUSB0にUSBメモリを接続し,I²S接続したオーディオDACから音声を出力することもできます.


対応する動画ファイルは以下の条件を満たすもののみです.

コンテナフォーマット QuickTime(拡張子.mov)
映像コーデック Motion Jpeg 480x270 30fps 約6000kbpsまで
音声コーデック Linear PCM 16bit little-endian 44100Hz Stereo

USBメモリのルートに配置されたファイルのみを読み込みます.

また,読み込み速度にはUSBメモリの性能が露骨に効いてきます.

手元にあった中で一番性能の良かったS○ny製(○は伏字)のUSB3.0対応のもので約6000kpbsの映像まで再生できました.

使用方法

動画のエンコード

かなり限られた条件の動画しか再生できないので,適切にエンコードすることが大切です.

ffmpegを使う場合

ffmpegが使える人であれば,次のコマンドで一発です.

$ ffmpeg -i <入力ファイル> -ar 44100 -acodec pcm_s16le -s 480x270 -vcodec mjpeg -q:v 3 -movflags faststart -threads 4 -vf fps=30 <出力ファイル>.mov

ここで,-q:v 3はJpegの品質を指定するオプションで,2を指定すると最高画質,数字が大きくなるごとに低画質になります.

経験則として,3を指定するとちょうどいいファイルが出力されました.

XMedia Recordを使う場合

以前Windowsで使っていた動画変換ソフトXMedia Recordを使った方法も書いておきます.

  1. コンテナフォーマットの指定
  2. container

  3. 映像コーデックの指定
  4. video

  5. 音声コーデックの指定
  6. audio

  7. フレームの設定
  8. frame

  9. 設定確認
  10. format

プログラムの書き込みと実行

上に掲載したソースをmbedのオンラインコンパイラもしくはオフラインのGCCARMでコンパイルし,普通に書き込みます.

USBメモリ上の動画ファイルが列挙されるので,選択して再生します.

再生終了後は動画の最終フレームで停止するので,画面をタッチすれば選択画面に戻れます.

実行すればインターフェイスはなんとなくわかってもらえると思います.

わからなかったら動画をみてください.

USBメモリの扱いは,この辺りを参考にしてください.

https://developer.mbed.org/teams/Renesas/code/GR-PEACH_Audio_WAV/

あと,main.cpp内のマクロUSE_TLV320を消すとSSI5につながったBU9480Fが動作するようにしました.

既知のバグ

以下は存在が確認できているものの原因がよくわからず放置したバグたちです.

  • ときどき世紀末演出が入る(映像が乱れる)
  • ときどき映像にノイズのようなものが乗ったり,数フレーム先が描画されたりします.

  • ファイルによって道路工事をし始める
  • なぜかファイルによっては音声にクリック音が入ります.

    しかも左チャンネルだけ入ったり,よくわかりません.

  • 運が悪いと動作が止まる
  • 運が悪いと動作が停止します.

    さらに運が悪いと連続で停止します.

    しばらくするとなぜか直ります.

  • ファイル名が右に寄ってしまう
  • x座標を0に設定しているにもかかわらず,ファイル名が画面中央あたりに表示されます.

    まさかx軸だけ中心が原点なのかと思い負の数を指定したところ,案の定右に吹き飛びました.

  • オンラインコンパイラだと再生後に砂嵐が発生する
  • オンラインコンパイラ(ARMCC)でビルドすると再生後音声に数秒間のノイズが出力されます.


P.S. okadaさんもこのくらいやってください愛が足りませんよMP3デコーダICなんて甘えたものに頼って割れた音出すだけじゃだめです悔い改めてください