1 #include <unicap.h> 2 #include <unicapgtk.h> 3 #include <string.h> 4 5 static void 6 device_change_cb (UnicapgtkDeviceSelection * selection, gchar * device_id, 7 GtkWidget * ugtk_display) 8 { 9 unicap_device_t device; 10 unicap_handle_t handle; 11 12 unicap_void_device (&device); // (4) 13 strcpy (device.identifier, device_id); 14 15 if (!SUCCESS (unicap_enumerate_devices (&device, &device, 0)) || // (5) 16 !SUCCESS (unicap_open (&handle, &device))) 17 { 18 // device is not available anymore 19 g_printerr ("device '%s' not available!\n", device_id); 20 return; 21 } 22 23 unicapgtk_video_display_stop (UNICAPGTK_VIDEO_DISPLAY (ugtk_display)); 24 unicapgtk_video_display_set_handle (UNICAPGTK_VIDEO_DISPLAY (ugtk_display), 25 handle); 26 unicapgtk_video_display_start (UNICAPGTK_VIDEO_DISPLAY (ugtk_display)); 27 } 28 29 30 int 31 main (int argc, char **argv) 32 { 33 GtkWidget *window; 34 GtkWidget *vbox; 35 GtkWidget *ugtk_display; 36 GtkWidget *device_selection; 37 38 gtk_init (&argc, &argv); 39 40 window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 41 g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), 42 NULL); 43 44 vbox = gtk_vbox_new (FALSE, 10); 45 gtk_container_add (GTK_CONTAINER (window), vbox); 46 47 ugtk_display = unicapgtk_video_display_new (); 48 49 device_selection = unicapgtk_device_selection_new (TRUE); // (1) 50 gtk_box_pack_start_defaults (GTK_BOX (vbox), device_selection); 51 unicapgtk_device_selection_rescan (UNICAPGTK_DEVICE_SELECTION (device_selection)); // (2) 52 g_signal_connect (G_OBJECT (device_selection), "unicapgtk_device_selection_changed", G_CALLBACK (device_change_cb), ugtk_display); // (3) 53 gtk_combo_box_set_active (GTK_COMBO_BOX (device_selection), 0); 54 55 gtk_box_pack_start_defaults (GTK_BOX (vbox), ugtk_display); 56 57 gtk_widget_show_all (window); 58 gtk_main (); 59 60 return 0; 61 }