1

Android のネイティブ ウィンドウを使用して、サーフェス ビューでビデオを表示しています。これが私のコードの一部です。

ANativeWindow_lock(window, &windowBuffer, NULL);
memcpy(windowBuffer.bits, buffer,  size);
ANativeWindow_unlockAndPost(window);

しかし、memcpy には時間がかかりすぎます。ネイティブコードで割り当てられたバッファを直接使用できるように、memcpy を使用しない他の方法はありますか? バッファ内のデータでサーフェス ビューを完全に埋めたいと思います。

4

1 に答える 1

3

サーフェスはバッファーではなく、バッファーのキューです。ディスプレイに送られるものはすべて、ダブルまたはトリプル バッファリングされます。

によって返されるバッファに出力を直接生成できますANativeWindow_lock()。(少なくとも) ダブル バッファリングされているため、前のバッファのロックを解除した直後に次のバッファをロックしてもペナルティはありません。すぐに lock を呼び出して、コンポジターがちょうど終了したフレームを表示するのを防ぐことはできません。

詳細については、Android グラフィックス アーキテクチャのドキュメント、特にこのセクションを参照してください。

于 2015-08-03T02:26:56.557 に答える