mt6739 Android P上淘宝或支付宝,三方应用使用api1来openCamera预览变形或预览黑屏,无法连接问题

之前在工作中碰到过两个这样的问题:
【相机】进入淘宝主页,点击左上角的扫一扫进入后界面显示黑屏,点击搜索条右侧的相机小图标进入提示:开启摄像头失败(附图 附log)
【相机】使用支付宝调用相机拍摄小视频,提示:无法连接到相机,请检查相机权限(附图附log)

当时刚开始接入P版本的系统源码,应该也是系统版本不稳定造成的。

通过分析log发现,淘宝/支付宝启动camera,使用的是camera app1:

12-03 05:49:46.173 I/CameraService(  478): CameraService::connect call (PID -1 "com.taobao.taobao", camera ID 0) for HAL version default and Camera API version 1

在看到打印出来的Parameter参数,预览size 1280 x 720在底层是不支持的,所以导致setParameters failed:

12-03 03:05:27.902 E/Camera2-Parameters(  478): set: Requested preview size 1280 x 720 is not supported
12-03 03:05:27.902 W/System.err(13523): java.lang.RuntimeException: setParameters failed
12-03 03:05:27.907 W/System.err(13523): 	at android.hardware.Camera.native_setParameters(Native Method)
12-03 03:05:27.908 W/System.err(13523): 	at android.hardware.Camera.setParameters(Camera.java:2125)
12-03 03:05:27.908 W/System.err(13523): 	at c8.STWLu.openCameraInternal(CameraThread.java:124)
12-03 03:05:27.908 W/System.err(13523): 	at c8.STQLu.runSafe(CameraThread.java:366)
12-03 03:05:27.908 W/System.err(13523): 	at c8.STgMu.run(RunnableEx.java:10)
12-03 03:05:27.908 W/System.err(13523): 	at android.os.Handler.handleCallback(Handler.java:873)
12-03 03:05:27.908 W/System.err(13523): 	at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 03:05:27.908 W/System.err(13523): 	at android.os.Looper.loop(Looper.java:193)
12-03 03:05:27.908 W/System.err(13523): 	at android.os.HandlerThread.run(HandlerThread.java:65)

看到set: Requested preview size 1280 x 720 is not supported,而且是在CameraThread中报出的,所以导致openCamera异常,无法打开显示黑屏。

而针对调用api1来openCamera的应用,底层有设置max preview size,打印出来显示为960x540:

12-03 03:05:27.818 I/Camera2-Parameters(  478): ro.camera.api1.max_preview_size="960x540":

Camera2Client打印出来的preview-size-values参数信息,最大为720x480:

12-03 03:05:27.824 D/Camera2Client(  478): preview-size=720x480;video-size=720x480;preferred-preview-size-for-video=720x480;
preview-size-values=720x480,640x480,352x288,320x240,176x144,720x480,640x480,352x288,320x240,176x144;
video-size-values=1920x1080,720x720,1440x720,1280x720,720x480,640x480,352x288,320x240,176x144,1920x1080,720x720,1440x720,1280x720,720x480,640x480,352x288,320x240,176x144;
preview-format=yuv420sp;
preview-format-values=yuv420p,yuv420sp,yuv420p;
preview-frame-rate=30;
preview-fps-range=5000,30000;
preview-fps-range-values=(15000,15000),(15000,20000),(20000,20000),(5000,30000),(30000,30000);
preview-frame-rate-values=15,20,30;picture-size=4096x3072;
picture-size-values=4096x3072,3456x3456,4896x2448,4096x2304,3264x2448,3840x2160,2560x1920,1920x1088,1280x720,640x480,320x240;

Android P上针对使用camera api1 + hal3 情况下,配置了一个max preview size,底层的这个宏
ro.camera.api1.max_preview_size="960x540"配置的size,而淘宝使用camera api1去设置preview size的值是1280x720,导致1280x720是不被包含在preview-size-values列表中。所以出现问题。

解决方案:
在AOSP/device/mediatek/mt6739 /device.mk中去修改max preview size的配置:

//Camera Frameworks: API1 -> HAL3 
//modify for 1176/1175, form 960x540 to 1280x720
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += ro.camera.api1.max_preview_size=1280x720

这个问题的关键在于,在Android P版本上,谷歌camera hal层已经弃用了hal1.0,不再支持使用。同时在系统camera app中也使用了camera api2。所以mtk在整个系统的适配上应该都是先camera api2 + hal3的组合来做各种兼容(这个问题在系统camera上是无异常的,第三方使用api1.0的应用都存在此问题)。但是没有考虑到还有很多app会使用camera api1来调用相机。
可能是由于当时适配时间紧迫吧,毕竟9.0的mtk camera hal变化有点大。不过这个后面mtk肯定会通过patch去解决的,毕竟如果在系统源码开发中,肯定会碰到这个问题的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值