tpn*_*rma 5 gtk gstreamer cairo gtk4
我试图将 gstreamer 的 GUI 集成教程(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c)从 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 中没有直接函数来获取指向 GdkSurface 的指针,类似于gtk_widget_get_windowGtk3 中的那样。
我尝试使用gtk_widget_get_nativeGtkDrawingArea 获取 GtkNative 并将 GdkSurface 附加到它,但这会返回 GtkWindow 的表面。
我正在寻找一种方法来传递 XIDgst_video_overlay_set_window_handle以便能够在小部件中播放视频。
我对 Gtk 和 Gstreamer 都很陌生,所以对于我的理解上的差距表示歉意。
| 归档时间: | 
 | 
| 查看次数: | 526 次 | 
| 最近记录: |