gl/eagl: Don't call anything synchronously from the main thread

This will deadlock if the main thread is the one who creates the GstGLContext.
All things we call from the main thread should be possible from any thread.

https://bugzilla.gnome.org/show_bug.cgi?id=751101
This commit is contained in:
Sebastian Dröge 2015-07-06 13:28:05 +03:00 committed by Tim-Philipp Müller
parent b7a3b54b2a
commit cff2d74cd4

View file

@ -143,12 +143,12 @@ gst_gl_context_eagl_release_layer (GstGLContext * context)
void
gst_gl_context_eagl_update_layer (GstGLContext * context)
{
__block GLuint framebuffer;
__block GLuint color_renderbuffer;
__block GLuint depth_renderbuffer;
__block GLint width;
__block GLint height;
__block CAEAGLLayer *eagl_layer;
GLuint framebuffer;
GLuint color_renderbuffer;
GLuint depth_renderbuffer;
GLint width;
GLint height;
CAEAGLLayer *eagl_layer;
GLenum status;
GstGLContextEagl *context_eagl = GST_GL_CONTEXT_EAGL (context);
GstGLContextEaglPrivate *priv = context_eagl->priv;
@ -168,7 +168,6 @@ gst_gl_context_eagl_update_layer (GstGLContext * context)
if (priv->eagl_layer)
gst_gl_context_eagl_release_layer (context);
dispatch_sync (dispatch_get_main_queue (), ^{
eagl_layer = (CAEAGLLayer *)[window_handle layer];
[EAGLContext setCurrentContext:priv->eagl_context];
@ -194,7 +193,6 @@ gst_gl_context_eagl_update_layer (GstGLContext * context)
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, depth_renderbuffer);
[EAGLContext setCurrentContext:nil];
});
[EAGLContext setCurrentContext:priv->eagl_context];
@ -224,7 +222,6 @@ gst_gl_context_eagl_create_context (GstGLContext * context, GstGLAPI gl_api,
GstGLContextEagl *context_eagl = GST_GL_CONTEXT_EAGL (context);
GstGLContextEaglPrivate *priv = context_eagl->priv;
dispatch_sync (dispatch_get_main_queue (), ^{
if (other_context) {
EAGLContext *external_gl_context = (EAGLContext *)
gst_gl_context_get_gl_context (other_context);
@ -235,7 +232,6 @@ gst_gl_context_eagl_create_context (GstGLContext * context, GstGLAPI gl_api,
} else {
priv->eagl_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
}
});
priv->eagl_layer = NULL;
priv->framebuffer = 0;
@ -285,7 +281,6 @@ gst_gl_context_eagl_choose_format (GstGLContext * context, GError ** error)
return TRUE;
}
dispatch_sync (dispatch_get_main_queue (), ^{
CAEAGLLayer *eagl_layer;
NSDictionary * dict =[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking,
@ -294,7 +289,6 @@ gst_gl_context_eagl_choose_format (GstGLContext * context, GError ** error)
eagl_layer = (CAEAGLLayer *)[window_handle layer];
[eagl_layer setOpaque:YES];
[eagl_layer setDrawableProperties:dict];
});
gst_object_unref (window);