使用zoom预览出图和系统相机预览出图,画质不一样的问题分析

1、问题背景

最近在基于 Android 的平台调试一款摄像头,客户有反馈一个问题,系统自带的 Camera2 app 预览出图是正常的,但用 Zoom app 打开摄像头,出图画面存在畸变、锯齿、过曝的问题,现象如下图所示。

使用zoom预览出图和系统相机预览出图,画质不一样的问题分析_第1张图片

2、问题分析

这里是存在3个问题,畸变、锯齿、过曝,我们依次来做分析。

a、关于畸变

首先我们是针对不同分辨率下做过畸变校正的,预览、录像、拍照分别对应的是三路流,出不同的分辨率。预览是1080P、录像是4K、拍照是全尺寸,所以查看一下用 Zoom 出图时此时走的是哪路流,出的分辨率是多少就可以了(我是通过dump 实时的yuv,可以看到输出的yuv的尺寸来确定的)。

有确认到用 Zoom 出图时,出的是 640x480 的分辨率,他是从全尺寸直接 resize 成 640x480 的 ,我们未做过这个分辨率下的畸变校正,所以增加一组 640x480 下的畸变校正参数即可解决。

这里要提一下,关于畸变校正为什么不可以直接在 sensor 出来的原始尺寸上去做,而是要分别基于从原始数据源分出的预览、录像、拍照三路上单独去做呢?如果是基于原始尺寸去校正,那之后的 crop、downscale 就不会存在畸变,也不用单独基于每个分辨率去增加畸变参数那么麻烦了(这里的前提是 sensor 只有一组setting,只有一个数据源输出)。 

1>. 一般关于畸变校正是有单独的一个硬件模块去做处理的,目前我们这个平台 ISP 是直接出三路,没办法在中间先过畸变校正的模块。

2>. 另外一点就是 crop /dowscale 之前做,只适合 1080P 这样的尺寸,尺寸太大了,硬件性能会不够(而对于全尺寸的拍照可以做,是因为拍照只是取视频流中的一帧,录像和预览则是实时的数据流都要处理 )。

b、关于锯齿

锯齿的成因有很多,ISP中调试参数的问题、全尺寸到小尺寸resize的处理、camera apk 的处理等等,可以依次一步一步的 dump 数据进行比较,确认是哪个模块的问题,再去做相应的处理,但首先得了解这个视频出流的 pipeline, 都经过了哪些模块,才好去做排查。

但我这里的问题是 Zoom 预览出图是 640x480, 而系统相机 Camera2 预览出图是 1920x1080,这就没啥可比性了, 要用更少的像素来显示同样数据的场景,小分辨率下肯定是会锯齿比较明显,所以这里是正常现象,如果是同分辨率下,存在锯齿的差异,那就要去按出流的 pipeline 去排查原因了。

c、关于过曝

同样的我们要判断 Zoom 出图时走的是哪路流,然后是哪个模块导致的,是 Zoom app 类似自带的美颜效果处理导致的、还是 ISP 当中哪个模块调试参数导致的、还是从全尺寸 resize 到 640x480 的处理导致的。

1>. 首先通过指令确认 Zoom 和系统相机预览时,走的是否是同一路,确认结果是走的同一路。

2>. 场景亮度不变,在固定AE下,分别 dump camera2 预览的截屏和 yuv,及 zoom 预览的截屏和 yuv 来对比亮度结果。

camera2 预览的截屏和 yuv 亮度是一致的。

zoom 的预览截屏和 yuv 亮度是一致的。

camera2 预览的截屏和 zoom 预览的截屏亮度不一致,zoom 预览画面亮度高。

camera2 预览的 yuv 和 zoom 预览的 yuv 亮度不一致,zoom 预览的 yuv 亮度高。

从上面比较结果可知,app 的表现和 yuv 的一致,那就不是 app 的处理导致。但两个尺寸的 yuv 亮度结果不一致那就需要继续往上排查。

3>. 将 camera2 的预览和拍照,都设置成 640x480 输出,分别 dump 640x480 预览和拍照的 yuv,确认下效果。

结果是拍照的 yuv 亮度正常,预览 yuv 亮度过曝,所以问题就是,在分辨率为640x480下,预览这路有问题。

预览和拍照都用的同一套效果参数,且AE固定,场景不变,且1080P 下的预览效果是正常的,那就不大可能是 ISP 调试参数的问题。

只有可能是预览这路从全尺寸 resize 成 640x480 的处理导致的,最后确认结果确时是 resize 处理相关,调整寄存器参数,更新驱动后解决。

3、问题总结

对于基于Android 平台调试 Camera 来说,客户通常会使用到很多第三方的Camera app, 对于不同app 出图效果不一致的问题,可以参考上述过程来做相应排查。

你可能感兴趣的:(ISP调试相关,Camera,图像处理,isp)