マイコン工作実験日記

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

画面キャプチャ

2024-03-06 20:13:47 | DoomPlayer

作業中のNucleo0U575ZI版のDoomPlayerにもようやくと画面のキャプチャ機能を用意しました。青いUSERスイッチを押すことで、SDカード上に画面キャプチャを保存します。今回は、16ビットのパラレル接続LCDを使っていますので、画面情報はLCDのコントローラであるILI9488が持つGRAMから読み出すことにしました。

書き込みの際にはMomory Writeコマンドを使ってRGB565形式の画素データを16ビットで書き込むことができますが、Memory Readコマンドを使っての読み出しの際には常にRGB888形式になるんですね。知らなかった。そのため、画面データ量は480x320x3 = 460,800バイトとなります。STM32H7B3を使っていた時は、JPEGエンコーダを使って圧縮した画像データをSDカードに保存していましたが、STM32U575ZIにはJPEGエンコーダは備わっていません。LibJPEGを使ってソフトで圧縮しようかとも思いましたが、作業領域のSRAMも必要になるので、今回はRGB888形式のままで保存することにしました。ちょっと手間ではありますが、PC側でImageMagickのconvertをつかてJPEG/PNGに変換しています。

画面データの読み出しは、LVGLの画面更新やDOOMの画面更新作業と競合しないように配慮しています。また、SDカードへの書き込み動作は、音楽再生のための読み出し動作とSDカードアクセスが競合するので、一時的に音楽再生を止めてから読み出しを行うことにしています。

DualShock4やDualSense, 8bitdo Zero2をつなげた時には、480x320に拡大して画面表示をしますが、コントローラが接続されていない場合には、320x200で表示することにしてみました。

LVGLを使って作成した画面上のボタンを押すことで操作可能になってはいますが、画面タッチでの操作はかなりキツイ。画面表示も小さくてみづらいし、実用的ではありませんでした。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。