android– 在Nexus 5上的GLSurfaceView帧率问题

概述我有一个示例应用程序(fullsource),它使用MediaCodec编码相机帧,同时在GLSurfaceView上显示它们.Systrace确认每秒进行30次绘图调用:但是,屏幕记录记录(.mp4,YouTube)显示明显的帧速率要低得多.简而言之,我的编码&显示循环执行以下 *** 作:>使MediaCodecSurface输入EGL上下文当前

我有一个示例应用程序(full source),它使用MediaCodec编码相机帧,同时在GLSurfaceVIEw上显示它们.

Systrace确认每秒进行30次绘图调用:

但是,屏幕记录记录(.mp4,YouTube)显示明显的帧速率要低得多.

简而言之,我的编码&显示循环执行以下 *** 作:

>使MediaCodec Surface输入EGL上下文当前
>将相机框架绘制到MediaCodec EGL表面
>使GLSurfaceVIEw EGL上下文成为当前
>将相同的相框绘制到GLSurfaceVIEw

在galaxy Nexus LTE和Nexus 7(均采用AOSP 4.4)上,应用程序按预期执行.到目前为止,只有Nexus 5在屏幕上绘制的帧数与明显的帧数之间存在差异……

我祈祷我不是疯了.

解决方法:

我能够复制这个行为,我的GL向导办公室伙伴找出了问题所在.

基本上,其中一个EGL上下文没有注意到纹理内容已经改变,因此它不断渲染旧数据.我们认为它偶尔会有更新,因为它有一组循环的缓冲区,所以最终它会重新使用你正在查看的缓冲区.

我能够通过更新纹理渲染器类来修复我的代码中的问题,更改此:

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);

对此:

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);

取消绑定和重新绑定会导致驱动程序选择正确的缓冲区.

总结

以上是内存溢出为你收集整理的android – 在Nexus 5上的GLSurfaceView帧率问题全部内容,希望文章能够帮你解决android – 在Nexus 5上的GLSurfaceView帧率问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存