gldisplay: add support removing a context from the internal list

This commit is contained in:
Matthew Waters 2020-02-04 14:04:21 +11:00 committed by GStreamer Merge Bot
parent 55e80b550e
commit 4c008895ce
2 changed files with 48 additions and 2 deletions

View file

@ -874,3 +874,46 @@ out:
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);
}

View file

@ -141,8 +141,11 @@ GST_GL_API
GstGLContext * gst_gl_display_get_gl_context_for_thread (GstGLDisplay * display,
GThread * thread);
GST_GL_API
gboolean gst_gl_display_add_context (GstGLDisplay * display,
GstGLContext * context);
gboolean gst_gl_display_add_context (GstGLDisplay * display,
GstGLContext * context);
GST_GL_API
void gst_gl_display_remove_context (GstGLDisplay * display,
GstGLContext * context);
GST_GL_API
GstGLWindow * gst_gl_display_create_window (GstGLDisplay * display);