void setup_camera (CheeseWidget *widget) { CheeseWidgetPrivate *priv = CHEESE_WIDGET_GET_PRIVATE (widget); char *webcam_device = NULL; int x_resolution; int y_resolution; gdouble brightness; gdouble contrast; gdouble saturation; gdouble hue; g_settings_get (priv->settings, "photo-x-resolution", "i", &x_resolution); g_settings_get (priv->settings, "photo-y-resolution", "i", &y_resolution); g_settings_get (priv->settings, "camera", "s", &webcam_device); g_settings_get (priv->settings, "brightness", "d", &brightness); g_settings_get (priv->settings, "contrast", "d", &contrast); g_settings_get (priv->settings, "saturation", "d", &saturation); g_settings_get (priv->settings, "hue", "d", &hue); gdk_threads_enter (); priv->webcam = cheese_camera_new (CLUTTER_TEXTURE (priv->texture), webcam_device, x_resolution, y_resolution); gdk_threads_leave (); g_free (webcam_device); cheese_camera_setup (priv->webcam, NULL, &priv->error); gdk_threads_enter (); gtk_spinner_stop (GTK_SPINNER (priv->spinner)); if (priv->error != NULL) { priv->state = CHEESE_WIDGET_STATE_ERROR; g_object_notify (G_OBJECT (widget), "state"); cheese_widget_set_problem_page (CHEESE_WIDGET (widget), "error"); } else { cheese_camera_set_balance_property (priv->webcam, "brightness", brightness); cheese_camera_set_balance_property (priv->webcam, "contrast", contrast); cheese_camera_set_balance_property (priv->webcam, "saturation", saturation); cheese_camera_set_balance_property (priv->webcam, "hue", hue); priv->state = CHEESE_WIDGET_STATE_READY; g_object_notify (G_OBJECT (widget), "state"); cheese_camera_play (priv->webcam); gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), WEBCAM_PAGE); } gdk_threads_leave (); }
int main (int argc, char **argv) { GtkWidget *window; GtkWidget *screen; CheeseCamera *camera; ClutterActor *stage; ClutterActor *texture; bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return EXIT_FAILURE; if (!cheese_init (&argc, &argv)) return EXIT_FAILURE; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (delete_callback), NULL); screen = gtk_clutter_embed_new (); stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (screen)); texture = clutter_texture_new (); clutter_actor_set_size (texture, 400, 300); clutter_actor_add_child (stage, texture); gtk_widget_show (screen); clutter_actor_show (texture); camera = cheese_camera_new (CLUTTER_TEXTURE (texture), NULL, 640, 480); cheese_camera_setup (camera, NULL, NULL); gtk_container_add (GTK_CONTAINER (window), screen); gtk_widget_show_all (window); cheese_camera_play (camera); g_timeout_add_seconds (5, (GSourceFunc) (time_cb), camera); gtk_main (); return EXIT_SUCCESS; }