我有一个示例应用程序(完整源代码),它使用 MediaCodec 对相机帧进行编码,同时在 GLSurfaceView 上显示它们。
Systrace 确认每秒进行 30 次绘图调用:
但是,屏幕记录(.mp4、YouTube)显示明显的帧速率要低得多。
简而言之,我的编码和显示循环执行以下操作:
- 使 MediaCodec Surface 输入 EGL Context 当前
- 将相机帧绘制到 MediaCodec EGL 表面
- 使 GLSurfaceView EGL Context 当前
- 将相同的相机帧绘制到 GLSurfaceView
在 Galaxy Nexus LTE 和 Nexus 7(均采用 AOSP 4.4)上,应用程序按预期运行。到目前为止,只有 Nexus 5 在绘制到屏幕的帧数和明显的帧数之间存在这种差异......
我祈祷我没有疯。