diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 89edc66e84..4e99bc767e 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -540,6 +540,31 @@ ARDOUR::get_available_sync_options () /** Return a monotonic value for the number of microseconds that have elapsed * since an arbitrary zero origin. */ + +#ifdef __MACH__ +/* Thanks Apple for not implementing this basic SUSv2, POSIX.1-2001 function + */ +#include +#define CLOCK_REALTIME 0 +#define CLOCK_MONOTONIC 0 +int +clock_gettime (int /*clk_id*/, struct timespec *t) +{ + static bool initialized = false; + static mach_timebase_info_data_t timebase; + if (!initialized) { + mach_timebase_info(&timebase); + initialized = true; + } + uint64_t time; + time = mach_absolute_time(); + double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom); + double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9); + t->tv_sec = seconds; + t->tv_nsec = nseconds; + return 0; +} +#endif microseconds_t ARDOUR::get_microseconds ()