VirtualDisplay屏幕闪烁

时间:2016-03-01 22:36:10

标签: android opengl-es

前一阵子我问this question并且@fadden很慷慨地给我一个答案。所以,现在我有一个VirtualDisplay正在使用我创建的中间人Surface,当SurfaceTexture支持Surface收到onFrameAvailable来电时,我进行OpenGL调用以将该纹理绘制到EGLSurface,该EGLSurface是从Surface生成的MediaCodec创建的。呼。

所有这一切都在Service中运行(所以它在后台徘徊)。一切正常,但我偶尔会在某些设备上闪烁屏幕。闪烁不会传递给发送到MediaCodec的数据,因此它似乎只是屏幕的问题。闪烁还会导致Nexus设备上的“软按钮”消失/重新出现在Nexus设备上(但即使屏幕上的按钮消失,软按钮也会出现在MediaCodec的输出中。

如果我换出我的中间人Surface,以便VirtualDisplay只输出MediaCodec的输入Surface,那么闪烁发生的次数会少得多(发生一次)大约50分钟左右,每秒闪烁几次。在某些应用程序中,闪烁似乎也比其他应用程序(Google地图是一个好罪魁祸首)或某些UI在应用程序中出现/消失时发生。

任何人都对在这种情况下可能导致闪烁的原因以及只有一些设备(我见过)有任何想法?如果有帮助,我可以发布一些源代码。

编辑:所以,我发现,至少在我的Nexus 5x上,如果我转到“开发者选项”并启用“禁用硬件覆盖”(文本说“始终使用GPU进行屏幕合成”),屏幕闪烁消失了。显然这是一种解决方法,但如果可能的话,我想以编程方式解决问题。

0 个答案:

没有答案