diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-03-21 16:05:00 +0100 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-03-21 16:06:46 +0100 |
commit | adae7f18594179b9109e9c353885eb07061d1a66 (patch) | |
tree | 10e07202dbed5ecb9156718ebaa1db3653b84d21 /gst/midi | |
parent | 7498d104a7390eb6a7c096d968bfd213fe481471 (diff) | |
download | gstreamer-plugins-bad-adae7f18594179b9109e9c353885eb07061d1a66.tar.gz |
midiparse: duration is max of all track durations
Diffstat (limited to 'gst/midi')
-rw-r--r-- | gst/midi/midiparse.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gst/midi/midiparse.c b/gst/midi/midiparse.c index 0ded6ceed..8a39984fd 100644 --- a/gst/midi/midiparse.c +++ b/gst/midi/midiparse.c @@ -631,6 +631,7 @@ parse_MTrk (GstMidiParse * midiparse, guint8 * data, guint size) { GstMidiTrack *track; GstMidiCallbacks cb = { NULL, NULL, NULL }; + GstClockTime duration; /* ignore excess tracks */ if (midiparse->track_count >= midiparse->ntracks) @@ -649,11 +650,14 @@ parse_MTrk (GstMidiParse * midiparse, guint8 * data, guint size) handle_next_event (midiparse, track, &cb, NULL); } - midiparse->segment.duration = gst_util_uint64_scale (track->pulse, + duration = gst_util_uint64_scale (track->pulse, 1000 * midiparse->tempo, midiparse->division); GST_DEBUG_OBJECT (midiparse, "duration %" GST_TIME_FORMAT, - GST_TIME_ARGS (midiparse->segment.duration)); + GST_TIME_ARGS (duration)); + + if (duration > midiparse->segment.duration) + midiparse->segment.duration = duration; reset_track (midiparse, track); @@ -796,6 +800,7 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse) GST_DEBUG_OBJECT (midiparse, "Parsing song"); gst_segment_init (&midiparse->segment, GST_FORMAT_TIME); + midiparse->segment.duration = 0; midiparse->pulse = 0; size = gst_adapter_available (midiparse->adapter); @@ -817,6 +822,9 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse) length -= consumed; } + GST_DEBUG_OBJECT (midiparse, "song duration %" GST_TIME_FORMAT, + GST_TIME_ARGS (midiparse->segment.duration)); + outcaps = gst_pad_get_pad_template_caps (midiparse->srcpad); gst_pad_set_caps (midiparse->srcpad, outcaps); gst_caps_unref (outcaps); |