使用 gstreamer 定位 Qt 子部件

发布于 2024-09-15 17:52:27 字数 1269 浏览 3 评论 0原文

我有一个以 xvimagesink 元素结尾的 gstreamer 管道。为了让视频显示在特定的窗口中,我可以使用 x_oerlay_interface :

gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), winid);

到目前为止,一切都很好。然而,它仅在 winid 是顶级窗口的情况下才有效,而子窗口小部件则不然。假设我有:

  1. 一个对话框小部件 DialogWidget
  2. 一个视频小部件 VideoWidget,它是 DialogWidget 的子项。

如果我使用 DialogWidget->winId(),则视频会正确显示。
如果我使用“VideoWidget->winId()”,那么我会收到来自 Xv 扩展的消息,告诉我一些事情,比如

X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 3 (X_GetWindowAttributes)
  Resource id:  0x40000d5
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 2 (X_ChangeWindowAttributes)
  Resource id:  0x40000d5
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 55 (X_CreateGC)
  Resource id:  0x40000d5
X Error: BadGC (invalid GC parameter) 13
  Extension:    132 (Uknown extension)
  Minor opcode: 19 (Unknown request)
  Resource id:  0x40000d5
X Error: BadGC (invalid GC parameter) 13
  Extension:    132 (Uknown extension)
  Minor opcode: 19 (Unknown request)
  Resource id:  0x40000d5

我想要一个带有控件按钮等的可调整大小的窗口,并且在此窗口中,有一个视频显示窗口或小部件或任何适合我的目标的东西

gst_x_overlay_set_xwindow_id

我该怎么做?

I have a gstreamer pipeline which ends with a xvimagesink element. To have the video displayed in a particular window, I can use the x_oerlay_interface :

gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), winid);

So far, so good. However, it only works if winid is the idea of a top level window, which is not the case of child widget. Let's say I have :

  1. A dialog widget DialogWidget
  2. A video widget VideoWidget, which is a child of DialogWidget.

If I use DialogWidget->winId(), then the video displays correctly.
If I use 'VideoWidget->winId()', then I receive message from the Xv extension telling me things like

X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 3 (X_GetWindowAttributes)
  Resource id:  0x40000d5
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 2 (X_ChangeWindowAttributes)
  Resource id:  0x40000d5
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 55 (X_CreateGC)
  Resource id:  0x40000d5
X Error: BadGC (invalid GC parameter) 13
  Extension:    132 (Uknown extension)
  Minor opcode: 19 (Unknown request)
  Resource id:  0x40000d5
X Error: BadGC (invalid GC parameter) 13
  Extension:    132 (Uknown extension)
  Minor opcode: 19 (Unknown request)
  Resource id:  0x40000d5

I would like to have a resizable window with controls buttons etc.., and within this window, a video display window or widget or whatever that is a suitable target for

gst_x_overlay_set_xwindow_id

How can I do that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝天 2024-09-22 17:52:27

事实上它正在与 QWidget 一起工作。但是,之后需要调用QApplication::syncX
WinId 的调用:

/* Wrong order */
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), someWidget->winId());

/* Right order */
unsigned long win_id = someWidget->winId();
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), win_id);

It is in fact working with QWidget. However, a call to QApplication::syncX is needed AFTER
the call to WinId :

/* Wrong order */
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), someWidget->winId());

/* Right order */
unsigned long win_id = someWidget->winId();
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), win_id);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文