2020年1月21日火曜日

TJpgDecでアニメーション

 JPEGファイルを単純に結合して拡張子をAVIとすると、動画ファイルとして扱える。フレームレートを示すパラメータはないから、実装依存になる。WPMだと24fpsくらい?
 このファイルをTJpgDecで読むと、最初の1フレームは問題なく読み込める。
 ただ、JPEGファイルはファイル長が不明だから、TJpgDecは「1ブロック読み込んで終了マーカーが出たらデコードを正常終了、指定長を読めなければ読めた分だけデコードして、終了マーカーが出たら正常終了、出なければ異常終了」みたいな実装になっている。ファイルのマーカー位置をそのままに次のデコード(前処理)を開始すると、開始マーカーを検出できずにフォーマットエラーになる。
 読み出し操作を行うときに、終了マーカー(FFD9)を検出したらその位置にファイル位置を戻す、というような実装を行っておくと、次に読んだときに開始マーカーが読めるので、次のフレームのデコードを開始できる。

 独自のファイルフォーマットを作って、次のフレームの大きさやフレームレートといったパラメータを保持できるようにすれば、ファイル読み込みは楽かな? でもそういうパラメータをスキャンするのも大変だし、forでFFD9を探したほうが楽そう。
 それにAVIだとフレームレートが不正とはいえ、おおよそどういう動画ファイルなのかを簡単に確認できる利点がある。
 APNGだとフレームレートとかも持てるし、ファイル長の問題もないし、確認もWebブラウザでできるけど、デコーダを作るのが大変そう。とやいえ、あまり凝ったことをやらず、TJpgDecに近い機能だけ実装する、くらいならあまり大規模にはならないかな?


 とりあえず、PC内で連続JPEG動画をデコードするのはできるようになったので、マイコンに実装してみようっと。

0 件のコメント:

コメントを投稿