3

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 用語を使用しているため、XID を取得するための gdk の関数はGDK_SURFACE_XID()引数として GdkSurface* を取り、Gtk3 と同様に GdkSurface へのポインターを取得するための直接関数は GtkWidget にはありませんgtk_widget_get_window

GtkDrawingArea を使用しgtk_widget_get_nativeて GtkNative を取得し、GdkSurface をアタッチしようとしましたが、GtkWindow のサーフェスを返しています。

gst_video_overlay_set_window_handleウィジェットでビデオを再生できるようにXID を渡す方法を探しています。

私は Gtk と Gstreamer の両方にかなり慣れていないので、理解のギャップをお詫びします。

4

0 に答える 0