• Android高通 8.1 老化apk打开摄像头花屏问题


    1、最近由于公司VR 3D系统要做双Camera老化测试apk,同时老化4小时需要轮询切换二个摄像头,保证后面camera标定精度数据更准确。

    2、一开始我尝试用之前方案移植过去然后同时打开双摄像头 突然发现花屏 如下图所示

    3、于是一第一时间想到是不是分辨率不兼容或者硬件Camera问题 或者找驱动确认 驱动确认结果2D系统没有问题 ,于是我交叉验证换了一台机器 跟硬件结果还是花屏,因为之前也处理类似的case,于是我自己尝试修改固定的分辨率1280*720 (720P)代码如下(这里只是部门代码github上面也有很多camera源码以及骁龙相机源码 大家可以下载自行研究)

    1. private val mStateCallback2: CameraDevice.StateCallback =
    2. object : CameraDevice.StateCallback() {
    3. override fun onOpened(camera: CameraDevice) {
    4. Log.i(TAG, "StateCallback! onOpened 2")
    5. mCameraDevice2 = camera // 打开成功,保存代表相机的CameraDevice实例
    6. val surfaceTexture = mTextureView2!!.surfaceTexture
    7. surfaceTexture.setDefaultBufferSize(1280, 720) //3264X2448(800万)
    8. val surface = Surface(surfaceTexture)
    9. val previewList = ArrayList()
    10. previewList.add(surface)
    11. try {
    12. // 6.将TextureView的surface传递给CameraDevice
    13. mCameraDevice2!!.createCaptureSession(
    14. previewList,
    15. object : CameraCaptureSession.StateCallback() {
    16. override fun onConfigured(session: CameraCaptureSession) {
    17. try {
    18. val builder =
    19. mCameraDevice2!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
    20. builder.addTarget(surface) // 必须设置才能正常预览
    21. val captureRequest = builder.build()
    22. // 7.CameraCaptureSession与CaptureRequest绑定(这是最后一步,已可显示相机预览)
    23. session.setRepeatingRequest(captureRequest, null, null)
    24. mHandler.removeMessages(CAMERA_RELEASE)
    25. mHandler.sendEmptyMessageDelayed(CAMERA_RELEASE,delayTwoSeconds)
    26. } catch (e: CameraAccessException) {
    27. Log.e(
    28. TAG,
    29. "createCaptureRequest error = " + e.message
    30. )
    31. }
    32. }
    33. override fun onConfigureFailed(session: CameraCaptureSession) {
    34. Log.e(TAG, "onConfigureFailed")
    35. LogUtils.e("Camera2异常")
    36. Toast.makeText(requireContext(),"Camera2异常,请检查设备!", Toast.LENGTH_LONG).show()
    37. }
    38. },
    39. null
    40. )
    41. } catch (e: CameraAccessException) {
    42. Log.e(TAG, "createCaptureSession error = " + e.message)
    43. }
    44. }
    45. override fun onDisconnected(camera: CameraDevice) {
    46. Log.e(
    47. TAG,
    48. "StateCallback! onDisconnected camera.getId() = " + camera.id
    49. )
    50. releaseCamera()
    51. }
    52. override fun onError(camera: CameraDevice, error: Int) {
    53. Log.e(
    54. TAG,
    55. "StateCallback camera.getId() = " + camera.id + " , error = " + error)
    56. LogUtils.e("Camera2异常")
    57. Toast.makeText(requireContext(),"Camera2异常,请检查设备!", Toast.LENGTH_LONG).show()
    58. releaseCamera()
    59. }
    60. }

    4、一开始花屏抓的logcat 错误如下

    5、最后花屏问题解决了 同时为了确认 adb shell dumpsys media.camera 查看当前系统支持输出分辨率列表  如下图所示

    6、安装一个骁龙相机源码 大多数分辨率都是支持的,所以再次确认花屏是分辨率问题导致。

    7、大家如果实在没有办法可以先从大的分辨率 跟小的去试 这样可能验证更快一些,其他不啰嗦了。就是简单记录下自己踩的坑而已。

    转载请注明出处,谢谢!

    8 、总结:

    1、camera 8.1 架构与Camx有很大差异

    2、遇到问题学会交叉编译验证 尤其是这种花屏问题 首先想到硬件或者分辨率的问题(这个需要经验积累)

     

    3、网上查资料以及adb shell dumpsys media.camera确定camera sensor是否正常挂载

    4、多尝试 多修改

  • 相关阅读:
    EasyExcel的使用
    Golang--channel+waitGroup控制并发量
    冥想第九百六十九天
    python基础-数据结构——hash表、线性探测、二重探测、双重哈希、闭散列(分离链接)(拉链法)Python代码实现
    11、Kubernetes核心技术 - Service
    camunda7流程跳转和流程退回的实现方法
    Redis基础篇 高速缓存技术与Redis的庐山真面目 AUTHOR:LBY
    Flink笔记整理(一)
    基于libjpeg-turbo库的jpeg4py安装与使用记录
    codeforces:E. Madoka and The Best University【因数list + 分析拆解 + 公因数特性 + 欧拉函数】
  • 原文地址:https://blog.csdn.net/qq_15950325/article/details/132725466