[gst-devel] Gtk xoverlay problem
sledge hammer
sledgehammer_999 at hotmail.com
Wed Apr 29 16:33:16 CEST 2009
Take a look at the example code here:
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstxoverlay.html
Basically you need to listen for 'prepare-xwindow-id' signal and handle it synchronoysly.
Date: Wed, 29 Apr 2009 11:14:57 +0200
From: guitarboy000 at gmail.com
To: gstreamer-devel at lists.sourceforge.net
Subject: [gst-devel] Gtk xoverlay problem
Hi,
I'm developing an application, it's called Gloobus and it wants to be a very fast previewer for any kind of file, you can see some screenhots and download it from here:
http://gloobus.launchpad.net
Now, I can reproduce audio files with gstreamer without any problem, but when I try to do it for movies, they play in his own window.
I've been trying a lot of thing with the xoverlay function that its supposed to be the one to make the video play in a gtk widget but I get an error
If I add the gtk_drawing_area into the GTK_FIXED before I call the xoverlay function, I get a BAD WINDOW error and the application stops.
If I add the gtk_drawing_area into the GTK_FIXED after I call the xoverlay function, I get that the gtk drawin has no window or pixmap and it plays in its own window.
Here you have the code, I hope you can see what fails here:
container is a gtk_fixed added into the main window!
void iMovie::play(GtkWidget * container)
{
m_drawable = gtk_drawing_area_new();
gtk_widget_set_size_request (m_drawable, 600, 500);
gtk_fixed_put(GTK_FIXED(container),m_drawable,SHADOW_WIDTH,SHADOW_WIDTH+HEADER_HEIGHT);
g_print("Start Playing (%s)...\n",g_file_get_uri ( m_gfile));
gst_init (NULL, NULL);
m_pipeline = gst_pipeline_new ("gst-player");
m_bin = gst_element_factory_make ("playbin", "m_bin");
m_sink = gst_element_factory_make ("xvimagesink", "m_sink");
g_object_set ( G_OBJECT (m_bin), "video-sink", m_sink, NULL );
gst_bin_add ( GST_BIN (m_pipeline), m_bin );
{
GstBus *bus;
bus = gst_pipeline_get_bus (GST_PIPELINE (m_pipeline));
gst_object_unref (bus);
}
g_object_set (G_OBJECT (m_bin), "uri", g_file_get_uri( m_gfile), NULL );
g_object_set (G_OBJECT (m_sink), "force-aspect-ratio", TRUE, NULL );
if (GST_IS_X_OVERLAY (m_sink))
{
printf("Is Overlay (Win ID: %i)!!\n",GPOINTER_TO_INT(GDK_WINDOW_XWINDOW(m_drawable->window)));
gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (m_sink), GPOINTER_TO_INT(GDK_WINDOW_XWINDOW(m_drawable->window)));
gst_x_overlay_handle_events (GST_X_OVERLAY (m_sink), FALSE);
}
gst_element_set_state (m_pipeline, GST_STATE_PLAYING);
gtk_widget_show_all(container);
}
--
Jordi Hernández Puigdellívol
_________________________________________________________________
Το What’s New σας ειδοποιεί άμεσα για κάθε ενημέρωση. Μάθετε πώς.
http://home.live.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090429/31a2a01b/attachment.htm>
More information about the gstreamer-devel
mailing list