From e96c36c1a7abb062e36efc0ac95c35fedcef922e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 8 Apr 2007 06:04:32 +0000 Subject: 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 --- src/libs/engine/JackMidiDriver.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/libs/engine/JackMidiDriver.cpp') 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* patch_port) +JackMidiPort::JackMidiPort(JackMidiDriver* driver, DuplexPort* patch_port) : DriverPort(patch_port->is_input()), Raul::ListNode(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(_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); } -- cgit v1.2.1