乐于分享
好东西不私藏

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

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

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

【分析】

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

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

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

Line 846209-13 15:38:40.852 I/Camera3-Device( 1407): initialize: Initializing HIDL device for camera 0Line 865609-13 15:38:40.939 I/Camera3-Device( 1407): hwMapToStreamRotation: streamRotation is 0Line 865709-13 15:38:40.939 I/Camera3-Device( 1407): hwMapToStreamRotation: streamRotation is 0Line 993209-13 15:38:41.313 D/Camera3-Device( 1407): Set real time priority for request queue thread (tid 12116)Line 993409-13 15:38:41.313 I/Camera3-Device( 1407): prepareHalRequests: UpdateFpsRange, sceneModeEntryValue : 0Line 997209-13 15:38:41.342 I/Camera3-Device( 1407): prepareHalRequests(5522) captureIntent change, request size(1), i(0), intent(1), frameNum(0)Line 1031009-13 15:38:41.379 I/Camera3-Device( 1407): flush: E hal flush.Line 1094509-13 15:38:41.394 I/Camera3-Device( 1407): flush: XLine 1096409-13 15:38:41.441 I/Camera3-Device( 1407): deleteStream(), delete stream: 00xb40000795058d010Line 1096909-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream: Camera 0: Deleting stream 0, return: 0Line 1097009-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream(), delete stream: 10xb400007950593be0Line 1097209-13 15:38:41.442 I/Camera3-Device( 1407): deleteStream: Camera 0: Deleting stream 1, return: 0Line 1097409-13 15:38:41.442 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 1097809-13 15:38:41.442 I/Camera3-Device( 1407): close: E hal close.Line 1123309-13 15:38:41.655 I/Camera3-Device( 1407): close: XLine 1123609-13 15:38:41.655 I/Camera3-Device( 1407): disconnectImpl: X, cameraId: 0Line 1125709-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 1125809-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: X, device has been disconnected before.Line 1126309-13 15:38:41.665 I/Camera3-Device( 1407): ~Camera3Device: Tearing down for camera id 0Line 1126409-13 15:38:41.665 I/Camera3-Device( 1407): disconnectImpl: E, cameraId: 0Line 1126509-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入门课程视频,可以去找工作了?

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Camera实战案例分析–58同城app,相机打开黑屏

评论 抢沙发

7 + 5 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮