summaryrefslogtreecommitdiff
path: root/gst/midi
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2013-03-21 16:05:00 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2013-03-21 16:06:46 +0100
commitadae7f18594179b9109e9c353885eb07061d1a66 (patch)
tree10e07202dbed5ecb9156718ebaa1db3653b84d21 /gst/midi
parent7498d104a7390eb6a7c096d968bfd213fe481471 (diff)
downloadgstreamer-plugins-bad-adae7f18594179b9109e9c353885eb07061d1a66.tar.gz
midiparse: duration is max of all track durations
Diffstat (limited to 'gst/midi')
-rw-r--r--gst/midi/midiparse.c12
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);