summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2017-09-22 14:27:51 +1000
committerSebastian Dröge <sebastian@centricular.com>2017-12-11 13:55:11 +0200
commitbe5b414e3455d643bf0c6d2139ae693f66393be7 (patch)
treeec12bce063f2a7f085645f9eb234cc4033fd4a32
parentcbdbd8d4f6893e6042dbf7b8258e23a8d2aaf081 (diff)
downloadgstreamer-plugins-bad-be5b414e3455d643bf0c6d2139ae693f66393be7.tar.gz
vtdec: destroy and create the GL context on start()/stop()
Removes a reference count loop
-rw-r--r--sys/applemedia/vtdec.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/applemedia/vtdec.c b/sys/applemedia/vtdec.c
index d9c943d6a..57847a855 100644
--- a/sys/applemedia/vtdec.c
+++ b/sys/applemedia/vtdec.c
@@ -156,7 +156,6 @@ static void
gst_vtdec_init (GstVtdec * vtdec)
{
vtdec->reorder_queue = g_async_queue_new ();
- vtdec->ctxh = gst_gl_context_helper_new (GST_ELEMENT (vtdec));
}
void
@@ -167,7 +166,6 @@ gst_vtdec_finalize (GObject * object)
GST_DEBUG_OBJECT (vtdec, "finalize");
g_async_queue_unref (vtdec->reorder_queue);
- gst_gl_context_helper_free (vtdec->ctxh);
G_OBJECT_CLASS (gst_vtdec_parent_class)->finalize (object);
}
@@ -179,6 +177,9 @@ gst_vtdec_start (GstVideoDecoder * decoder)
GST_DEBUG_OBJECT (vtdec, "start");
+ if (!vtdec->ctxh)
+ vtdec->ctxh = gst_gl_context_helper_new (GST_ELEMENT (decoder));
+
return TRUE;
}
@@ -198,6 +199,10 @@ gst_vtdec_stop (GstVideoDecoder * decoder)
gst_video_texture_cache_free (vtdec->texture_cache);
vtdec->texture_cache = NULL;
+ if (vtdec->ctxh)
+ gst_gl_context_helper_free (vtdec->ctxh);
+ vtdec->ctxh = NULL;
+
GST_DEBUG_OBJECT (vtdec, "stop");
return TRUE;
@@ -320,6 +325,8 @@ gst_vtdec_negotiate (GstVideoDecoder * decoder)
/* call this regardless of whether caps have changed or not since a new
* local context could have become available
*/
+ if (!vtdec->ctxh)
+ vtdec->ctxh = gst_gl_context_helper_new (GST_ELEMENT (vtdec));
gst_gl_context_helper_ensure_context (vtdec->ctxh);
GST_INFO_OBJECT (vtdec, "pushing textures, context %p old context %p",
@@ -1016,6 +1023,8 @@ gst_vtdec_set_context (GstElement * element, GstContext * context)
GST_INFO_OBJECT (element, "setting context %s",
gst_context_get_context_type (context));
+ if (!vtdec->ctxh)
+ vtdec->ctxh = gst_gl_context_helper_new (element);
gst_gl_handle_set_context (element, context,
&vtdec->ctxh->display, &vtdec->ctxh->other_context);
GST_ELEMENT_CLASS (gst_vtdec_parent_class)->set_context (element, context);