summaryrefslogtreecommitdiff
path: root/libs/midi++2/jack_midiport.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-08-06 22:22:35 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-08-06 22:22:35 +0000
commit8164a0992d005659fe4cce1dce12f6464438f371 (patch)
tree5f1a95ee980d5f08f80dd1843275c98ed69b9a39 /libs/midi++2/jack_midiport.cc
parent6954080ce18e0eee08361c02b1f25bd4512e9d90 (diff)
* fixed JACK_MidiPort to get the events into the slave
git-svn-id: svn://localhost/ardour2/branches/3.0@3662 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/midi++2/jack_midiport.cc')
-rw-r--r--libs/midi++2/jack_midiport.cc22
1 files changed, 21 insertions, 1 deletions
diff --git a/libs/midi++2/jack_midiport.cc b/libs/midi++2/jack_midiport.cc
index 0b49517212..5b9fb79a4f 100644
--- a/libs/midi++2/jack_midiport.cc
+++ b/libs/midi++2/jack_midiport.cc
@@ -60,9 +60,29 @@ JACK_MidiPort::cycle_start (nframes_t nframes)
_last_read_index = 0;
_last_write_timestamp = 0;
+ // output
void *buffer = jack_port_get_buffer (_jack_output_port, nframes);
jack_midi_clear_buffer (buffer);
flush (buffer);
+
+ // input
+ void* jack_buffer = jack_port_get_buffer(_jack_input_port, nframes);
+ const nframes_t event_count = jack_midi_get_event_count(jack_buffer);
+
+ jack_midi_event_t ev;
+
+ for (nframes_t i=0; i < event_count; ++i) {
+
+ jack_midi_event_get (&ev, jack_buffer, i);
+
+ if (input_parser) {
+ input_parser->raw_preparse (*input_parser, ev.buffer, ev.size);
+ for (size_t i = 0; i < ev.size; i++) {
+ input_parser->scanner (ev.buffer[i]);
+ }
+ input_parser->raw_postparse (*input_parser, ev.buffer, ev.size);
+ }
+ }
}
int
@@ -170,7 +190,7 @@ JACK_MidiPort::read(byte * buf, size_t bufsize)
{
assert(_currently_in_cycle);
assert(_jack_input_port);
-
+
jack_midi_event_t ev;
int err = jack_midi_event_get (&ev,