gldisplay: add support removing a context from the internal list
This commit is contained in:
parent
55e80b550e
commit
4c008895ce
@ -874,3 +874,46 @@ out:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_display_remove_context:
|
||||||
|
* @display: a #GstGLDisplay
|
||||||
|
* @context: (transfer none): the #GstGLContext to remove
|
||||||
|
*
|
||||||
|
* Must be called with the object lock held.
|
||||||
|
*
|
||||||
|
* Since: 1.18
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_gl_display_remove_context (GstGLDisplay * display, GstGLContext * needle)
|
||||||
|
{
|
||||||
|
GstGLContext *context;
|
||||||
|
GList *prev = NULL, *l;
|
||||||
|
|
||||||
|
g_return_if_fail (GST_IS_GL_DISPLAY (display));
|
||||||
|
g_return_if_fail (GST_IS_GL_CONTEXT (needle));
|
||||||
|
|
||||||
|
l = display->priv->contexts;
|
||||||
|
|
||||||
|
while (l) {
|
||||||
|
GWeakRef *ref = l->data;
|
||||||
|
|
||||||
|
context = g_weak_ref_get (ref);
|
||||||
|
if (!context || context == needle) {
|
||||||
|
/* remove dead contexts */
|
||||||
|
g_weak_ref_clear (l->data);
|
||||||
|
g_free (l->data);
|
||||||
|
display->priv->contexts = g_list_delete_link (display->priv->contexts, l);
|
||||||
|
l = prev ? prev->next : display->priv->contexts;
|
||||||
|
if (context) {
|
||||||
|
GST_INFO_OBJECT (display, "removed context %" GST_PTR_FORMAT
|
||||||
|
" from internal list", context);
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_WARNING_OBJECT (display, "%" GST_PTR_FORMAT " was not found in this "
|
||||||
|
"display", needle);
|
||||||
|
}
|
||||||
|
@ -141,8 +141,11 @@ GST_GL_API
|
|||||||
GstGLContext * gst_gl_display_get_gl_context_for_thread (GstGLDisplay * display,
|
GstGLContext * gst_gl_display_get_gl_context_for_thread (GstGLDisplay * display,
|
||||||
GThread * thread);
|
GThread * thread);
|
||||||
GST_GL_API
|
GST_GL_API
|
||||||
gboolean gst_gl_display_add_context (GstGLDisplay * display,
|
gboolean gst_gl_display_add_context (GstGLDisplay * display,
|
||||||
GstGLContext * context);
|
GstGLContext * context);
|
||||||
|
GST_GL_API
|
||||||
|
void gst_gl_display_remove_context (GstGLDisplay * display,
|
||||||
|
GstGLContext * context);
|
||||||
|
|
||||||
GST_GL_API
|
GST_GL_API
|
||||||
GstGLWindow * gst_gl_display_create_window (GstGLDisplay * display);
|
GstGLWindow * gst_gl_display_create_window (GstGLDisplay * display);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user