小编Sam*_*598的帖子

Android MediaCodec eglSwapBuffer 在异步模式下阻塞 GPU

我有一个视频效果应用程序,我使用 OpenGL 绘制到帧缓冲区对象,然后将生成的纹理绘制到显示器,然后是 MediaCodec 输入表面(如果应用程序正在编码)。

我最初在同步模式下为 API 18 编写了编码器(基于大片示例)。我最近将它切换到 API 21 和异步模式。

它可以很好地录制视频,我相信我已经正确设置了所有内容。然而,对 eglSwapBuffers 的调用似乎会导致帧速率显着下降。

如果我删除所有其他 OpenGL 调用,它会运行得更好,但我渲染的东西并不那么昂贵(它可以每帧渲染好多次)。更改编码器设置(即从 640x360 @ 2Mbps 到 1920x1080 @ 16Mbps)几乎没有区别。

唯一使它运行得更快的是删除对 eglSwapBuffers 的调用(它将缓冲区数据发送到编码器)。

我的理解是输出缓冲区不会像以前那样阻塞异步模式下的调用。我错了吗?是否有调用渲染器的首选方法,或异步在单独线程上渲染的方法?

任何关于从哪里开始的帮助或想法将不胜感激,谢谢!

android android-mediacodec

3
推荐指数
1
解决办法
685
查看次数

标签 统计

android ×1

android-mediacodec ×1