gl: fix a few other leaks when not getting to PAUSED

This commit is contained in:
Matthew Waters 2019-03-07 02:01:09 +11:00
parent 86aa568383
commit 4e13980e10
2 changed files with 40 additions and 0 deletions

View 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;
}

View 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;