Camera实战案例分析-拍照图像较预览画面上移

本文来自公众号“小驰干货铺”的分享。

一、问题描述

第三方相机 App 打开相机进行拍照,发现保存下来的照片和预览画面比较,拍照照片有上移。

原因分析

在分析具体问题之前,我们先来看下camera拍照相关流程。

1)Camera App 拍照流程图

如下图所示,是正常的camera app拍照流程。相机拍照是由app上层去触发,底层对yuv数据进行编码,编码后的jpeg数据通过回调返回给上层。上层接收到回调的buffer数据后,进行数据的保存操作。

Camera实战案例分析-拍照图像较预览画面上移

2) Qcom camx框架图

我们平台,采用的高通的camx框架,如下图所示,是camx框架的核心部分。针对拍照相关的,我们可以看到,高通ISP是有专门的JPEG模块处理拍照数据。

Camera实战案例分析-拍照图像较预览画面上移

3)查看app配流情况 && Dump Yuv数据

通过前面简单的流程图,我们对qcom 平台的拍照流程应该有了大概的了解。回到我们这个问题上来,拍照和预览的画面不一致,那我们需要查看下app的配流情况,以及分别dump yuv数据对比查看原始数据是否存在异常。

i、日志上搜索关键字configure_stream,先看下app的配流情况。如下图所示,我们可以看到app申请了一路预览流1920 * 1080,还有一路拍照流1920 * 1080。

从这个日志上,我们可以明确,底层预览和拍照都是出的1920 * 1080的数据,正常2者不应该会有差异。我们需要进一步dump数据来确认。

Camera实战案例分析-拍照图像较预览画面上移

ii、通过下面命令,我们dump下IPE的输入端yuv数据。dump的数据保存在/data/vendor/camera/路径下。

adb root & adb remount
adb shell setproppersist.vendor.camera.autoImageDump 1
adb shell setproppersist.vendor.camera.autoInputImageDumpMask 0x02

4) 把/data/vendor/camera路径下的yuv数据pull出来,使用yuv查看工具打开yuv数据进行查看。

我们发现,dump出来的yuv数据,和app拍照保存到本地的jpeg图像是一致的。这个也就可以确认,底层回调的数据是没有问题的。

5) 底层回调的数据没有问题,framework层不会对camera的数据进行其他的处理。所以这个问题最终定位是app显示适配的问题。app预览的显示,会根据当前设备的实际尺寸,以及camera支持的分辨率,来做对应的预览显示适配逻辑。不同的app,处理逻辑可能也会不一样。

三、解决对策

这个问题最终定位是第三方相机的问题。这个问题转给专门和第三方APP对接的同事进行处理。让第三方app针对产品进行重新的适配。

四、经验总结

针对第三方相机的问题,我们可以按照下面思路流程来一步步进行确认。

首先是需要和测试同事沟通清楚,明确问题现象,是否有指定的问题复现路径;

针对问题现象,有一个大概的初步判断,初步猜测有可能引起问题的原因;

抓取相关日志进行分析,结合问题场景,日志上确认相关流程是否正常;

针对fov不一致、变形等类似问题,需要dump 相关yuv数据进行确认,查看原始数据是否正常;

结合软件流程和相关日志,对比原始数据,基本能定位到问题原因。

Camera实战案例分析-拍照图像较预览画面上移

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐