【Camera开发】疑难杂症记录
camera2+surfacetexture
出现视频流比较模糊问题分析
如果不设置默认大小:
例如
mSurfaceTexture?.setDefaultBufferSize(720,960)
会出现画面糊的很厉害的状况。
原因如下:
当你不主动调用 setDefaultBufferSize(width, height) 时,SurfaceTexture 会使用一个 系统默认的缓冲区尺寸(通常是较小的尺寸,比如手机屏幕分辨率的 1/4,或固定的低分辨率如 320x240,具体依赖系统版本和图像源)。
此时若你的实际渲染需求(比如相机预览分辨率、视频解码分辨率是 720x960)远大于这个默认缓冲区尺寸,就会触发 “强制缩放”,过程如下:
图像源输出高分辨率数据:比如相机按 720x960 输出图像(16:9 或自定义比例);
缓冲区尺寸不足,强制压缩:SurfaceTexture 的默认缓冲区尺寸很小(比如 320x240),无法容纳 720x960 的完整数据,系统会先将 720x960 的图像 压缩到 320x240(像素被合并,细节丢失);
渲染时再拉伸回目标尺寸:最终显示的 TextureView/SurfaceView 可能需要按原 720x960 尺寸显示,系统又会将压缩后的 320x240 图像 拉伸回 720x960(像素被插值放大,边缘模糊)。
简单说:高分辨率图像先被 “压小”(丢细节),再被 “拉大”(补假像素),最终画面自然模糊。