mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 14:06:23 +00:00
gldisplay: add support removing a context from the internal list
This commit is contained in:
parent
55e80b550e
commit
4c008895ce
2 changed files with 48 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue