summaryrefslogtreecommitdiff
path: root/gst/midi/midiparse.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2013-03-21 17:25:32 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2013-03-21 17:25:32 +0100
commit06e06b61595195b0e2b347ddf10c3d1d85cf7d1a (patch)
tree9d6e8324a68ba4b4da970b5d3e6b89870560674f /gst/midi/midiparse.c
parent7a14606b51499177f501a295881e8032beb9c06a (diff)
downloadgstreamer-plugins-bad-06e06b61595195b0e2b347ddf10c3d1d85cf7d1a.tar.gz
midiparse: clean up tracks
Diffstat (limited to 'gst/midi/midiparse.c')
-rw-r--r--gst/midi/midiparse.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gst/midi/midiparse.c b/gst/midi/midiparse.c
index 56c482cbe..8d84a212e 100644
--- a/gst/midi/midiparse.c
+++ b/gst/midi/midiparse.c
@@ -1060,6 +1060,24 @@ pause:
}
}
+static void
+free_track (GstMidiTrack * track, GstMidiParse * midiparse)
+{
+ g_slice_free (GstMidiTrack, track);
+}
+
+static void
+gst_midi_parse_reset (GstMidiParse * midiparse)
+{
+ gst_adapter_clear (midiparse->adapter);
+ g_free (midiparse->data);
+ midiparse->data = NULL;
+ g_list_foreach (midiparse->tracks, (GFunc) free_track, midiparse);
+ g_list_free (midiparse->tracks);
+ midiparse->tracks = NULL;
+ midiparse->track_count = 0;
+}
+
static GstStateChangeReturn
gst_midi_parse_change_state (GstElement * element, GstStateChange transition)
{
@@ -1086,9 +1104,7 @@ gst_midi_parse_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_adapter_clear (midiparse->adapter);
- g_free (midiparse->data);
- midiparse->data = NULL;
+ gst_midi_parse_reset (midiparse);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
break;