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 の両方にかなり慣れていないので、理解のギャップをお詫びします。