Remove pad-removed handlers after setting the decodebins to NULL.

They do needed cleanup; without this we leak selector requestpads.
This commit is contained in:
Michael Smith 2009-01-30 17:48:23 -08:00
parent 61e81ada2c
commit b36d8f3e11

View file

@ -2133,13 +2133,13 @@ activate_group (GstPlayBin * playbin, GstSourceGroup * group)
if (group->uridecodebin) { if (group->uridecodebin) {
GST_DEBUG_OBJECT (playbin, "reusing existing uridecodebin"); GST_DEBUG_OBJECT (playbin, "reusing existing uridecodebin");
REMOVE_SIGNAL (group->uridecodebin, group->pad_added_id); REMOVE_SIGNAL (group->uridecodebin, group->pad_added_id);
REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id);
REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id); REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id);
REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id); REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id);
REMOVE_SIGNAL (group->uridecodebin, group->drained_id); REMOVE_SIGNAL (group->uridecodebin, group->drained_id);
REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id);
REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id); REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id);
gst_element_set_state (group->uridecodebin, GST_STATE_NULL); gst_element_set_state (group->uridecodebin, GST_STATE_NULL);
REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id);
uridecodebin = group->uridecodebin; uridecodebin = group->uridecodebin;
} else { } else {
GST_DEBUG_OBJECT (playbin, "making new uridecodebin"); GST_DEBUG_OBJECT (playbin, "making new uridecodebin");
@ -2192,9 +2192,9 @@ activate_group (GstPlayBin * playbin, GstSourceGroup * group)
if (group->suburidecodebin) { if (group->suburidecodebin) {
GST_DEBUG_OBJECT (playbin, "reusing existing suburidecodebin"); GST_DEBUG_OBJECT (playbin, "reusing existing suburidecodebin");
REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id); REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id);
REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id); REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id);
gst_element_set_state (group->suburidecodebin, GST_STATE_NULL); gst_element_set_state (group->suburidecodebin, GST_STATE_NULL);
REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
suburidecodebin = group->suburidecodebin; suburidecodebin = group->suburidecodebin;
} else { } else {
GST_DEBUG_OBJECT (playbin, "making new suburidecodebin"); GST_DEBUG_OBJECT (playbin, "making new suburidecodebin");