summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst-libs/gst/gl/gstglviewconvert.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c
index ce4fad0cb..fe9053761 100644
--- a/gst-libs/gst/gl/gstglviewconvert.c
+++ b/gst-libs/gst/gl/gstglviewconvert.c
@@ -358,11 +358,20 @@ void
gst_gl_view_convert_set_context (GstGLViewConvert * viewconvert,
GstGLContext * context)
{
+ GstGLContext *old_context = NULL;
+
g_return_if_fail (GST_IS_GL_VIEW_CONVERT (viewconvert));
- if (gst_object_replace ((GstObject **) & viewconvert->context,
- GST_OBJECT (context)))
+ GST_OBJECT_LOCK (viewconvert);
+ if (context != viewconvert->context) {
gst_gl_view_convert_reset (viewconvert);
+ if (viewconvert->context)
+ old_context = viewconvert->context;
+ viewconvert->context = context ? gst_object_ref (context) : NULL;
+ }
+ GST_OBJECT_UNLOCK (viewconvert);
+
+ gst_clear_object (&old_context);
}
static gboolean