int32_t mm_camera_close(mm_camera_obj_t *my_obj) { int i, rc = 0; for(i = 0; i < MM_CAMERA_CH_MAX; i++){ mm_camera_ch_fn(my_obj, (mm_camera_channel_type_t)i, MM_CAMERA_STATE_EVT_RELEASE, NULL); } CDBG("%s : Close Threads in Cam Close",__func__); for(i = 0; i < MM_CAMERA_CH_MAX; i++) { mm_camera_poll_thread_release(my_obj,(mm_camera_channel_type_t)i); } mm_camera_poll_threads_deinit(my_obj); my_obj->op_mode = MM_CAMERA_OP_MODE_NOTUSED; if(my_obj->ctrl_fd > 0) { mm_camera_histo_mmap(my_obj, NULL); rc = close(my_obj->ctrl_fd); if(rc < 0) { /* this is a dead end. */ CDBG("%s: !!!!FATAL ERROR!!!! ctrl_fd = %d, rc = %d", __func__, my_obj->ctrl_fd, rc); } my_obj->ctrl_fd = 0; } if(my_obj->ds_fd > 0) { mm_camera_socket_close(my_obj->ds_fd); my_obj->ds_fd = 0; } return MM_CAMERA_OK; }
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); } }