【发布时间】:2017-01-03 11:02:28
【问题描述】:
我有一个视频效果应用程序,我使用 OpenGL 绘制到帧缓冲区对象,然后将生成的纹理绘制到显示器,然后如果应用程序正在编码,则绘制 MediaCodec 输入表面。
我最初是在同步模式下为 API 18 编写编码器(基于大片示例)。我最近将它切换到 API 21 和异步模式。
它可以很好地录制视频,而且我相信我已经正确设置了所有内容。但是,似乎调用 eglSwapBuffers 会导致帧速率显着下降。
如果我删除所有其他 OpenGL 调用,它会运行得更好,但我渲染的内容并不那么昂贵(它可以每帧多次渲染)。更改编码器设置(即从 640x360 @ 2Mbps 到 1920x1080 @ 16Mbps)几乎没有区别。
唯一让它运行得更快的是删除对 eglSwapBuffers 的调用(它将缓冲区数据发送到编码器)。
我的理解是输出缓冲区不会像以前那样阻塞异步模式下的调用。我错了吗?有没有首选的调用渲染器的方法,或者在单独的线程上异步渲染的方法?
我们将不胜感激任何帮助或从哪里开始的想法,谢谢!
【问题讨论】:
-
最后的解决方案是什么?
标签: android android-mediacodec