カメラ フレームを GLSurfaceView に表示しながら MediaCodec でエンコードするサンプル アプリケーション (完全なソース) があります。
Systrace は、毎秒 30 回の描画呼び出しが行われていることを確認します。
ただし、スクリーンレコードの記録 ( .mp4、YouTube ) は、見かけのフレームレートがかなり低いことを示しています。
簡単に言えば、私のエンコードと表示のループは次のことを行います。
- MediaCodec Surface 入力 EGL コンテキストを現在の状態にします
- カメラ フレームを MediaCodec EGL サーフェスに描画します
- GLSurfaceView EGL コンテキストを現在の状態にします
- 同じカメラ フレームを GLSurfaceView に描画します
Galaxy Nexus LTE および Nexus 7 (どちらも AOSP 4.4 を使用) では、アプリケーションは期待どおりに動作します。これまでのところ、Nexus 5 だけが、画面に描画されるフレーム数と見かけのフレーム数との間にこの不一致を経験しています...
私が狂っていないことを祈ります。