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

标签 android performance android-camera preview android-textureview

众所周知,我们可以选择TextureViewSurfaceViewGLSurfaceView 进行android 相机预览。

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

最佳答案

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

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

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

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

如果您想了解有关系统工作原理的更多信息,请参阅 Android Graphics Architecture document .

关于android - 哪个 View 是 android 相机预览的最佳选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771732/

相关文章:

java - 如何在不使用 createChat for android XMPP chat smack api 的情况下接收消息

java - Android Volley 无法返回字符串

java - gc.log写入是异步的吗?将 gc.log 放在 NFS 挂载上安全吗?

java - 在社交媒体上分享之前为照片添加水印

android - Android 上的 Canvas.scale()。重绘全屏

sql - 棘手的 postgresql 查询优化(带排序的不同行聚合)

javascript - 通过 JavaScript 检测资源的 404

Android Camera.takePicture() 有时不返回?

android - 如何使用 android.hardware.camera.external 在 android 中打开 USB 摄像头

Android - Json 数组到带有 OnClick 监听器的 ImageView