__camera_client_user_callback(cb_info, cam_msg->recv_msg, cam_msg->event, cam_msg->tfd);
break;
case MUSE_CAMERA_EVENT_CLASS_THREAD_MAIN:
- cam_idle_event = g_new0(camera_idle_event_s, 1);
- if (cam_idle_event == NULL) {
- CAM_LOG_ERROR("t:%d cam_idle_event alloc failed", type);
- break;
- }
+ g_mutex_lock(&g_cam_idle_event_lock);
- cam_idle_event->event = cam_msg->event;
- cam_idle_event->cb_info = cb_info;
+ if (cb_info->is_idle_cb_deactivated) {
+ CAM_LOG_WARNING("cb_info[%p] idle callback deactivated, skip event[%d]",
+ cb_info, cam_msg->event);
+ } else {
+ cam_idle_event = g_new0(camera_idle_event_s, 1);
- strncpy(cam_idle_event->recv_msg, cam_msg->recv_msg, sizeof(cam_idle_event->recv_msg));
- memcpy(cam_idle_event->tfd, cam_msg->tfd, sizeof(cam_idle_event->tfd));
+ cam_idle_event->event = cam_msg->event;
+ cam_idle_event->cb_info = cb_info;
- CAM_LOG_DEBUG("t[%d] add camera event[%d, %p] to IDLE",
- type, cam_msg->event, cam_idle_event);
+ strncpy(cam_idle_event->recv_msg, cam_msg->recv_msg, sizeof(cam_idle_event->recv_msg));
+ memcpy(cam_idle_event->tfd, cam_msg->tfd, sizeof(cam_idle_event->tfd));
- g_mutex_lock(&g_cam_idle_event_lock);
- cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)cam_idle_event);
- g_mutex_unlock(&g_cam_idle_event_lock);
+ CAM_LOG_DEBUG("cb_info[%p] add idle event[%d][%p]",
+ cb_info, cam_idle_event->event, cam_idle_event);
- g_idle_add_full(G_PRIORITY_DEFAULT,
- (GSourceFunc)__camera_idle_event_callback,
- (gpointer)cam_idle_event,
- NULL);
+ cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)cam_idle_event);
+
+ g_idle_add_full(G_PRIORITY_DEFAULT,
+ (GSourceFunc)__camera_idle_event_callback,
+ (gpointer)cam_idle_event,
+ NULL);
+ }
+
+ g_mutex_unlock(&g_cam_idle_event_lock);
break;
default:
CAM_LOG_ERROR("t:%d not handled event class %d", type, cam_msg->event_class);
return;
}
+ cb_info->is_idle_cb_deactivated = TRUE;
+
if (cb_info->idle_event_list == NULL) {
CAM_LOG_INFO("No remained idle event");
return;