summaryrefslogtreecommitdiff
path: root/libs/midi++2
diff options
context:
space:
mode:
authorJesse Chappell <jesse@essej.net>2006-01-06 04:59:17 +0000
committerJesse Chappell <jesse@essej.net>2006-01-06 04:59:17 +0000
commitbd21c474e547d49338ea0efd452895de1e147cd5 (patch)
tree2993bc781777530afc180313c9f69cc898f851e0 /libs/midi++2
parent18844bac7aa0747453ed4d04c4a462f2044a43bb (diff)
committed RWlock fixes to libardour. added hw monitoring fixes from nick_m. minor alsa midi fix and update rate settings.
git-svn-id: svn://localhost/trunk/ardour2@244 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/midi++2')
-rw-r--r--libs/midi++2/alsa_sequencer_midiport.cc20
1 files changed, 16 insertions, 4 deletions
diff --git a/libs/midi++2/alsa_sequencer_midiport.cc b/libs/midi++2/alsa_sequencer_midiport.cc
index e0f6ad33e9..fca6707efd 100644
--- a/libs/midi++2/alsa_sequencer_midiport.cc
+++ b/libs/midi++2/alsa_sequencer_midiport.cc
@@ -83,13 +83,15 @@ int ALSA_SequencerMidiPort::write (byte *msg, size_t msglen)
{
TR_FN ();
int R;
+ int totwritten = 0;
snd_midi_event_reset_encode (encoder);
int nwritten = snd_midi_event_encode (encoder, msg, msglen, &SEv);
TR_VAL (nwritten);
- if (0 < nwritten) {
+ while (0 < nwritten) {
if (0 <= (R = snd_seq_event_output (seq, &SEv)) &&
0 <= (R = snd_seq_drain_output (seq))) {
bytes_written += nwritten;
+ totwritten += nwritten;
if (output_parser) {
output_parser->raw_preparse (*output_parser, msg, nwritten);
for (int i = 0; i < nwritten; i++) {
@@ -97,13 +99,23 @@ int ALSA_SequencerMidiPort::write (byte *msg, size_t msglen)
}
output_parser->raw_postparse (*output_parser, msg, nwritten);
}
- return nwritten;
} else {
TR_VAL(R);
return R;
}
- } else
- return nwritten;
+
+ msglen -= nwritten;
+ msg += nwritten;
+ if (msglen > 0) {
+ nwritten = snd_midi_event_encode (encoder, msg, msglen, &SEv);
+ TR_VAL(nwritten);
+ }
+ else {
+ break;
+ }
+ }
+
+ return totwritten;
}
int ALSA_SequencerMidiPort::read (byte *buf, size_t max)