Camera 实战案例分析

Camera实战案例分析--58同城app,相机打开黑屏


【问题现象】
 58同城app,在自研产品上,相机打开出现黑屏

【分析】

logcat日志里面,过滤搜索下 Camera3-Device,我们先看下camera的流程(也可以过滤搜索其它关键字)。

如下面日志所示,我们能看到,相机在打开之后,又快速的关闭了。

这个日志至少能确认,相机是能打开的,是打开后遇到了异常。

Line 8462: 09-13 15:38:40.852 I/Camera3-Device( 1407): initialize: Initializing HIDL device for camera 0Line 8656: 09-13 15:38:40.939 I/Camera3-Device( 1407): hwMapToStreamRotation: streamRotation is 0Line 8657: 09-13 15:38:40.939 I/Camera3-Device( 1407): hwMapToStreamRotation: streamRotation is 0Line 9932: 09-13 15:38:41.313 D/Camera3-Device( 1407): Set real time priority for request queue thread (tid 12116)Line 9934: 09-13 15:38:41.313 I/Camera3-Device( 1407): prepareHalRequests: UpdateFpsRange, sceneModeEntryValue : 0Line 9972: 09-13 15:38:41.342 I/Camera3-Device( 1407): prepareHalRequests(5522) captureIntent change, request size(1), i(0), intent(1), frameNum(0)Line 10310: 09-13 15:38:41.379 I/Camera3-Device( 1407): flush: E hal flush.Line 10945: 09-13 15:38:41.394 I/Camera3-Device( 1407): flush: XLine 10964: 09-13 15:38:41.441 I/Camera3-Device( 1407): deleteStream(), delete stream: 0, 0xb40000795058d010Line 10969: 09-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream: Camera 0: Deleting stream 0, return: 0Line 10970: 09-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream(), delete stream: 1, 0xb400007950593be0Line 10972: 09-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream: Camera 0: Deleting stream 1, return: 0Line 10974: 09-13 15:38:41.442 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 10978: 09-13 15:38:41.442 I/Camera3-Device( 1407): close: E hal close.Line 11233: 09-13 15:38:41.655 I/Camera3-Device( 1407): close: XLine 11236: 09-13 15:38:41.655 I/Camera3-Device( 1407): disconnectImpl: X, cameraId: 0Line 11257: 09-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 11258: 09-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: X, device has been disconnected before.Line 11263: 09-13 15:38:41.665 I/Camera3-Device( 1407): ~Camera3Device: Tearing down for camera id 0Line 11264: 09-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 11265: 09-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: X, device has been disconnected before.
在相机关闭的日志,往上翻,我们能看到cameraserver这边有下面的异常。
这个异常信息告诉我们,app下发了auto 的flash mode,而我们的设备,不支持闪光灯,所以导致参数下发异常。
我们再执行下adb shell dumpsys media.camera > camera.txt,看下flash相关的meta信息。
如下所示,可以确认我们的设备是不支持flash的。
综上,这问题的原因我们就找到了。大家遇到类似的问题现象,也可以用类似的思路来分析排查问题。
那这个问题,该如何解决呢?
这个问题,是在framework层就被拦截了,出现了异常。三方的app我们没法去修改,那么我们可以从framework层来修改,针对这个app,在framework层,对下发的flash mode,强制进行修改。
这也提醒我们,在开发相机app的时候,最好是先查询下相机支持的能力,然后再下发正确的参数请求。
《更多交流,欢迎加入知识星球》
————————————————

推荐阅读:

关于博主 

采用v4l2loopback来实现 虚拟Camera

Camera基础及一些基本概念

Android Camera 学习路线 | 个人推荐

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

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

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

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



欢迎扫码关注「小驰行动派」公众号 10 年Camera开发 | Camera技术干货 | 行业洞察 | Camera实战分享
小驰行动派公众号 扫一扫关注
分享到: 复制链接
← 上一篇 采用v4l2loopback来实现 虚拟Camera 下一篇 → Android Camera 学习路线 | 个人推荐

相关文章

推荐课程

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

评论 (0)

暂无评论,快来抢沙发吧