diff options
author | David Robillard <d@drobilla.net> | 2007-04-08 06:04:32 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-04-08 06:04:32 +0000 |
commit | e96c36c1a7abb062e36efc0ac95c35fedcef922e (patch) | |
tree | 826d5caa0392201472d12c02a1c3df4cf7b275be /src/libs/engine/JackMidiDriver.cpp | |
parent | 7d69e89f22304e37fa325ce4f39a374a02072a69 (diff) | |
download | ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.tar.gz ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.tar.bz2 ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.zip |
De-template-ification of port types (req. for LV2 MIDI, but nice code size reduction).
LV2 MIDI patching support (LV2 style MIDI throughout, inc. internal plugins).
git-svn-id: http://svn.drobilla.net/lad/ingen@415 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/JackMidiDriver.cpp')
-rw-r--r-- | src/libs/engine/JackMidiDriver.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/libs/engine/JackMidiDriver.cpp b/src/libs/engine/JackMidiDriver.cpp index e2f96ad7..ada9a439 100644 --- a/src/libs/engine/JackMidiDriver.cpp +++ b/src/libs/engine/JackMidiDriver.cpp @@ -24,7 +24,7 @@ #include "types.h" #include "ThreadManager.h" #include "AudioDriver.h" -#include "MidiMessage.h" +#include "MidiBuffer.h" #include "DuplexPort.h" #ifdef HAVE_LASH #include "LashDriver.h" @@ -36,7 +36,7 @@ namespace Ingen { //// JackMidiPort //// -JackMidiPort::JackMidiPort(JackMidiDriver* driver, DuplexPort<MidiMessage>* patch_port) +JackMidiPort::JackMidiPort(JackMidiDriver* driver, DuplexPort* patch_port) : DriverPort(patch_port->is_input()), Raul::ListNode<JackMidiPort*>(this), _driver(driver), @@ -75,25 +75,25 @@ JackMidiPort::prepare_block(const SampleCount block_start, const SampleCount blo void* jack_buffer = jack_port_get_buffer(_jack_port, nframes); const jack_nframes_t event_count = jack_midi_get_event_count(jack_buffer); - assert(event_count < _patch_port->buffer_size()); + assert(_patch_port->poly() == 1); + + MidiBuffer* patch_buf = dynamic_cast<MidiBuffer*>(_patch_port->buffer(0)); + assert(patch_buf); + + patch_buf->clear(); + patch_buf->reset_state(nframes); // Copy events from Jack port buffer into patch port buffer for (jack_nframes_t i=0; i < event_count; ++i) { - jack_midi_event_t* ev = (jack_midi_event_t*)&_patch_port->buffer(0)->value_at(i); - jack_midi_event_get(ev, jack_buffer, i); - - // MidiMessage and jack_midi_event_t* are the same thing :/ - MidiMessage* const message = &_patch_port->buffer(0)->data()[i]; - message->time = ev->time; - message->size = ev->size; - message->buffer = ev->buffer; + jack_midi_event_t ev; + jack_midi_event_get(&ev, jack_buffer, i); - assert(message->time < nframes); + patch_buf->put_event(ev.time, ev.size, ev.buffer); } //cerr << "Jack MIDI got " << event_count << " events." << endl; - _patch_port->buffer(0)->filled_size(event_count); + //_patch_port->buffer(0)->filled_size(event_count); //_patch_port->tied_port()->buffer(0)->filled_size(event_count); } |