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);
    }
}
Ejemplo n.º 2
0
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);
    }
}