2 * Sample app for element embedding.
9 #include <gst/xoverlay/xoverlay.h>
14 cb_expose (GtkWidget * w, GdkEventExpose * ev, GstElement * e)
16 if (GST_IS_X_OVERLAY (e) &&
17 !GTK_WIDGET_NO_WINDOW (w) && GTK_WIDGET_REALIZED (w)) {
18 gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (e),
19 GDK_WINDOW_XWINDOW (w->window));
24 main (int argc, char *argv[])
26 GtkWidget *window, *content;
27 GstElement *testsrc, *csp, *videosink, *pipeline;
29 gtk_init (&argc, &argv);
30 gst_init (&argc, &argv);
32 pipeline = gst_element_factory_make ("pipeline", NULL);
33 testsrc = gst_element_factory_make ("videotestsrc", NULL);
34 csp = gst_element_factory_make ("ffmpegcolorspace", NULL);
35 videosink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL);
37 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
38 gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
39 gtk_window_set_title (GTK_WINDOW (window), "My application");
40 content = gtk_event_box_new ();
41 gtk_container_add (GTK_CONTAINER (window), content);
42 g_signal_connect (content, "expose-event", G_CALLBACK (cb_expose), videosink);
43 gtk_widget_show_all (window);
45 gst_bin_add_many (GST_BIN (pipeline), testsrc, csp, videosink, NULL);
46 gst_element_link_many (testsrc, csp, videosink, NULL);
48 g_idle_add ((GSourceFunc) gst_bin_iterate, pipeline);
49 gst_element_set_state (pipeline, GST_STATE_PLAYING);