diff options
author | Jesse Chappell <jesse@essej.net> | 2006-01-06 04:59:17 +0000 |
---|---|---|
committer | Jesse Chappell <jesse@essej.net> | 2006-01-06 04:59:17 +0000 |
commit | bd21c474e547d49338ea0efd452895de1e147cd5 (patch) | |
tree | 2993bc781777530afc180313c9f69cc898f851e0 /libs/midi++2 | |
parent | 18844bac7aa0747453ed4d04c4a462f2044a43bb (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.cc | 20 |
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) |