TextureView、SurfaceView、Texture和Surface的区别

3
我在查看Android的Camera2 API,发现在代码中(https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java#L210),使用了SurfaceViewTextureViewTextureSurface类,但是没有太多解释。

而且即使是文档对这4个类的区别也没有很好的说明。

因此,我的问题是:什么是SurfaceViewTextureViewTextureSurface?它们之间有什么区别?它们用于什么?

非官方的解释将会很有帮助。

谢谢!


https://dev59.com/R2Ag5IYBdhLWcg3wlb1h - undefined
1个回答

7

Surface是一个通用的对象,可以将图像缓冲区绘制到其中,并被许多Android API接受作为输出目标。

其中之一是camera2 API,但EGL、MediaCodec等也可以使用它们。通常可以将可以接受图像缓冲区的具体端点转换为Surface。这些包括一些Android View,媒体类(如用于视频编码的MediaRecorder),用于对底层图形缓冲区进行高效CPU访问的ImageReader类等。

SurfaceView是代表硬件覆盖层表面的Android View;这是将图像缓冲区绘制到屏幕上最有效的方法。由于它表示低级显示原语,所以使用起来有些笨拙;可以从其SurfaceHolder子对象的生命周期回调中获取其Surface。

TextureView是通过GPU绘制图像缓冲区的Android View。它比SurfaceView更灵活,但需要GPU合成才能运行,因此增加了一些延迟和功耗开销。它可以提供一个SurfaceTexture进行绘制。

SurfaceTexture是一个GPU纹理的表示形式,可以在EGL中使用其纹理ID进行渲染,并可以通过其中一个Surface构造函数创建一个Surface,以提供给其他API进行绘制。TextureView使用它作为基于GPU的View。


我喜欢你的答案,因为它有技术性的注释,但实际上,选择TextureView还是SurfaceView意味着什么呢?我不确定我应该选择哪个。在任何Android设备上获得最佳性能是我的特定用例,也就是一个广泛使用的消费者应用程序。 - undefined
今天,我建议你看一下AndroidX的CameraViewfinder:https://developer.android.com/reference/androidx/camera/viewfinder/CameraViewfinder - 它可以处理很多烦人的纵横比大小问题,并根据操作系统版本自动选择TextureView或SurfaceView。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接