【问题标题】:How do I get the ID of the X Window created by DirectFB?如何获取 DirectFB 创建的 X Window 的 ID?
【发布时间】:2013-09-16 19:22:58
【问题描述】:
我正在开发一个使用 DirectFB 和 GStreamer-0.10 的程序。我正在使用 GStreamer 的 gstxoverlay 库中的 gst_x_overlay_set_xwindow_id() 来告诉 GStreamer 渲染到 DirectFB 创建的窗口。 gst_x_overlay_set_xwindow_id() 要求我给它我要渲染到的 X Window 的 ID,但我似乎找不到从 DirectFB 获取它的方法。
有什么方法可以获取 DirectFB 创建的窗口的 X Window ID?如果没有任何简单的方法,有没有办法用 DirectFB 的源文件做一些hacky 来完成这个?
【问题讨论】:
标签:
c++
c
gstreamer
directfb
【解决方案1】:
directfb 代码中的某处必须有类似 Window window; 的行。尝试将其暴露给 gstreamer 代码。
从那里取出窗口句柄,然后你就可以使用下面的函数了
gst_x_overlay_set_window_handle(GST_X_OVERLAY(yoursinkvariable), (guintptr) windowhandle);
不完全按照您的要求,但这也可能解决问题。
此外,gst_x_overlay_set_xwindow_id() 已弃用。
从文档中,
警告
gst_x_overlay_set_xwindow_id 已弃用,不应在新编写的代码中使用。请改用gst_x_overlay_set_window_handle()。
【讨论】:
-
感谢您提供有关已弃用功能的提示。至于如何在窗口上获取句柄,在我的 DirectFB 代码中没有像 Window window; 这样的东西。不过,我相信我可能已经找到了一种使用创建的IDirectFB 获取它的方法。它看起来有点像this。有了这个,我现在得到这个错误:X11/Core: Error! BadDrawable (invalid Pixmap or Window parameter)。这是否意味着我的句柄错误,还是因为 GStreamer 和 DirectFB 都试图同时渲染到同一个窗口?