diff --git a/ChangeLog b/ChangeLog index a799b54632..1e7ace5502 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-10-07 Ronald S. Bultje + + * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link), + (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init): + * sys/ximage/ximagesink.h: + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link), + (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init): + * sys/xvimage/xvimagesink.h: + Actually only create a new toplevel window if we're not gonna + embed it right after. + 2004-10-07 Wim Taymans * gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad), diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index 1766be1f86..53b94e2faf 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -49,6 +49,9 @@ static void gst_ximagesink_buffer_free (GstBuffer * buffer); static void gst_ximagesink_ximage_destroy (GstXImageSink * ximagesink, GstXImage * ximage); +static void gst_ximagesink_set_xwindow_id (GstXOverlay * overlay, + XID xwindow_id); + /* ElementFactory information */ static GstElementDetails gst_ximagesink_details = GST_ELEMENT_DETAILS ("Video sink", @@ -988,8 +991,8 @@ gst_ximagesink_sink_link (GstPad * pad, const GstCaps * caps) g_assert (GST_VIDEOSINK_WIDTH (ximagesink) > 0); g_assert (GST_VIDEOSINK_HEIGHT (ximagesink) > 0); if (!ximagesink->xwindow) { - ximagesink->xwindow = gst_ximagesink_xwindow_new (ximagesink, - GST_VIDEOSINK_WIDTH (ximagesink), GST_VIDEOSINK_HEIGHT (ximagesink)); + gst_ximagesink_set_xwindow_id (GST_X_OVERLAY (ximagesink), + ximagesink->parent); } else { if (ximagesink->xwindow->internal) { gst_ximagesink_xwindow_resize (ximagesink, ximagesink->xwindow, @@ -1380,6 +1383,8 @@ gst_ximagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id) if (xwindow) ximagesink->xwindow = xwindow; + + ximagesink->parent = xwindow_id; } static void @@ -1534,6 +1539,7 @@ gst_ximagesink_init (GstXImageSink * ximagesink) gst_ximagesink_buffer_alloc); ximagesink->display_name = NULL; + ximagesink->parent = 0; ximagesink->xcontext = NULL; ximagesink->xwindow = NULL; ximagesink->ximage = NULL; diff --git a/sys/ximage/ximagesink.h b/sys/ximage/ximagesink.h index 36c832a9e2..3c9eaddd58 100644 --- a/sys/ximage/ximagesink.h +++ b/sys/ximage/ximagesink.h @@ -112,6 +112,7 @@ struct _GstXImageSink { char *display_name; + Drawable parent; GstXContext *xcontext; GstXWindow *xwindow; GstXImage *ximage; diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index 7dd72331eb..5098584668 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -50,6 +50,8 @@ static void gst_xvimagesink_buffer_free (GstBuffer * buffer); static void gst_xvimagesink_xvimage_destroy (GstXvImageSink * xvimagesink, GstXvImage * xvimage); +static void gst_xvimagesink_set_xwindow_id (GstXOverlay * overlay, + XID xwindow_id); /* ElementFactory information */ static GstElementDetails gst_xvimagesink_details = @@ -1278,8 +1280,8 @@ gst_xvimagesink_sink_link (GstPad * pad, const GstCaps * caps) g_assert (GST_VIDEOSINK_WIDTH (xvimagesink) > 0); g_assert (GST_VIDEOSINK_HEIGHT (xvimagesink) > 0); if (!xvimagesink->xwindow) - xvimagesink->xwindow = gst_xvimagesink_xwindow_new (xvimagesink, - GST_VIDEOSINK_WIDTH (xvimagesink), GST_VIDEOSINK_HEIGHT (xvimagesink)); + gst_xvimagesink_set_xwindow_id (GST_X_OVERLAY (xvimagesink), + xvimagesink->parent); else { if (xvimagesink->xwindow->internal) gst_xvimagesink_xwindow_resize (xvimagesink, xvimagesink->xwindow, @@ -1642,6 +1644,7 @@ gst_xvimagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id) if (xwindow) xvimagesink->xwindow = xwindow; + xvimagesink->parent = xwindow_id; } static void @@ -1915,6 +1918,7 @@ gst_xvimagesink_init (GstXvImageSink * xvimagesink) gst_xvimagesink_buffer_alloc); xvimagesink->display_name = NULL; + xvimagesink->parent = 0; xvimagesink->xcontext = NULL; xvimagesink->xwindow = NULL; xvimagesink->xvimage = NULL; diff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h index deb830f490..3c0ce05987 100644 --- a/sys/xvimage/xvimagesink.h +++ b/sys/xvimage/xvimagesink.h @@ -128,6 +128,7 @@ struct _GstXvImageSink { char *display_name; + Drawable parent; GstXContext *xcontext; GstXWindow *xwindow; GstXvImage *xvimage;