代码之家  ›  专栏  ›  技术社区  ›  shodanex

用gstreamer瞄准Qt子部件

  •  0
  • shodanex  · 技术社区  · 15 年前

    窗口 ,我可以使用x\u oerlay\u接口:

    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
    

    1 回复  |  直到 15 年前
        1
  •  3
  •   shodanex    15 年前

    它实际上是在使用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);