seek: Add window-embedding support for OS X/Quartz

osxvideosink implements the GstXOverlay interface since some time now.
This commit is contained in:
Sebastian Dröge 2012-02-20 14:35:37 +01:00
parent 662830c21d
commit 775d851d66

View file

@ -40,6 +40,8 @@
#include <gdk/gdkx.h> #include <gdk/gdkx.h>
#elif defined (GDK_WINDOWING_WIN32) #elif defined (GDK_WINDOWING_WIN32)
#include <gdk/gdkwin32.h> #include <gdk/gdkwin32.h>
#elif defined (GDK_WINDOWING_QUARTZ)
#include <gdk/gdkquartzwindow.h>
#endif #endif
#include <gst/interfaces/xoverlay.h> #include <gst/interfaces/xoverlay.h>
@ -2457,10 +2459,10 @@ msg_clock_lost (GstBus * bus, GstMessage * message, GstPipeline * data)
} }
} }
#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) #if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) || defined (GDK_WINDOWING_QUARTZ)
static GstElement *xoverlay_element = NULL; static GstElement *xoverlay_element = NULL;
static gulong embed_xid = 0; static guintptr embed_xid = 0;
/* We set the xid here in response to the prepare-xwindow-id message via a /* We set the xid here in response to the prepare-xwindow-id message via a
* bus sync handler because we don't know the actual videosink used from the * bus sync handler because we don't know the actual videosink used from the
@ -2529,7 +2531,10 @@ realize_cb (GtkWidget * widget, gpointer data)
#if defined (GDK_WINDOWING_WIN32) #if defined (GDK_WINDOWING_WIN32)
embed_xid = GDK_WINDOW_HWND (window); embed_xid = GDK_WINDOW_HWND (window);
g_print ("Window realize: video window HWND = %lu\n", embed_xid); g_print ("Window realize: video window HWND = %lu\n", embed_xid);
#else #elif defined (GDK_WINDOWING_QUARTZ)
embed_xid = gdk_quartz_window_get_nsview (window);
g_print ("Window realize: video window NSView = %p\n", embed_xid);
#elif defined (GDK_WINDOWING_X11)
embed_xid = GDK_WINDOW_XID (window); embed_xid = GDK_WINDOW_XID (window);
g_print ("Window realize: video window XID = %lu\n", embed_xid); g_print ("Window realize: video window XID = %lu\n", embed_xid);
#endif #endif
@ -2563,7 +2568,7 @@ connect_bus_signals (GstElement * pipeline)
{ {
GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) #if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) || defined (GDK_WINDOWING_QUARTZ)
/* handle prepare-xwindow-id element message synchronously */ /* handle prepare-xwindow-id element message synchronously */
gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler,
pipeline); pipeline);
@ -3014,7 +3019,7 @@ main (int argc, char **argv)
* asks for the XID of the window to render onto */ * asks for the XID of the window to render onto */
gtk_widget_realize (window); gtk_widget_realize (window);
#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) #if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32) || defined (GDK_WINDOWING_QUARTZ)
/* we should have the XID now */ /* we should have the XID now */
g_assert (embed_xid != 0); g_assert (embed_xid != 0);
#endif #endif