From 4e13980e107f27317475f51f366e9dddde092738 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Thu, 7 Mar 2019 02:01:09 +1100 Subject: [PATCH] gl: fix a few other leaks when not getting to PAUSED --- ext/gl/gstgluploadelement.c | 35 +++++++++++++++++++++++++++++++ gst-libs/gst/gl/gstglbasefilter.c | 5 +++++ 2 files changed, 40 insertions(+) diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c index eaaeaed33a..30af7d0a3b 100644 --- a/ext/gl/gstgluploadelement.c +++ b/ext/gl/gstgluploadelement.c @@ -54,6 +54,10 @@ gst_gl_upload_element_prepare_output_buffer (GstBaseTransform * bt, static GstFlowReturn gst_gl_upload_element_transform (GstBaseTransform * bt, GstBuffer * buffer, GstBuffer * outbuf); static gboolean gst_gl_upload_element_stop (GstBaseTransform * bt); +static GstStateChangeReturn +gst_gl_upload_element_change_state (GstElement * element, + GstStateChange transition); + static GstStaticPadTemplate gst_gl_upload_element_src_pad_template = GST_STATIC_PAD_TEMPLATE ("src", @@ -93,6 +97,8 @@ gst_gl_upload_element_class_init (GstGLUploadElementClass * klass) bt_class->passthrough_on_same_caps = TRUE; + element_class->change_state = gst_gl_upload_element_change_state; + gst_element_class_add_static_pad_template (element_class, &gst_gl_upload_element_src_pad_template); @@ -273,3 +279,32 @@ gst_gl_upload_element_transform (GstBaseTransform * bt, GstBuffer * buffer, { return GST_FLOW_OK; } + +static GstStateChangeReturn +gst_gl_upload_element_change_state (GstElement * element, + GstStateChange transition) +{ + GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (element); + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; + + GST_DEBUG_OBJECT (upload, "changing state: %s => %s", + gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), + gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + switch (transition) { + case GST_STATE_CHANGE_READY_TO_NULL: + if (upload->upload) { + gst_object_unref (upload->upload); + upload->upload = NULL; + } + break; + default: + break; + } + + return ret; +} diff --git a/gst-libs/gst/gl/gstglbasefilter.c b/gst-libs/gst/gl/gstglbasefilter.c index 6a67b73ea4..155d9002b7 100644 --- a/gst-libs/gst/gl/gstglbasefilter.c +++ b/gst-libs/gst/gl/gstglbasefilter.c @@ -398,6 +398,11 @@ gst_gl_base_filter_change_state (GstElement * element, gst_object_unref (filter->display); filter->display = NULL; } + + if (filter->context) { + gst_object_unref (filter->context); + filter->context = NULL; + } break; default: break;