glcontext: add API to retreive the thread that context is active in
authorMatthew Waters <ystreet00@gmail.com>
Sun, 21 Sep 2014 11:30:58 +0000 (21:30 +1000)
committerMatthew Waters <ystreet00@gmail.com>
Sun, 21 Sep 2014 11:30:58 +0000 (21:30 +1000)
docs/libs/gst-plugins-bad-libs-sections.txt
gst-libs/gst/gl/gstglcontext.c
gst-libs/gst/gl/gstglcontext.h

index 55e2a33..0d83986 100644 (file)
@@ -804,6 +804,7 @@ gst_gl_context_get_display
 gst_gl_context_get_gl_api
 gst_gl_context_get_gl_context
 gst_gl_context_get_gl_platform
+gst_gl_context_get_thread
 gst_gl_context_check_feature
 gst_gl_context_check_gl_version
 gst_gl_context_get_gl_version
index 51ea364..78e6f94 100644 (file)
@@ -139,6 +139,7 @@ struct _GstGLContextPrivate
   GstGLDisplay *display;
 
   GThread *gl_thread;
+  GThread *active_thread;
 
   /* conditions */
   GMutex render_lock;
@@ -407,12 +408,35 @@ gst_gl_context_activate (GstGLContext * context, gboolean activate)
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->activate != NULL, FALSE);
 
+  GST_OBJECT_LOCK (context);
   result = context_class->activate (context, activate);
 
+  context->priv->active_thread = result
+      && activate ? context->priv->gl_thread : NULL;
+  GST_OBJECT_UNLOCK (context);
+
   return result;
 }
 
 /**
+ * gst_gl_context_get_thread:
+ * @context: a #GstGLContext
+ *
+ * Returns: The #GThread, @context is current in or NULL
+ */
+GThread *
+gst_gl_context_get_thread (GstGLContext * context)
+{
+  GThread *ret;
+
+  GST_OBJECT_LOCK (context);
+  ret = context->priv->active_thread;
+  GST_OBJECT_UNLOCK (context);
+
+  return ret;
+}
+
+/**
  * gst_gl_context_get_gl_api:
  * @context: a #GstGLContext
  *
index c7df038..7d06981 100644 (file)
@@ -120,6 +120,7 @@ GstGLContext * gst_gl_context_new_wrapped (GstGLDisplay *display,
                                            GstGLAPI available_apis);
 
 gboolean      gst_gl_context_activate         (GstGLContext *context, gboolean activate);
+GThread *     gst_gl_context_get_thread       (GstGLContext *context);
 
 GstGLDisplay * gst_gl_context_get_display (GstGLContext *context);
 gpointer      gst_gl_context_get_proc_address (GstGLContext *context, const gchar *name);