一个Android的用到相机的service程序,在比较少的情况下会出现在系统启动时crash。log显示是在调用ACameraDevice_createCaptureSession时返回错误ACAMERA_ERROR_STREAM_CONFIGURE_FAIL(这个程序是用jni操作相机的),configure的宽高都是0。再看前面mct线程开启camera的模块的地方,正常应该有6个模块,sensor,iface,isp,stats,pproc,imglib,出错的log只开启了5个,少了最重要的sensor模块。

出错的时候mct没有正常开启sensor模块,没看到任何输出,怀疑sensor这个module根本就没有传给mct。camera的daemon入口在/vendor/qcom/proprietary/mm-camera/mm-camera2/server-imaging/server.c的main函数,会调用server_process_module_sensor_init()初始化sensor,调用server_process_module_init()初始化其他module。然后主循环处理HAL事件,如果是camera new session,会一路调用server_process_hal_event()->mct_controller_new()->mct_pipeline_start_session()去开启所有的模块,为每个模块单独启动线程。

server_process_module_sensor_init()会调用sensor自己的初始化函数module_sensor_init()去初始化sensor。server_process_module_sensor_init()只有在把sensor加入module list的时候出错了才会返回FALSE。即使module_sensor_init()失败了,也只是没有把sensor加入到module list,还是会返回TRUE。所以基本上可以确认是sensor初始化失败了。

这应该属于系统出错了,而不是出在我们的程序。再查kernel log,终于发现csid初始化失败了。

09-30 08:06:56.936     0     0 E msm_csid_init: 587 msm_csid_reset failed

默认的csid reset的timeout是100 ms。怀疑硬件上的改动导致reset时间可能不够,偶尔就会初始化失败,增加到500。

更多相关文章

  1. android自定义字体和程序启动时的加载页面
  2. 【 Android(安卓)10 四大组件 】系列 -- Service 的 “ 启动流程
  3. android使用AIDL跨进程通信(IPC)
  4. 聊聊Service(二)
  5. android的TextView的TextWatcher使用
  6. ViewGroup中的onInterceptTouchEvent和onTouchEvent调用时序
  7. Android(安卓)6.0 变更
  8. Android(安卓)Camera HAL浅析
  9. Flutter Android(安卓)Toast Message(flutter访问Android(安卓)T

随机推荐

  1. 【笔记】android捕获触摸事件
  2. Android Initializing a Build Environme
  3. [Android] Android 监听WIFI
  4. Android 学习--ListView 的使用(二)
  5. Unity调用Android语音合成
  6. android Fragment学习
  7. Kotlin 踩坑日记(三) Android Studio 3.0.0
  8. Debugging on my phone (Eclipse, Androi
  9. 微信这些新功能,很实用!
  10. Android ListView异步加载网络图片