一、问题描述
第三方相机App,打开相机进行拍照,发现保存下来的照片和预览画面比较,拍照照片有上移。二、原因分析
在分析具体问题之前,我们先来看下camera拍照相关流程。1)Camera App 拍照流程图
如下图所示,是正常的camera app拍照流程。相机拍照是由app上层去触发,底层对yuv数据进行编码,编码后的jpeg数据通过回调返回给上层。上层接收到回调的buffer数据后,进行数据的保存操作。
2) Qcom camx框架图
我们平台,采用的高通的camx框架,如下图所示,是camx框架的核心部分。针对拍照相关的,我们可以看到,高通ISP是有专门的JPEG模块处理拍照数据。
3)查看app配流情况 && Dump Yuv数据
通过前面简单的流程图,我们对qcom 平台的拍照流程应该有了大概的了解。回到我们这个问题上来,拍照和预览的画面不一致,那我们需要查看下app的配流情况,以及分别dump yuv数据对比查看原始数据是否存在异常。i、日志上搜索关键字configure_stream,先看下app的配流情况。如下图所示,我们可以看到app申请了一路预览流1920 * 1080,还有一路拍照流1920 * 1080。从这个日志上,我们可以明确,底层预览和拍照都是出的1920 * 1080的数据,正常2者不应该会有差异。我们需要进一步dump数据来确认。
ii、通过下面命令,我们dump下IPE的输入端yuv数据。dump的数据保存在/data/vendor/camera/路径下。adb shell setproppersist.vendor.camera.autoImageDump 1adb shell setproppersist.vendor.camera.autoInputImageDumpMask 0x024) 把/data/vendor/camera路径下的yuv数据pull出来,使用yuv查看工具打开yuv数据进行查看。我们发现,dump出来的yuv数据,和app拍照保存到本地的jpeg图像是一致的。这个也就可以确认,底层回调的数据是没有问题的。5) 底层回调的数据没有问题,framework层不会对camera的数据进行其他的处理。所以这个问题最终定位是app显示适配的问题。app预览的显示,会根据当前设备的实际尺寸,以及camera支持的分辨率,来做对应的预览显示适配逻辑。不同的app,处理逻辑可能也会不一样。三、解决对策
这个问题最终定位是第三方相机的问题。这个问题转给专门和第三方APP对接的同事进行处理。让第三方app针对产品进行重新的适配。四、经验总结
针对第三方相机的问题,我们可以按照下面思路流程来一步步进行确认。首先是需要和测试同事沟通清楚,明确问题现象,是否有指定的问题复现路径;针对问题现象,有一个大概的初步判断,初步猜测有可能引起问题的原因;抓取相关日志进行分析,结合问题场景,日志上确认相关流程是否正常;针对fov不一致、变形等类似问题,需要dump 相关yuv数据进行确认,查看原始数据是否正常;结合软件流程和相关日志,对比原始数据,基本能定位到问题原因。
评论 (0)