gl: fix a few other leaks when not getting to PAUSED
authorMatthew Waters <matthew@centricular.com>
Wed, 6 Mar 2019 15:01:09 +0000 (02:01 +1100)
committerMatthew Waters <matthew@centricular.com>
Wed, 6 Mar 2019 15:01:09 +0000 (02:01 +1100)
ext/gl/gstgluploadelement.c
gst-libs/gst/gl/gstglbasefilter.c

index eaaeaed..30af7d0 100644 (file)
@@ -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;
+}
index 6a67b73..155d900 100644 (file)
@@ -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;