2010-08-26 57 views
0

我有一個gstreamer管道,以xvimagesink元素結束。要在一個特定的窗口顯示的視頻,我可以使用x_oerlay_interface:針對與gstreamer Qt子部件

gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), winid); 

到目前爲止,一切都很好。然而,它只適用於winid是頂層窗口的想法,而不是子窗口小部件的情況。比方說,我有:

  1. 一個對話框控件DialogWidget
  2. 視頻窗件VideoWidget,這是DialogWidget的孩子。

如果我使用DialogWidget->winId(),則視頻顯示正確。
如果我使用「VideoWidget-> winId()」,然後我收到消息,從十五擴展告訴我的東西像

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 

一個合適的目標我怎麼能這樣做?

回答

3

它實際上與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);