mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-10 03:19:40 +00:00
[410/906] gstglmixer: inactivate shared gl context before to release ours
First, inactivate shared gl contexts known by each sink pad. Then, destroy the gl context known by the glmixer. Finally, re-activate shared gl contexts. This is to satisfy the fact that no shared gl context must be current when an opengl context is destroyed. Moreover the application may hang or crash without those steps.
This commit is contained in:
parent
ba4ca3bced
commit
e356b7d1ed
1 changed files with 11 additions and 4 deletions
|
@ -1274,10 +1274,8 @@ gst_gl_mixer_change_state (GstElement * element, GstStateChange transition)
|
||||||
while (walk) {
|
while (walk) {
|
||||||
GstGLMixerPad *sink_pad = GST_GL_MIXER_PAD (walk->data);
|
GstGLMixerPad *sink_pad = GST_GL_MIXER_PAD (walk->data);
|
||||||
walk = g_slist_next (walk);
|
walk = g_slist_next (walk);
|
||||||
if (sink_pad->display) {
|
if (sink_pad->display)
|
||||||
g_object_unref (sink_pad->display);
|
gst_gl_display_activate_gl_context (sink_pad->display, FALSE);
|
||||||
sink_pad->display = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (mixer_class->reset)
|
if (mixer_class->reset)
|
||||||
mixer_class->reset (mix);
|
mixer_class->reset (mix);
|
||||||
|
@ -1290,6 +1288,15 @@ gst_gl_mixer_change_state (GstElement * element, GstStateChange transition)
|
||||||
g_object_unref (mix->display);
|
g_object_unref (mix->display);
|
||||||
mix->display = NULL;
|
mix->display = NULL;
|
||||||
}
|
}
|
||||||
|
while (walk) {
|
||||||
|
GstGLMixerPad *sink_pad = GST_GL_MIXER_PAD (walk->data);
|
||||||
|
walk = g_slist_next (walk);
|
||||||
|
if (sink_pad->display) {
|
||||||
|
gst_gl_display_activate_gl_context (sink_pad->display, TRUE);
|
||||||
|
g_object_unref (sink_pad->display);
|
||||||
|
sink_pad->display = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue