error log:
E/mm-camera( 809):
E/mm-camera( 809):
I/mm-camera( 809):
E/mm-camera( 809):
E/mm-camera( 809):
E/mm-camera( 809):
E/mm-camera( 809):
修改方案:
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/isp2/common/isp_defs.h
#define MAX_STATS_BUFFERS 定义值改大。尝试继续复现
_______________________________________________________________________________
kernel error log:
[ 539.998481] msm_ispif_reset_hw: VFE0 reset wait timeout
[ 540.498414] msm_ispif_reset_hw: VFE0 reset wait timeout
[ 540.498860] msm_ispif_read_irq_status: VFE1 pix0 overflow.
[ 540.498874] msm_ispif_read_irq_status: VFE1 rdi0 overflow.
[ 540.498885] msm_ispif_read_irq_status: VFE1 rdi1 overflow.
修改方案:
kernel/msm-3.18/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
修改:ispif->reset_complete[VFE0], msecs_to_jiffies(500)
ispif->reset_complete[VFE1], msecs_to_jiffies(500) 等待时间修改
______________________________________________________________________________
error log:
07-28 18:02:11.463 I/mm-camera( 2618):
07-28 18:02:11.464 I/mm-camera( 2618):
07-28 18:02:11.465 E/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/QCamera ( 530):
I/mm-camera( 2618):
E/mm-camera( 2618):
I/QCamera ( 530):
I/mm-camera( 2618):
I/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
E/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
I/mm-camera( 2618):
E/mm-camera( 2618):
原因是拍照的过程中ISP一直没有数据返回,后续close camera时出现crash
解决patch:
diff --git a/mm-camera2/media-controller/mct/stream/mct_stream.c b/mm-camera2/media-controller/mct/stream/mct_stream.c
index 6335b57..0fa8e65 100755
--- a/mm-camera2/media-controller/mct/stream/mct_stream.c
+++ b/mm-camera2/media-controller/mct/stream/mct_stream.c
@@ -2771,8 +2771,6 @@ boolean mct_stream_metadata_ctrl_event(mct_stream_t *stream,
case MCT_EVENT_CONTROL_STREAMON: {
ret = mct_stream_find_bfr_mngr_subdev(
&stream->metadata_stream.buf_mgr_dev_fd);
- pipeline->offline_meta.buf_mgr_fd =
- stream->metadata_stream.buf_mgr_dev_fd;
if (ret == FALSE) {
CLOGE(CAM_MCT_MODULE, "failed to find buffer manager subdev");
break;
@@ -2805,6 +2803,7 @@ boolean mct_stream_metadata_ctrl_event(mct_stream_t *stream,
}
stream->state = MCT_ST_STATE_IDLE;
close(stream->metadata_stream.buf_mgr_dev_fd);
+ stream->metadata_stream.buf_mgr_dev_fd = -1;
mct_bus_t *bus = pipeline->bus;
if (!bus)
@@ -3136,6 +3135,12 @@ static boolean mct_offline_metadata_ctrl_event(mct_stream_t *stream,
case MCT_EVENT_CONTROL_STREAMON: {
/* Spawn new thread for offline metadata collection */
if (pipeline->offline_meta.stream_on_cnt == 0) {
+ ret = mct_stream_find_bfr_mngr_subdev(
+ &pipeline->offline_meta.buf_mgr_fd);
+ if (ret == FALSE) {
+ CLOGE(CAM_MCT_MODULE, "failed to find buffer manager subdev");
+ break;
+ }
ret = mct_spawn_thread(mct_offline_metadata_thread, pipeline,
"CAM_MctOffMeta", PTHREAD_CREATE_DETACHED);
}
@@ -3166,12 +3171,16 @@ static boolean mct_offline_metadata_ctrl_event(mct_stream_t *stream,
CLOGE(CAM_MCT_MODULE, "offline_meta_queue is null");
}
pthread_mutex_unlock(&pipeline->offline_meta.offline_meta_queue_lock);
+ if (pipeline->offline_meta.buf_mgr_fd >= 0) {
+ close(pipeline->offline_meta.buf_mgr_fd);
+ pipeline->offline_meta.buf_mgr_fd = -1;
+ }
/* Signal Offline meta thread */
pthread_mutex_lock(&pipeline->offline_meta.offline_meta_mutex);
pthread_cond_signal(&pipeline->offline_meta.offline_meta_cond);
pthread_mutex_unlock(&pipeline->offline_meta.offline_meta_mutex);
- }
+ }
pipeline->offline_meta.stream_on_cnt--;
}
break