diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-03-21 17:25:32 +0100 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-03-21 17:25:32 +0100 |
commit | 06e06b61595195b0e2b347ddf10c3d1d85cf7d1a (patch) | |
tree | 9d6e8324a68ba4b4da970b5d3e6b89870560674f /gst/midi/midiparse.c | |
parent | 7a14606b51499177f501a295881e8032beb9c06a (diff) | |
download | gstreamer-plugins-bad-06e06b61595195b0e2b347ddf10c3d1d85cf7d1a.tar.gz |
midiparse: clean up tracks
Diffstat (limited to 'gst/midi/midiparse.c')
-rw-r--r-- | gst/midi/midiparse.c | 22 |
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; |