return GST_BUS_DROP;
}
+static void
+message_cb (GstBus * bus, GstMessage * message, GstElement * pipeline)
+{
+ gst_element_set_state (pipeline, GST_STATE_NULL);
+ gst_object_unref (pipeline);
+
+ gtk_main_quit ();
+}
+
+static void
+realize_cb (GtkWidget * widget, GstElement * pipeline)
+{
+#if GTK_CHECK_VERSION(2,18,0)
+ if (!gdk_window_ensure_native (widget->window))
+ g_error ("Failed to create native window!");
+#endif
+
+ gst_element_set_state (pipeline, GST_STATE_PLAYING);
+}
+
static gboolean
expose_cb (GtkWidget * widget, GdkEventExpose * event, GstElement * videosink)
{
{
SourceData *userdata = g_new0 (SourceData, 1);
#ifdef G_OS_WIN32
- gchar *filename = g_filename_from_uri ((const gchar *) seldata->data, NULL, NULL);
+ gchar *filename =
+ g_filename_from_uri ((const gchar *) seldata->data, NULL, NULL);
#else
GdkPixbufFormat *format;
gchar **uris = gtk_selection_data_get_uris (seldata);
gint
main (gint argc, gchar * argv[])
{
- GstStateChangeReturn ret;
GstElement *pipeline;
GstElement *uload, *filter, *sink;
GstElement *sourcebin;
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, screen);
+ gst_bus_add_signal_watch (bus);
+ g_signal_connect (bus, "message::error", G_CALLBACK (message_cb), pipeline);
+ g_signal_connect (bus, "message::warning", G_CALLBACK (message_cb), pipeline);
+ g_signal_connect (bus, "message::eos", G_CALLBACK (message_cb), pipeline);
gst_object_unref (bus);
g_signal_connect (screen, "expose-event", G_CALLBACK (expose_cb), sink);
+ g_signal_connect (screen, "realize", G_CALLBACK (realize_cb), pipeline);
gtk_drag_dest_set (screen, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
gtk_drag_dest_add_uri_targets (screen);
g_signal_connect (screen, "drag-data-received",
G_CALLBACK (on_drag_data_received), filter);
- ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
- if (ret == GST_STATE_CHANGE_FAILURE) {
- g_print ("Failed to start up pipeline!\n");
- return -1;
- }
-
gtk_widget_show_all (GTK_WIDGET (window));
gtk_main ();