gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:41:48 26 4
gpt4 key购买 nike

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

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

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

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

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

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

非常感谢任何关于从哪里开始的帮助或想法,谢谢!

最佳答案

即使在异步模式下,输出缓冲区仍然会阻塞编码器 - 您需要快速处理输出并在调用异步编码器输出回调后将输出缓冲区返回给编码器,否则最终会阻塞输入,就像之前。

同步和异步模式之间的唯一区别是您不需要轮询这些事件,而是获得回调。

关于Android MediaCodec eglSwapBuffer 在异步模式下阻塞 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com