哪个View是Android相机预览的最佳选择?

时间:2015-06-11 04:43:39

标签: android performance android-camera preview android-textureview

众所周知,我们可以为Android相机预览选择 TextureView SurfaceView GLSurfaceView

哪一个是相机预览的最佳选择?我专注于相机的性能。

2 个答案:

答案 0 :(得分:4)

从性能角度来看,SurfaceView是赢家。

使用SurfaceView,帧来自摄像机,并且无需复制即可转发到系统图形合成器(SurfaceFlinger)。在大多数情况下,任何缩放都将由显示处理器而不是GPU完成,这意味着它们不是扫描像素一次以进行缩放而是再次扫描,而是仅扫描一次。

GLSurfaceView是一个带有一些处理EGL设置和线程管理的包装类的SurfaceView。您无法在接收相机框架的Surface上使用OpenGL ES,因此您无需执行额外的工作。 (开销是次要的一次性设置,而不是每帧设置,因此您可能无法衡量差异。)

TextureView接收SurfaceTexture中的帧作为"外部" OpenGL ES纹理,然后使用GLES将它们渲染到应用程序的UI表面。缩放和渲染由GPU执行,然后将结果转发到SurfaceFlinger。这是最慢的选项,但也是最灵活的视图。

如果您想了解有关系统运作方式的更多信息,请参阅Android Graphics Architecture document

答案 1 :(得分:0)

" SurfaceView在Android Windows系统中创建一个新窗口。它的优点是,如果SurfaceView被刷新,则只刷新此窗口。如果你另外更新UI元素(在windowsystem的另一个窗口中),那么两个刷新操作都会阻止它们(特别是当ui绘图是硬件支持时),因为opengl无法正确处理多线程绘制。

对于这种情况,使用TextureView可能会更好,因为它不是Android Windows系统的另一个窗口。因此,如果刷新View,则所有UI元素也会刷新。 (可能)一切都在一个线程中。

希望我能帮助你们中的一些人! " 来源:stackoverflow.com

GLSurfaceView是一个带有包装类的SurfaceView,可以为您完成所有EGL设置和线程间消息传递。

它完全取决于你使用的东西..它们各有利弊:)

相关问题