1、问题背景
基于之前安卓平台的一个项目,客户有反馈过一个 Camera app 预览的效果,和录像效果不一致的问题。
这里的预览是指打开 Camera app 后直接出图的效果;录像的效果则是指打开 Camera app 开启录像功能,录制一段视频,再用设备自带的播放器去看录制的视频的效果。
有
发现录像的
效果要
比预
览的效果
锐度要高。
2、问题分析
关于这个问题,上周也有写过类似的一篇文章分析不同 app 之间画质差异的原因。有些排查过程是通用的,如下是关于这个问题的排查过程。
a、预览和录像是否走的是同一路流?分别 dump下预览和录像的 yuv 来对比看看效果。
预览出的是1080P,录像也是1080P,走的是同一路流。分别 dump了录像和预览的 yuv,对比看效果是一致的,所以就不是ISP处理之前的问题,需继续向后排查。
b、是否是显示的问题。
我这里的验证方式是用我们自己的开发板+Camera 模组来分析问题的,通过HDMI接到1080P 的显示器上出图,通过截屏比较预览的效果和录制的效果;
1>、是有发现在
同样的显示器上播放录制的视频,清晰度要比预览画面要好一些,如下图所示。
2>、
通过
上一步,
分
析
了
预览和录像的yuv效果是一致的,所以接着对比看了预览的yuv和预览的截屏,发现预览的yuv是要比实际的预览结果要好。
所以就怀疑是从yuv 到显示这里的什么处理,导致的清晰度损失了。后面注意到预览截屏下来是4K的分辨率,因为此Android版本的SDK是默认支持4K UI的。
所以关于预览的话,
是把1080P的数据显示在4K UI上,也就是1个实际的像素数据最后是用4个像素来显示,而录像是直接1080P显示的,所以视觉上看起来预览的清晰度度是要差一点的,是正常的。关闭4K UI后比较,预览和录像的效果是一致了。
但客户那边的设备用的是mipi 屏,UI的分辨率是1920x1200,所以并不是4K UI的预览导致的差异。
c、是否是 pq 导致的效果差异。
这里的 pq 是指 picture
quality,是指专门调屏幕画质的,也有色温、锐度、亮度的处理模块和参数的调整,和我们调 camera 画质的工作类似。
后面和客户再次确认了下问题,是在设备上播放录制的视频锐化比预览要高很多,视频导出来在PC上去播放又是正常是。
我这边就用客户的版本、客户的机器、细节颜色多的场景下,复现了下反馈问题。
确实播放录制的视频锐化强度比预览要明显很多,颜色也鲜艳了很多,但用的同样的SDK版本,在我们开发板上就没有这个问题。
这里就找到pq组的同事帮忙分析了下,在客户的设备上播放视频时,执行下指令关闭pq锐化的处理,效果就正常了很多。
接着是dump了我们开发板设备,和客户端设备的pq参数,参数对比是一样的。后面排查了我们开发板上pq的效果不生效的原因,是因为压根没有配置调用pq参数的驱动,而客户板上是支持的,所以表现有差异。
后续是将pq参数的效果文件进行了修改,bypass了锐化、亮度、颜色等的模块,所以效果就保持一致了。
而预览不受pq的影响,是因为预览走的osd层,osd层不走pq处理的这些模块。
3、问题总结
a、要理解清楚客户报的问题,用同样的设备、固件版本、拍摄环境能去复现到,才好去进一步分析。
对于这个问题,我花了太多时间,去验证我们自己开发板上 4K UI导致的预览清晰度差的问题,而客户明明反馈的是预览正常,播放录像时锐化高。
我想当然的以为播放录像锐化高,就是录像比预览清晰度高。和我们开发板上发现预览清晰度差是一个问题。
b、提出合理的假设,一步步去做验证排查,直到找到问题原因。