- camera app可以选择SurfaceView/GLSurfaceView/TextureView来作为预览组件,本质上都有一个Surface(BufferQueue)。作为buffer的消费者,使用TextureView时HWUI接收camera buffer,收到后跟普通UI通过GPU合成到一起,作为一个layer送给Surfaceflinger去显示;SurfaceView则是camera service把buffer直接送给SurfaceFlinger(预览buffer不过app进程),SurfaceFlinger将图送给display driver去显示。
- 预览buffer的size需要app去手动指定,首先app要决定宽高比是全屏/4:3/16:9显示,然后根据屏幕大小,宽高比,和camera支持的预览size来选择宽度最接近屏幕宽度的size作为预览size(竖屏情况下),然后通过api设置给预览组件。Surface texture.setDefaultBufferSize或者Surface holder.setFixedSize