mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 08:14:58 +01:00
coreaudio: reset MIDI parsers when entering and leaving freewheeling
This commit is contained in:
parent
5a766dc24d
commit
3d5e345800
2 changed files with 27 additions and 0 deletions
|
|
@ -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 *
|
void *
|
||||||
CoreAudioBackend::freewheel_thread ()
|
CoreAudioBackend::freewheel_thread ()
|
||||||
{
|
{
|
||||||
|
|
@ -1587,6 +1598,7 @@ CoreAudioBackend::freewheel_thread ()
|
||||||
_freewheel = false; // first mark as disabled
|
_freewheel = false; // first mark as disabled
|
||||||
_reinit_thread_callback = true; // hand over _main_thread
|
_reinit_thread_callback = true; // hand over _main_thread
|
||||||
_freewheel_ack = false; // prepare next handshake
|
_freewheel_ack = false; // prepare next handshake
|
||||||
|
reset_midi_parsers ();
|
||||||
_midiio->set_enabled(true);
|
_midiio->set_enabled(true);
|
||||||
engine.freewheel_callback (_freewheeling);
|
engine.freewheel_callback (_freewheeling);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1614,6 +1626,7 @@ CoreAudioBackend::freewheel_thread ()
|
||||||
_main_thread = pthread_self();
|
_main_thread = pthread_self();
|
||||||
AudioEngine::thread_init_callback (this);
|
AudioEngine::thread_init_callback (this);
|
||||||
_midiio->set_enabled(false);
|
_midiio->set_enabled(false);
|
||||||
|
reset_midi_parsers ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// process port updates first in every cycle.
|
// process port updates first in every cycle.
|
||||||
|
|
@ -2105,6 +2118,17 @@ CoreMidiPort::queue_event (
|
||||||
return CoreAudioBackend::_midi_event_put (port_buffer, timestamp, buffer, size);
|
return CoreAudioBackend::_midi_event_put (port_buffer, timestamp, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CoreMidiPort::reset_parser ()
|
||||||
|
{
|
||||||
|
_event._pending = false;
|
||||||
|
_first_time = true;
|
||||||
|
_unbuffered_bytes = 0;
|
||||||
|
_total_bytes = 0;
|
||||||
|
_expected_bytes = 0;
|
||||||
|
_status_byte = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CoreMidiPort::clear_events ()
|
CoreMidiPort::clear_events ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,7 @@ class CoreMidiPort : public CoreBackendPort {
|
||||||
|
|
||||||
void parse_events (const uint64_t time, const uint8_t *data, const size_t size);
|
void parse_events (const uint64_t time, const uint8_t *data, const size_t size);
|
||||||
void clear_events ();
|
void clear_events ();
|
||||||
|
void reset_parser ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CoreMidiBuffer _buffer[2];
|
CoreMidiBuffer _buffer[2];
|
||||||
|
|
@ -512,6 +513,8 @@ class CoreAudioBackend : public AudioBackend {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reset_midi_parsers ();
|
||||||
|
|
||||||
}; // class CoreAudioBackend
|
}; // class CoreAudioBackend
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue