mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
glimagesink: balance the creation/destruction of the overlay compositor
Fixes some leaks/possible segfault on when failing to create the compositor.
This commit is contained in:
parent
117fc0409a
commit
7c52793e7c
1 changed files with 13 additions and 6 deletions
|
@ -951,9 +951,6 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
return GST_STATE_CHANGE_FAILURE;
|
return GST_STATE_CHANGE_FAILURE;
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
glimage_sink->overlay_compositor =
|
|
||||||
gst_gl_overlay_compositor_new (glimage_sink->context);
|
|
||||||
|
|
||||||
g_atomic_int_set (&glimage_sink->to_quit, 0);
|
g_atomic_int_set (&glimage_sink->to_quit, 0);
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
||||||
|
@ -1011,6 +1008,11 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||||
|
if (glimage_sink->overlay_compositor) {
|
||||||
|
gst_object_unref (glimage_sink->overlay_compositor);
|
||||||
|
glimage_sink->overlay_compositor = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (glimage_sink->context) {
|
if (glimage_sink->context) {
|
||||||
GstGLWindow *window = gst_gl_context_get_window (glimage_sink->context);
|
GstGLWindow *window = gst_gl_context_get_window (glimage_sink->context);
|
||||||
|
|
||||||
|
@ -1028,9 +1030,6 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
|
||||||
g_signal_handler_disconnect (window, glimage_sink->mouse_sig_id);
|
g_signal_handler_disconnect (window, glimage_sink->mouse_sig_id);
|
||||||
glimage_sink->mouse_sig_id = 0;
|
glimage_sink->mouse_sig_id = 0;
|
||||||
|
|
||||||
gst_object_unref (glimage_sink->overlay_compositor);
|
|
||||||
glimage_sink->overlay_compositor = NULL;
|
|
||||||
|
|
||||||
gst_object_unref (window);
|
gst_object_unref (window);
|
||||||
gst_object_unref (glimage_sink->context);
|
gst_object_unref (glimage_sink->context);
|
||||||
glimage_sink->context = NULL;
|
glimage_sink->context = NULL;
|
||||||
|
@ -1335,6 +1334,14 @@ prepare_next_buffer (GstGLImageSink * glimage_sink)
|
||||||
info = &glimage_sink->in_info;
|
info = &glimage_sink->in_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!glimage_sink->overlay_compositor) {
|
||||||
|
if (!(glimage_sink->overlay_compositor =
|
||||||
|
gst_gl_overlay_compositor_new (glimage_sink->context))) {
|
||||||
|
gst_buffer_unref (next_buffer);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gst_gl_overlay_compositor_upload_overlays (glimage_sink->overlay_compositor,
|
gst_gl_overlay_compositor_upload_overlays (glimage_sink->overlay_compositor,
|
||||||
next_buffer);
|
next_buffer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue