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
This commit is contained in:
Matthew Waters 2015-08-17 18:35:58 +02:00 committed by Tim-Philipp Müller
parent edd3c007ea
commit d45e0f807f

View file

@ -327,6 +327,10 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans,
{ {
GstGLBaseFilter *filter = GST_GL_BASE_FILTER (trans); GstGLBaseFilter *filter = GST_GL_BASE_FILTER (trans);
GError *error = NULL; GError *error = NULL;
gboolean new_context = FALSE;
if (!filter->context)
new_context = TRUE;
_find_local_gl_context (filter); _find_local_gl_context (filter);
@ -349,14 +353,17 @@ gst_gl_base_filter_decide_allocation (GstBaseTransform * trans,
GST_OBJECT_UNLOCK (filter->display); GST_OBJECT_UNLOCK (filter->display);
} }
if (filter->priv->gl_started) if (new_context) {
gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_stop, 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); filter);
gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_start, if (!filter->priv->gl_result)
filter); goto error;
if (!filter->priv->gl_result) }
goto error;
return TRUE; return TRUE;