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

Jer*_*ONG 2 performance android preview android-camera android-textureview

我们知道,我们可以选择TextureViewSurfaceViewGLSurfaceView来进行Android相机预览。

哪一款是相机预览的最佳选择?我关注的是相机的性能。

fad*_*den 6

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

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

GLSurfaceView 是一个 SurfaceView,带有一些处理 EGL 设置和线程管理的包装类。您无法在接收相机帧的 Surface 上使用 OpenGL ES,因此您会做额外的工作,但没有任何好处。(开销是较小的一次性设置,而不是每一帧,因此您可能无法测量差异。)

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

如果您想了解有关系统如何工作的更多信息,请参阅Android 图形架构文档