From bd21c474e547d49338ea0efd452895de1e147cd5 Mon Sep 17 00:00:00 2001 From: Jesse Chappell Date: Fri, 6 Jan 2006 04:59:17 +0000 Subject: 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 --- libs/midi++2/alsa_sequencer_midiport.cc | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'libs/midi++2') 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) -- cgit v1.2.3