Camera 实战案例分析

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

一、问题描述

第三方相机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 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数据进行确认,查看原始数据是否正常;
结合软件流程和相关日志,对比原始数据,基本能定位到问题原因。
《更多交流,欢迎加入知识星球》
————————————————

推荐阅读:

关于博主 

采用v4l2loopback来实现 虚拟Camera

Camera基础及一些基本概念

Android Camera 学习路线 | 个人推荐

Android Camera开发系列(干货满满)

Camera Hal|如何学习一个新平台

一篇文章带你了解Android 最新Camera框架

学习完Camera入门课程视频,可以去找工作了?



欢迎扫码关注「小驰行动派」公众号 10 年Camera开发 | Camera技术干货 | 行业洞察 | Camera实战分享
小驰行动派公众号 扫一扫关注
分享到: 复制链接
← 上一篇 Android Studio中,使用完全免费的Ai来写APP 下一篇 → Camera实战案例分析-三方相机,扫一扫预览卡顿

相关文章

推荐课程

想系统学习 Camera 开发?看看这些课程

评论 (0)

暂无评论,快来抢沙发吧