static unsigned long get_native_handle(GdkWindow *gdkw) { #ifdef GDK_WINDOWING_X11 return (unsigned long)GDK_WINDOW_XID(gdkw); #elif defined(WIN32) return (unsigned long)GDK_WINDOW_HWND(gdkw); #elif defined(__APPLE__) return (unsigned long)gdk_quartz_window_get_nsview(gdkw); #endif g_warning("No way to get the native handle from gdk window"); return 0; }
guintptr gst_get_window_handle(GdkWindow *window) { guintptr window_handle; /* Retrieve window handler from GDK */ #if defined (GDK_WINDOWING_WIN32) window_handle = (guintptr)GDK_WINDOW_HWND (window); #elif defined (GDK_WINDOWING_QUARTZ) window_handle = gdk_quartz_window_get_nsview (window); #elif defined (GDK_WINDOWING_X11) window_handle = GDK_WINDOW_XID (window); #endif return window_handle; }
/* This function is called when the GUI toolkit creates the physical window that will hold the video. * At this point we can retrieve its handler (which has a different meaning depending on the windowing system) * and pass it to GStreamer through the XOverlay interface. */ static void realize_cb (GtkWidget *widget, CustomData *data) { GdkWindow *window = gtk_widget_get_window (widget); guintptr window_handle; if (!gdk_window_ensure_native (window)) g_error ("Couldn't create native window needed for GstXOverlay!"); /* Retrieve window handler from GDK */ #if defined (GDK_WINDOWING_WIN32) window_handle = (guintptr)GDK_WINDOW_HWND (window); #elif defined (GDK_WINDOWING_QUARTZ) window_handle = gdk_quartz_window_get_nsview (window); #elif defined (GDK_WINDOWING_X11) window_handle = GDK_WINDOW_XID (window); #endif /* Pass it to playbin, which implements XOverlay and will forward it to the video sink */ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (data->playbin), window_handle); }
void GTKVideo::realize_cb(GtkWidget *widget, void *user_data) { GTKVideo *context = static_cast<GTKVideo *>(user_data); GdkWindow *window = gtk_widget_get_window(widget); if (!gdk_window_ensure_native(window)) g_debug("Couldn't create native window needed for GstXOverlay!"); gdk_threads_enter(); gdk_display_sync(context->display_); // gdk_error_trap_pop (); /* Retrieve window handler from GDK */ #if defined(GDK_WINDOWING_WIN32) context->window_handle_ = reinterpret_cast<guintptr>(GDK_WINDOW_HWND(window)); #elif defined(GDK_WINDOWING_QUARTZ) context->window_handle_ = gdk_quartz_window_get_nsview(window); #elif defined(GDK_WINDOWING_X11) context->window_handle_ = GDK_WINDOW_XID(window); #endif gdk_threads_leave(); std::unique_lock<std::mutex> lock(context->wait_window_mutex_); context->wait_window_cond_.notify_all(); }