From 40e4cf5d669a654728881a00a3659fc3bca0e546 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 8 Apr 2007 19:04:12 +0000 Subject: Alsa MIDI compile fixes. make distcheck fixes. git-svn-id: http://svn.drobilla.net/lad/ingen@424 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/AlsaMidiDriver.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'src/libs/engine/AlsaMidiDriver.cpp') 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* patch_port) +AlsaMidiPort::AlsaMidiPort(AlsaMidiDriver* driver, DuplexPort* patch_port) : DriverPort(patch_port->is_input()), Raul::ListNode(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(_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); } -- cgit v1.2.1