gltestsrc: free in the GL thread on stop
Calling GL functions not on the GL thread may crash in some GL implementations. https://bugzilla.gnome.org/show_bug.cgi?id=789665
This commit is contained in:
parent
66d2bce8ff
commit
c85b825bb2
@ -522,31 +522,36 @@ gst_gl_test_src_start (GstBaseSrc * basesrc)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_gl_test_src_gl_stop (GstGLContext * context, GstGLTestSrc * src)
|
||||||
|
{
|
||||||
|
if (src->fbo)
|
||||||
|
gst_object_unref (src->fbo);
|
||||||
|
src->fbo = NULL;
|
||||||
|
|
||||||
|
if (src->shader)
|
||||||
|
gst_object_unref (src->shader);
|
||||||
|
src->shader = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
if (src->src_impl)
|
||||||
|
src->src_funcs->free (src->src_impl);
|
||||||
|
src->src_impl = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_gl_test_src_stop (GstBaseSrc * basesrc)
|
gst_gl_test_src_stop (GstBaseSrc * basesrc)
|
||||||
{
|
{
|
||||||
GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
|
GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
|
||||||
|
|
||||||
|
gst_gl_context_thread_add (src->context,
|
||||||
|
(GstGLContextThreadFunc) gst_gl_test_src_gl_stop, src);
|
||||||
|
|
||||||
gst_caps_replace (&src->out_caps, NULL);
|
gst_caps_replace (&src->out_caps, NULL);
|
||||||
|
|
||||||
if (src->context) {
|
if (src->context)
|
||||||
if (src->shader) {
|
|
||||||
gst_object_unref (src->shader);
|
|
||||||
src->shader = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (src->fbo)
|
|
||||||
gst_object_unref (src->fbo);
|
|
||||||
src->fbo = NULL;
|
|
||||||
|
|
||||||
gst_object_unref (src->context);
|
gst_object_unref (src->context);
|
||||||
src->context = NULL;
|
src->context = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (src->src_impl) {
|
|
||||||
src->src_funcs->free (src->src_impl);
|
|
||||||
src->src_impl = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user