mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-04 12:45:45 +01:00
fix endless messages about MIDI events being dropped.
track-owned MIDI port buffers (at the Ardour level) get ::flush_buffers() called twice, once by Delivery::flush_buffers() which is called at the end of MidiTrack::rol() to push data out in graph order, and then finally as a last-chance effort in PortManager::cycle_end(). This should not cause a repeated attempt to write the same data, but it was. Fixed by marking the buffer empty once its data has been flushed into a backend port buffer.
This commit is contained in:
parent
78e3864c5d
commit
3e4b608724
1 changed files with 15 additions and 1 deletions
|
|
@ -174,12 +174,21 @@ MidiPort::flush_buffers (pframes_t nframes)
|
|||
{
|
||||
if (sends_output ()) {
|
||||
|
||||
void* port_buffer = port_engine.get_buffer (_port_handle, nframes);
|
||||
void* port_buffer = 0;
|
||||
|
||||
if (_resolve_required) {
|
||||
port_buffer = port_engine.get_buffer (_port_handle, nframes);
|
||||
/* resolve all notes at the start of the buffer */
|
||||
resolve_notes (port_buffer, 0);
|
||||
_resolve_required = false;
|
||||
}
|
||||
|
||||
if (_buffer->empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!port_buffer) {
|
||||
port_buffer = port_engine.get_buffer (_port_handle, nframes);
|
||||
}
|
||||
|
||||
for (MidiBuffer::iterator i = _buffer->begin(); i != _buffer->end(); ++i) {
|
||||
|
|
@ -201,6 +210,11 @@ MidiPort::flush_buffers (pframes_t nframes)
|
|||
<< " + " << _port_buffer_offset << endl;
|
||||
}
|
||||
}
|
||||
|
||||
/* done.. the data has moved to the port buffer, mark it so
|
||||
*/
|
||||
|
||||
_buffer->clear ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue