私たちはAndroidプレビュー機能を利用したプロジェクトに取り組んでいます。利用可能な最大解像度(現在は1600 x 1200)でプレビューをキャプチャしています。アンドロイドプレビューフレームを30FPSで保存する最も良い方法は何ですか?
プレビューの各フレームをセカンダリストレージに保存する必要があります。 OnPreviewFrame
は30FPS(約30ミリ秒/フレーム)でプレビューできますが、コードを追加してデータを保存すると、FPSが制限されます。
は、これまでテスト済み:メインスレッドで
両方
OnPreviewFrame
と保存JPEGを。この場合、保存にはおよそ250〜260ミリ秒かかります。したがって、FPSは5-6になります。OnPreviewFrame
メインスレッドではJPEGを別のスレッドに保存します。したがって、保存するために各フレームに対して新しいスレッドが作成されます。メモリ内のスレッド(それぞれがクオリティファクタ60に対して約450〜500ミリ秒かかる)が発生すると、メモリが解放されると、プレビューにギャップが発生します。
したがって、すべてのフレームを30FPSで保存できる回避策はありますか?
オプション2は実現可能なようですが、オプション1をどのように実装できますか?フレームバッファはAndroidシステムによって割り当てられ、参照は私たちと共有されます。 –
@AmberBeriwal、オプション1あなたのメモリにデータをコピーします。オプション2、私が誤っていない場合は、addCallbackBufferを使用してカメラに独自のメモリを提供するオプションがあります。 addCallbackBufferは、あなたをフレームプールとして扱うことができます。 – feldi
OK、addCallbackBufferとThreadPoolで確認します –