Work around OSX MIDI devices that send no timestamps
[ardour.git] / libs / backends / coreaudio / coremidi_io.cc
index caf80105b01266786c9c500f089df75e90574b25..9d462aa10fc7718905c30cb97e39a017e690099d 100644 (file)
@@ -268,13 +268,21 @@ CoreMidiIo::recv_event (uint32_t port, double cycle_time_us, uint64_t &time, uin
                if ((*it)->timeStamp < end) {
                        if ((*it)->timeStamp < start) {
                                uint64_t dt = AudioConvertHostTimeToNanos(start - (*it)->timeStamp);
-                               if (dt > 1e7) { // 10ms,
+                               if (dt > 1e7 && (*it)->timeStamp != 0) { // 10ms slack and a timestamp is given
 #ifndef NDEBUG
                                        printf("Dropped Stale Midi Event. dt:%.2fms\n", dt * 1e-6);
 #endif
                                        it = _input_queue[port].erase(it);
                                        continue;
                                } else {
+                                       /* events without a valid timestamp, or events that arrived
+                                        * less than 10ms in the past are allowed and
+                                        * queued at the beginning of the cycle:
+                                        * time (relative to cycle start) = 0
+                                        *
+                                        * The latter use needed for the "Avid Artist" Control Surface
+                                        * the OSX driver sends no timestamps.
+                                        */
 #if 0
                                        printf("Stale Midi Event. dt:%.2fms\n", dt * 1e-6);
 #endif