您的位置:首页 > 其它

GStreamer如何让videosink在指定的窗口进行图像绘制?

2011-01-03 11:27 393 查看
想让xvimagesink/ximagesink这样的element在我们指定的窗口中绘制video?简单的很:

1. new一个GtkDrawingArea
2. connect它的expose-event signal,e.g:

// Drawing on our drawing area
g_signal_connect(G_OBJECT(area), "expose-event", G_CALLBACK(expose_cb), NULL);

3. 书写callback函数expose_cb,e.g:

/* Callback to be called when the drawing area is exposed */
static gboolean expose_cb(GtkWidget * widget, GdkEventExpose * event, gpointer data)
{
// `play->videosink'就是video sink element
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(play->videosink),
GDK_WINDOW_XWINDOW(widget->window));
return FALSE;
}

这样就OK了。expose-event是drawingarea每次重绘的时候会发出的signal,应该说每次重绘都去set一遍不是很好,的确是这样,可以再改进。这里纯粹是演示一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: