|
|
|
@ -68,7 +68,7 @@ int cam_control(int fd, int op_code, void *handle, int size) { |
|
|
|
|
camcontrol.handle_type = CAM_HANDLE_USER_POINTER; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int ret = ioctl(fd, VIDIOC_CAM_CONTROL, &camcontrol); |
|
|
|
|
int ret = HANDLE_EINTR(ioctl(fd, VIDIOC_CAM_CONTROL, &camcontrol)); |
|
|
|
|
if (ret == -1) { |
|
|
|
|
printf("OP CODE ERR - %d \n", op_code); |
|
|
|
|
perror("wat"); |
|
|
|
@ -818,7 +818,7 @@ void cameras_open(MultiCameraState *s) { |
|
|
|
|
static struct v4l2_event_subscription sub = {0}; |
|
|
|
|
sub.type = V4L_EVENT_CAM_REQ_MGR_EVENT; |
|
|
|
|
sub.id = 2; // should use boot time for sof
|
|
|
|
|
ret = ioctl(s->video0_fd, VIDIOC_SUBSCRIBE_EVENT, &sub); |
|
|
|
|
ret = HANDLE_EINTR(ioctl(s->video0_fd, VIDIOC_SUBSCRIBE_EVENT, &sub)); |
|
|
|
|
printf("req mgr subscribe: %d\n", ret); |
|
|
|
|
|
|
|
|
|
camera_open(&s->road_cam); |
|
|
|
@ -1102,22 +1102,26 @@ void cameras_run(MultiCameraState *s) { |
|
|
|
|
if (!fds[0].revents) continue; |
|
|
|
|
|
|
|
|
|
struct v4l2_event ev = {0}; |
|
|
|
|
ret = ioctl(fds[0].fd, VIDIOC_DQEVENT, &ev); |
|
|
|
|
if (ev.type == V4L_EVENT_CAM_REQ_MGR_EVENT) { |
|
|
|
|
struct cam_req_mgr_message *event_data = (struct cam_req_mgr_message *)ev.u.data; |
|
|
|
|
// LOGD("v4l2 event: sess_hdl %d, link_hdl %d, frame_id %d, req_id %lld, timestamp 0x%llx, sof_status %d\n", event_data->session_hdl, event_data->u.frame_msg.link_hdl, event_data->u.frame_msg.frame_id, event_data->u.frame_msg.request_id, event_data->u.frame_msg.timestamp, event_data->u.frame_msg.sof_status);
|
|
|
|
|
// printf("sess_hdl %d, link_hdl %d, frame_id %lu, req_id %lu, timestamp 0x%lx, sof_status %d\n", event_data->session_hdl, event_data->u.frame_msg.link_hdl, event_data->u.frame_msg.frame_id, event_data->u.frame_msg.request_id, event_data->u.frame_msg.timestamp, event_data->u.frame_msg.sof_status);
|
|
|
|
|
|
|
|
|
|
if (event_data->session_hdl == s->road_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->road_cam, event_data); |
|
|
|
|
} else if (event_data->session_hdl == s->wide_road_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->wide_road_cam, event_data); |
|
|
|
|
} else if (event_data->session_hdl == s->driver_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->driver_cam, event_data); |
|
|
|
|
} else { |
|
|
|
|
printf("Unknown vidioc event source\n"); |
|
|
|
|
assert(false); |
|
|
|
|
ret = HANDLE_EINTR(ioctl(fds[0].fd, VIDIOC_DQEVENT, &ev)); |
|
|
|
|
if (ret == 0) { |
|
|
|
|
if (ev.type == V4L_EVENT_CAM_REQ_MGR_EVENT) { |
|
|
|
|
struct cam_req_mgr_message *event_data = (struct cam_req_mgr_message *)ev.u.data; |
|
|
|
|
// LOGD("v4l2 event: sess_hdl %d, link_hdl %d, frame_id %d, req_id %lld, timestamp 0x%llx, sof_status %d\n", event_data->session_hdl, event_data->u.frame_msg.link_hdl, event_data->u.frame_msg.frame_id, event_data->u.frame_msg.request_id, event_data->u.frame_msg.timestamp, event_data->u.frame_msg.sof_status);
|
|
|
|
|
// printf("sess_hdl %d, link_hdl %d, frame_id %lu, req_id %lu, timestamp 0x%lx, sof_status %d\n", event_data->session_hdl, event_data->u.frame_msg.link_hdl, event_data->u.frame_msg.frame_id, event_data->u.frame_msg.request_id, event_data->u.frame_msg.timestamp, event_data->u.frame_msg.sof_status);
|
|
|
|
|
|
|
|
|
|
if (event_data->session_hdl == s->road_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->road_cam, event_data); |
|
|
|
|
} else if (event_data->session_hdl == s->wide_road_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->wide_road_cam, event_data); |
|
|
|
|
} else if (event_data->session_hdl == s->driver_cam.session_handle) { |
|
|
|
|
handle_camera_event(&s->driver_cam, event_data); |
|
|
|
|
} else { |
|
|
|
|
printf("Unknown vidioc event source\n"); |
|
|
|
|
assert(false); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
LOGE("VIDIOC_DQEVENT failed, errno=%d", errno); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|