问题描述
我试图将 gstreamer(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c) 的 GUI 集成教程从 gtk3 移植到 gtk4。我遇到了获取属于 GtkDrawingArea 的 X 窗口的问题。在 gtk3 中,使用以下方法获取 XID 并将其传递给 GstVideoOverlay:
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 GstVideoOverlay!");
/* Retrieve window handler from GDK */
window_handle = GDK_WINDOW_XID (window);
/* Pass it to playbin,which implements VideoOverlay and will forward it to the video sink */
gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (data->playbin),window_handle);
}
我不知道如何在 Gtk4 中做同样的事情。由于 Gtk4 使用的是 Wayland 术语,gdk 中获取 XID 的函数是 GDK_SURFACE_XID()
,它以 GdkSurface* 作为参数,并且 GtkWidget 中没有直接函数来获取类似于 gtk_widget_get_window
的指向 GdkSurface 的指针在 Gtk3 中。
我尝试使用 GtkDrawingArea 的 gtk_widget_get_native
获取 GtkNative 并将 GdkSurface 附加到它,但这会返回 GtkWindow 的表面。
我正在寻找一种方法让 XID 传递给 gst_video_overlay_set_window_handle
以便能够在小部件中播放视频。
我对 Gtk 和 Gstreamer 都很陌生,因此对于我的理解上的差距,我深表歉意。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)