0

xvimagesink要素で終わるgstreamerパイプラインがあります。ビデオを特定のウィンドウに表示するには、x_oerlay_interfaceを使用できます。

gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(xvsink), winid);

ここまでは順調ですね。ただし、これは、winidがトップレベルウィンドウのアイデアである場合にのみ機能します。これは、子ウィジェットの場合ではありません。私が持っているとしましょう:

  1. ダイアログウィジェットDialogWidget
  2. DialogWidgetの子であるビデオウィジェットVideoWidget。

を使用する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

どうやってやるの ?

4

1 に答える 1

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);
于 2010-08-26T10:26:13.540 に答える