summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/JackMidiDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-04-08 06:04:32 +0000
committerDavid Robillard <d@drobilla.net>2007-04-08 06:04:32 +0000
commite96c36c1a7abb062e36efc0ac95c35fedcef922e (patch)
tree826d5caa0392201472d12c02a1c3df4cf7b275be /src/libs/engine/JackMidiDriver.cpp
parent7d69e89f22304e37fa325ce4f39a374a02072a69 (diff)
downloadingen-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.cpp26
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);
}