void mm_camera_msm_evt_notify(mm_camera_obj_t * my_obj, int fd) { struct v4l2_event ev; int rc; mm_camera_event_t *evt = NULL; memset(&ev, 0, sizeof(ev)); rc = ioctl(fd, VIDIOC_DQEVENT, &ev); evt = (mm_camera_event_t *)ev.u.data; if (rc >= 0) { if(ev.type == V4L2_EVENT_PRIVATE_START+MSM_CAM_APP_NOTIFY_ERROR_EVENT) { evt->event_type = MM_CAMERA_EVT_TYPE_CTRL; evt->e.ctrl.evt = MM_CAMERA_CTRL_EVT_ERROR; } switch(evt->event_type) { case MM_CAMERA_EVT_TYPE_INFO: break; case MM_CAMERA_EVT_TYPE_STATS: break; case MM_CAMERA_EVT_TYPE_CTRL: break; default: break; } mm_camera_dispatch_app_event(my_obj, evt); } }
static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb) { ssize_t read_len; int i; mm_camera_sig_evt_t cmd_evt; read_len = read(poll_cb->data.pfds[0], &cmd_evt, sizeof(cmd_evt)); CDBG("%s: read_fd = %d, read_len = %d, expect_len = %d", __func__, poll_cb->data.pfds[0], (int)read_len, (int)sizeof(cmd_evt)); switch(cmd_evt.cmd) { case MM_CAMERA_PIPE_CMD_FLASH_QUEUED_FRAME: mm_camera_dispatch_buffered_frames(poll_cb->data.my_obj, poll_cb->data.ch_type); break; case MM_CAMERA_PIPE_CMD_CH_EVENT: { mm_camera_event_t *event = &cmd_evt.event; CDBG("%s: ch event, type=0x%x, ch=%d, evt=%d", __func__, event->event_type, event->e.ch.ch, event->e.ch.evt); mm_camera_dispatch_app_event(poll_cb->data.my_obj, event); break; } case MM_CAMERA_PIPE_CMD_ADD_CH: if(poll_cb->data.poll_type == MM_CAMERA_POLL_TYPE_CH) { for(i = 0; i < MM_CAMERA_CH_STREAM_MAX; i++) { if(poll_cb->data.poll_streams[i]) { poll_cb->data.poll_fd[poll_cb->data.num_fds + i] = poll_cb->data.poll_streams[i]->fd; } } } poll_cb->data.num_fds += mm_camera_ch_util_get_num_stream(poll_cb->data.my_obj, poll_cb->data.ch_type); poll_cb->data.used = 1; CDBG("Num fds after MM_CAMERA_PIPE_CMD_ADD_CH = %d",poll_cb->data.num_fds); break; case MM_CAMERA_PIPE_CMD_DEL_CH: poll_cb->data.num_fds -= mm_camera_ch_util_get_num_stream(poll_cb->data.my_obj, poll_cb->data.ch_type); poll_cb->data.used = 0; CDBG("Num fds after MM_CAMERA_PIPE_CMD_DEL_CH = %d",poll_cb->data.num_fds); break; case MM_CAMERA_PIPE_CMD_EXIT: default: cm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_MAX); mm_camera_poll_sig_done(poll_cb); break; } }
void mm_camera_msm_evt_notify(mm_camera_obj_t * my_obj, int fd) { struct v4l2_event ev; int rc; mm_camera_event_t *evt = NULL; memset(&ev, 0, sizeof(ev)); rc = ioctl(fd, VIDIOC_DQEVENT, &ev); evt = (mm_camera_event_t *)ev.u.data; if (rc >= 0) { // CDBG("%s: VIDIOC_DQEVENT type = 0x%x, app event type = %d\n", // __func__, ev.type, evt->event_type); switch(evt->event_type) { case MM_CAMERA_EVT_TYPE_INFO: switch(evt->e.info.event_id) { case MM_CAMERA_INFO_EVT_HISTO_MEM_INFO: /* now mm_camear_interface2 hides the * pmem mapping logic from HAL */ mm_camera_histo_mmap(my_obj, evt); return; default: break; } break; case MM_CAMERA_EVT_TYPE_STATS: switch(evt->e.stats.event_id) { case MM_CAMERA_STATS_EVT_HISTO: rc = mm_camera_histo_fill_vaddr(my_obj, evt); if(rc != MM_CAMERA_OK) { CDBG("%s:cannot find histo stat's vaddr (cookie=0x%x)", __func__, evt->e.stats.e.stats_histo.cookie); return; } break; default: break; } break; default: break; } mm_camera_dispatch_app_event(my_obj, evt); } }