From 40d2693d074038fd2a7648f371bd7c9d39ce1b5b Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Mon, 17 Aug 2015 18:35:58 +0200 Subject: [PATCH] glbasefilter: only call gl_{stop,start} if the context changed Removes the redundant GL object creation/deletion on every decide_allocation call which is being called for every caps change. Thus reduces the required GL state changes on reconfigure events which are being sent by glimagesink/xvimagesink --- gst-libs/gst/gl/gstglbasefilter.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gst-libs/gst/gl/gstglbasefilter.c b/gst-libs/gst/gl/gstglbasefilter.c index c89d836388..68cc114c7e 100644 --- a/gst-libs/gst/gl/gstglbasefilter.c +++ b/gst-libs/gst/gl/gstglbasefilter.c @@ -327,6 +327,10 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans, { GstGLBaseFilter *filter = GST_GL_BASE_FILTER (trans); GError *error = NULL; + gboolean new_context = FALSE; + + if (!filter->context) + new_context = TRUE; _find_local_gl_context (filter); @@ -349,14 +353,17 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans, GST_OBJECT_UNLOCK (filter->display); } - if (filter->priv->gl_started) - gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_stop, + if (new_context) { + if (filter->priv->gl_started) + gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_stop, + filter); + + gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_start, filter); - gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_start, - filter); - if (!filter->priv->gl_result) - goto error; + if (!filter->priv->gl_result) + goto error; + } return TRUE;