mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-26 07:56:38 +00:00
eglglessink: Allow setting another window for the next time we reconfigure everything
This commit is contained in:
parent
aa463f0274
commit
18e473307f
2 changed files with 9 additions and 11 deletions
|
@ -486,7 +486,8 @@ gst_eglglesbuffer_new (GstEglGlesSink * eglglessink, GstCaps * caps)
|
||||||
eglglesbuffer->eglglessink = gst_object_ref (eglglessink);
|
eglglesbuffer->eglglessink = gst_object_ref (eglglessink);
|
||||||
|
|
||||||
eglglesbuffer->image = gst_eglglesbuffer_create_native
|
eglglesbuffer->image = gst_eglglesbuffer_create_native
|
||||||
(eglglessink->window, eglglessink->config, eglglessink->display, NULL);
|
(eglglessink->used_window, eglglessink->config, eglglessink->display,
|
||||||
|
NULL);
|
||||||
if (!eglglesbuffer->image) {
|
if (!eglglesbuffer->image) {
|
||||||
GST_ERROR_OBJECT (eglglessink,
|
GST_ERROR_OBJECT (eglglessink,
|
||||||
"Failed to create native %dx%d image buffer", eglglesbuffer->width,
|
"Failed to create native %dx%d image buffer", eglglesbuffer->width,
|
||||||
|
@ -1079,10 +1080,12 @@ gst_eglglessink_stop (GstBaseSink * sink)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eglglessink->using_own_window) {
|
if (eglglessink->using_own_window) {
|
||||||
platform_destroy_native_window (eglglessink->display, eglglessink->window);
|
platform_destroy_native_window (eglglessink->display,
|
||||||
eglglessink->window = NULL;
|
eglglessink->used_window);
|
||||||
|
eglglessink->used_window = NULL;
|
||||||
eglglessink->have_window = FALSE;
|
eglglessink->have_window = FALSE;
|
||||||
}
|
}
|
||||||
|
eglglessink->used_window = NULL;
|
||||||
|
|
||||||
if (eglglessink->current_caps) {
|
if (eglglessink->current_caps) {
|
||||||
gst_caps_unref (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);
|
g_mutex_lock (eglglessink->flow_lock);
|
||||||
|
|
||||||
eglglessink->surface = eglCreateWindowSurface (eglglessink->display,
|
eglglessink->surface = eglCreateWindowSurface (eglglessink->display,
|
||||||
eglglessink->config, eglglessink->window, NULL);
|
eglglessink->config, eglglessink->used_window, NULL);
|
||||||
|
|
||||||
if (eglglessink->surface == EGL_NO_SURFACE) {
|
if (eglglessink->surface == EGL_NO_SURFACE) {
|
||||||
show_egl_error ("eglCreateWindowSurface");
|
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));
|
g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink));
|
||||||
GST_DEBUG_OBJECT (eglglessink, "We got a window handle!");
|
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) {
|
if (!id) {
|
||||||
GST_ERROR_OBJECT (eglglessink, "Window handle is invalid");
|
GST_ERROR_OBJECT (eglglessink, "Window handle is invalid");
|
||||||
goto HANDLE_ERROR;
|
goto HANDLE_ERROR;
|
||||||
|
@ -2178,6 +2175,7 @@ gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps)
|
||||||
gst_eglglessink_set_window_handle (GST_X_OVERLAY (eglglessink),
|
gst_eglglessink_set_window_handle (GST_X_OVERLAY (eglglessink),
|
||||||
(guintptr) window);
|
(guintptr) window);
|
||||||
}
|
}
|
||||||
|
eglglessink->used_window = eglglessink->window;
|
||||||
|
|
||||||
if (!eglglessink->have_surface) {
|
if (!eglglessink->have_surface) {
|
||||||
if (!gst_eglglessink_init_egl_surface (eglglessink)) {
|
if (!gst_eglglessink_init_egl_surface (eglglessink)) {
|
||||||
|
|
|
@ -136,7 +136,7 @@ struct _GstEglGlesSink
|
||||||
EGLConfig config;
|
EGLConfig config;
|
||||||
EGLContext context;
|
EGLContext context;
|
||||||
EGLDisplay display;
|
EGLDisplay display;
|
||||||
EGLNativeWindowType window;
|
EGLNativeWindowType window, used_window;
|
||||||
EGLSurface surface;
|
EGLSurface surface;
|
||||||
GLuint fragshader, vertshader, program;
|
GLuint fragshader, vertshader, program;
|
||||||
GLuint texture[3];
|
GLuint texture[3];
|
||||||
|
|
Loading…
Reference in a new issue