From 18e473307feb425e8f47ee61b7d07b9dcc4d83cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 24 Sep 2012 13:48:19 +0200 Subject: [PATCH] eglglessink: Allow setting another window for the next time we reconfigure everything --- ext/eglgles/gsteglglessink.c | 18 ++++++++---------- ext/eglgles/gsteglglessink.h | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index 8cc90d5..79b821c 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -486,7 +486,8 @@ gst_eglglesbuffer_new (GstEglGlesSink * eglglessink, GstCaps * caps) eglglesbuffer->eglglessink = gst_object_ref (eglglessink); eglglesbuffer->image = gst_eglglesbuffer_create_native - (eglglessink->window, eglglessink->config, eglglessink->display, NULL); + (eglglessink->used_window, eglglessink->config, eglglessink->display, + NULL); if (!eglglesbuffer->image) { GST_ERROR_OBJECT (eglglessink, "Failed to create native %dx%d image buffer", eglglesbuffer->width, @@ -1079,10 +1080,12 @@ gst_eglglessink_stop (GstBaseSink * sink) } if (eglglessink->using_own_window) { - platform_destroy_native_window (eglglessink->display, eglglessink->window); - eglglessink->window = NULL; + platform_destroy_native_window (eglglessink->display, + eglglessink->used_window); + eglglessink->used_window = NULL; eglglessink->have_window = FALSE; } + eglglessink->used_window = NULL; if (eglglessink->current_caps) { gst_caps_unref (eglglessink->current_caps); @@ -1398,7 +1401,7 @@ gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink) g_mutex_lock (eglglessink->flow_lock); eglglessink->surface = eglCreateWindowSurface (eglglessink->display, - eglglessink->config, eglglessink->window, NULL); + eglglessink->config, eglglessink->used_window, NULL); if (eglglessink->surface == EGL_NO_SURFACE) { show_egl_error ("eglCreateWindowSurface"); @@ -1747,12 +1750,6 @@ gst_eglglessink_set_window_handle (GstXOverlay * overlay, guintptr id) g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink)); GST_DEBUG_OBJECT (eglglessink, "We got a window handle!"); - if (eglglessink->have_window) { - GST_WARNING_OBJECT (eglglessink, - "We already have a window. Ignoring request"); - return; - } - if (!id) { GST_ERROR_OBJECT (eglglessink, "Window handle is invalid"); goto HANDLE_ERROR; @@ -2178,6 +2175,7 @@ gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps) gst_eglglessink_set_window_handle (GST_X_OVERLAY (eglglessink), (guintptr) window); } + eglglessink->used_window = eglglessink->window; if (!eglglessink->have_surface) { if (!gst_eglglessink_init_egl_surface (eglglessink)) { diff --git a/ext/eglgles/gsteglglessink.h b/ext/eglgles/gsteglglessink.h index 5e20f4a..e4191ab 100644 --- a/ext/eglgles/gsteglglessink.h +++ b/ext/eglgles/gsteglglessink.h @@ -136,7 +136,7 @@ struct _GstEglGlesSink EGLConfig config; EGLContext context; EGLDisplay display; - EGLNativeWindowType window; + EGLNativeWindowType window, used_window; EGLSurface surface; GLuint fragshader, vertshader, program; GLuint texture[3]; -- 2.7.4