}
}
+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 ()
{
_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 {
_main_thread = pthread_self();
AudioEngine::thread_init_callback (this);
_midiio->set_enabled(false);
+ reset_midi_parsers ();
}
// process port updates first in every cycle.
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
CoreMidiPort::clear_events ()
{
void parse_events (const uint64_t time, const uint8_t *data, const size_t size);
void clear_events ();
+ void reset_parser ();
private:
CoreMidiBuffer _buffer[2];
}
return NULL;
}
+
+ void reset_midi_parsers ();
}; // class CoreAudioBackend