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 }