diff options
author | David Robillard <d@drobilla.net> | 2007-04-08 19:04:12 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-04-08 19:04:12 +0000 |
commit | 40e4cf5d669a654728881a00a3659fc3bca0e546 (patch) | |
tree | 90bbb4f8e35a96a8911a3ff4c834a48dfd577628 /src/libs/engine/AlsaMidiDriver.cpp | |
parent | c2a43092234a32cfea8ba50d607494273624af07 (diff) | |
download | ingen-40e4cf5d669a654728881a00a3659fc3bca0e546.tar.gz ingen-40e4cf5d669a654728881a00a3659fc3bca0e546.tar.bz2 ingen-40e4cf5d669a654728881a00a3659fc3bca0e546.zip |
Alsa MIDI compile fixes.
make distcheck fixes.
git-svn-id: http://svn.drobilla.net/lad/ingen@424 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/AlsaMidiDriver.cpp')
-rw-r--r-- | src/libs/engine/AlsaMidiDriver.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/libs/engine/AlsaMidiDriver.cpp b/src/libs/engine/AlsaMidiDriver.cpp index bbec1ab1..a1638077 100644 --- a/src/libs/engine/AlsaMidiDriver.cpp +++ b/src/libs/engine/AlsaMidiDriver.cpp @@ -35,7 +35,7 @@ namespace Ingen { //// AlsaMidiPort //// -AlsaMidiPort::AlsaMidiPort(AlsaMidiDriver* driver, DuplexPort<MidiBuffer>* patch_port) +AlsaMidiPort::AlsaMidiPort(AlsaMidiDriver* driver, DuplexPort* patch_port) : DriverPort(patch_port->is_input()), Raul::ListNode<AlsaMidiPort*>(this), _driver(driver), @@ -125,16 +125,20 @@ AlsaMidiPort::prepare_block(const SampleCount block_start, const SampleCount blo { assert(block_end >= block_start); - snd_seq_event_t* ev = NULL; - MidiMessage* message = NULL; - size_t nu_events = 0; - size_t event_size = 0; // decoded length of Alsa event in bytes - int timestamp = 0; + const SampleCount nframes = block_end - block_start; + snd_seq_event_t* ev = NULL; + size_t num_events = 0; + size_t event_size = 0; // decoded length of Alsa event in bytes + int timestamp = 0; + MidiBuffer* patch_buf = dynamic_cast<MidiBuffer*>(_patch_port->buffer(0)); + assert(patch_buf); + + patch_buf->prepare_write(nframes); + while (!_events.empty() && _events.front().time.tick < block_end) { - assert(nu_events < _patch_port->buffer_size()); + assert(num_events < _patch_port->buffer_size()); ev = &_events.front(); - message = &_patch_port->buffer(0)->data()[nu_events]; timestamp = ev->time.tick - block_start; if (timestamp < 0) { @@ -149,20 +153,17 @@ AlsaMidiPort::prepare_block(const SampleCount block_start, const SampleCount blo // FIXME: is this realtime safe? if ((event_size = snd_midi_event_decode(_driver->event_coder(), - _midi_pool[nu_events], MAX_MIDI_EVENT_SIZE, ev)) > 0) { - message->size = event_size; - message->time = timestamp; - message->buffer = _midi_pool[nu_events]; - ++nu_events; + _midi_pool[num_events], MAX_MIDI_EVENT_SIZE, ev)) > 0) { + + patch_buf->put_event(timestamp, event_size, _midi_pool[num_events]); + ++num_events; + } else { cerr << "[AlsaMidiPort] Unable to decode MIDI event" << endl; } _events.pop(); } - - _patch_port->buffer(0)->filled_size(nu_events); - //_patch_port->tied_port()->buffer(0)->filled_size(nu_events); } |