diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-01-08 09:19:25 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-01-08 09:23:05 -0500 |
commit | 3d5e3458003c08f19d6d706f4fa1add0b41e3056 (patch) | |
tree | 56aaa9dee54746dbc0971f32c9888d968eec720d /libs/backends/coreaudio/coreaudio_backend.cc | |
parent | 5a766dc24d75cc4148a45253846dbebfe7d626b2 (diff) |
coreaudio: reset MIDI parsers when entering and leaving freewheeling
Diffstat (limited to 'libs/backends/coreaudio/coreaudio_backend.cc')
-rw-r--r-- | libs/backends/coreaudio/coreaudio_backend.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index ee03173cab..ebe8d62880 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -1562,6 +1562,17 @@ CoreAudioBackend::pre_process () } } +void +CoreAudioBackend::reset_midi_parsers () +{ + for (std::vector<CoreBackendPort*>::const_iterator it = _system_midi_in.begin (); it != _system_midi_in.end (); ++it) { + CoreMidiPort* port = dynamic_cast<CoreMidiPort*>(*it); + if (port) { + port->reset_parser (); + } + } +} + void * CoreAudioBackend::freewheel_thread () { @@ -1587,6 +1598,7 @@ CoreAudioBackend::freewheel_thread () _freewheel = false; // first mark as disabled _reinit_thread_callback = true; // hand over _main_thread _freewheel_ack = false; // prepare next handshake + reset_midi_parsers (); _midiio->set_enabled(true); engine.freewheel_callback (_freewheeling); } else { @@ -1614,6 +1626,7 @@ CoreAudioBackend::freewheel_thread () _main_thread = pthread_self(); AudioEngine::thread_init_callback (this); _midiio->set_enabled(false); + reset_midi_parsers (); } // process port updates first in every cycle. @@ -2106,6 +2119,17 @@ CoreMidiPort::queue_event ( } void +CoreMidiPort::reset_parser () +{ + _event._pending = false; + _first_time = true; + _unbuffered_bytes = 0; + _total_bytes = 0; + _expected_bytes = 0; + _status_byte = 0; +} + +void CoreMidiPort::clear_events () { CoreMidiBuffer* mbuf = static_cast<CoreMidiBuffer*>(get_buffer(0)); |