dt_camctl_t *dt_camctl_new() { dt_camctl_t *camctl=g_malloc(sizeof(dt_camctl_t)); memset(camctl,0,sizeof(dt_camctl_t)); dt_print(DT_DEBUG_CAMCTL,"[camera_control] creating new context %lx\n",(unsigned long int)camctl); // Initialize gphoto2 context and setup dispatch callbacks camctl->gpcontext = gp_context_new(); gp_context_set_idle_func( camctl->gpcontext , (GPContextIdleFunc)_idle_func_dispatch, camctl ); gp_context_set_status_func( camctl->gpcontext , (GPContextStatusFunc)_status_func_dispatch, camctl ); gp_context_set_error_func( camctl->gpcontext , (GPContextErrorFunc)_error_func_dispatch, camctl ); gp_context_set_message_func( camctl->gpcontext , (GPContextMessageFunc)_message_func_dispatch, camctl ); // Load all camera drivers we know... gp_abilities_list_new( &camctl->gpcams ); gp_abilities_list_load( camctl->gpcams, camctl->gpcontext ); dt_print(DT_DEBUG_CAMCTL,"[camera_control] loaded %d camera drivers.\n", gp_abilities_list_count( camctl->gpcams ) ); dt_pthread_mutex_init(&camctl->lock, NULL); // Let's detect cameras connexted dt_camctl_detect_cameras(camctl); return camctl; }
/* scan for new devices button callback */ static void _lib_import_scan_devices_callback(GtkButton *button, gpointer data) { /* detect cameras */ dt_camctl_detect_cameras(darktable.camctl); /* update UI */ // this part is now asynchronously done by the signal connected to in gui_init() }
/* scan for new devices button callback */ static void _lib_import_scan_devices_callback(GtkButton *button,gpointer data) { /* detect cameras */ dt_camctl_detect_cameras(darktable.camctl); /* update UI */ _lib_import_ui_devices_update(data); }
/** camctl camera disconnect callback */ static void _camctl_camera_disconnected_callback (const dt_camera_t *camera,void *data) { dt_lib_module_t *self = (dt_lib_module_t *)data; /* rescan connected cameras */ dt_camctl_detect_cameras(darktable.camctl); /* update gui with detected devices */ gboolean i_own_lock = dt_control_gdk_lock(); _lib_import_ui_devices_update(self); if(i_own_lock) dt_control_gdk_unlock(); }
/** camctl camera disconnect callback */ static gboolean _detect_async(gpointer user_data) { dt_camctl_detect_cameras(darktable.camctl); return FALSE; }