问题: [通过霍尔传感器]频繁打开关闭相机,出现一次相机停止运行
crash log
05-28 11:27:36.363 22431 22431 E AndroidRuntime: java.lang.RuntimeException: Fail to connect to camera service
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.hardware.Camera.<init>(Camera.java:587)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.hardware.Camera.open(Camera.java:412)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at com.xtc.camera.app.widget.cameraview.core.Camera1.onStart(Camera1.java:255)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at com.xtc.camera.app.widget.cameraview.core.CameraController$2.run(CameraController.java:201)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:751)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154)
05-28 11:27:36.363 22431 22431 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:61)
main log
报错原因:130 VIDIOC_MSM_CSID_IO_CFG failed Connection timed out
msm_post_event: Timed out
05-28 11:27:25.779 2944 2944 I input_method: 发送asr.stop事件
05-28 11:27:25.780 411 22688 D mm-camera: c2d_module_start_session:350, info: starting session 2
05-28 11:27:25.780 411 22689 D mm-camera: mct_pipeline_start_session_thread thread_id is 22689
05-28 11:27:25.780 411 22689 E mm-camera-img: module_imglib_start_session:1452 ###Img_Loglevel 0
05-28 11:27:25.785 411 22687 E mm-camera-CORE: af_init: updated HAF func table
05-28 11:27:25.786 411 22687 D mm-camera: gyro_port_init , Enter
05-28 11:27:25.786 411 22687 D mm-camera: gyro_port_init , EXIT
05-28 11:27:25.794 411 22691 D mm-camera: c2d_thread_func:45: c2d_thread entering the polling loop... thread_id is 22691
05-28 11:27:25.797 411 22688 D mm-camera: c2d_module_start_session:428, info: session 2 started.
05-28 11:27:25.935 411 22679 E mm-camera-sensor: csid_open:130 VIDIOC_MSM_CSID_IO_CFG failed Connection timed out
05-28 11:27:25.935 411 22679 E mm-camera-sensor: module_sensor_init_session:499 failed rc -1
05-28 11:27:25.935 411 22679 E mm-camera-sensor: eeprom_close:1114 Enter
05-28 11:27:25.935 411 22679 E mm-camera-sensor: eeprom_close:1129 Exit
05-28 11:27:25.935 411 22679 E mm-camera-sensor: sensor_close:3631 VIDIOC_MSM_SENSOR_CFG failed
05-28 11:27:25.936 411 22679 E mm-camera-sensor: module_sensor_init_session:704 failed
05-28 11:27:25.936 411 22679 E mm-camera-sensor: module_sensor_start_session:814 failed
05-28 11:27:25.936 411 22679 E mm-camera-sensor: module_sensor_start_session:828 failed
kernel log
05-28 11:27:25.873368 <3>[46285.965956] wait_for_completion in msm_csid_reset fail rc = 0
05-28 11:27:25.873374 <3>[46285.965962] msm_csid_init:584 msm_csid_reset failed
·
·
·
05-28 11:27:35.703455 <3>[46295.796043] msm_post_event: Timed out
05-28 11:27:35.706273 <3>[46295.798861] Evt_type=8002000 Evt_id=1 Evt_cmd=0
05-28 11:27:35.710640 <3>[46295.803228] Evt_session_id=2 Evt_stream_id=0 Evt_arg=-1
05-28 11:27:35.716013 <3>[46295.808601] camera_v4l2_open : posting of NEW_SESSION event failed
05-28 11:27:35.722169 <3>[46295.814757] camera_v4l2_open : Line 605 rc -110
报错根源:
static int msm_csid_reset(struct csid_device *csid_dev)
{
int32_t rc = 0;
//写寄存器
msm_camera_io_w(csid_dev->ctrl_reg->csid_reg.csid_rst_stb_all,
csid_dev->base +
csid_dev->ctrl_reg->csid_reg.csid_rst_cmd_addr);
//等待信号量
rc = wait_for_completion_timeout(&csid_dev->reset_complete,
CSID_TIMEOUT);
if (rc <= 0) {
pr_err("wait_for_completion in msm_csid_reset fail rc = %d\n",
rc);
if (rc == 0)
rc = -ETIMEDOUT;
}
return rc;
}
这里
#define CSID_TIMEOUT msecs_to_jiffies(100)
问题在于连接超时超时错误。
解决方案:
#define CSID_TIMEOUT msecs_to_jiffies(100)
改成
#define CSID_TIMEOUT msecs_to_jiffies(500)