diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 20:36:56 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 20:36:56 +0000 |
commit | 51de1d8436100f725f3576aefa24a2bd2057bc28 (patch) | |
tree | c6d1d5264b6d40a8d7ca34129f36b7d61e188af3 /osdep/timer-darwin.c | |
parent | Initial commit. (diff) | |
download | mpv-51de1d8436100f725f3576aefa24a2bd2057bc28.tar.xz mpv-51de1d8436100f725f3576aefa24a2bd2057bc28.zip |
Adding upstream version 0.37.0.upstream/0.37.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | osdep/timer-darwin.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/osdep/timer-darwin.c b/osdep/timer-darwin.c new file mode 100644 index 0000000..bb8a9b4 --- /dev/null +++ b/osdep/timer-darwin.c @@ -0,0 +1,48 @@ +/* + * Precise timer routines using Mach timing + * + * Copyright (c) 2003-2004, Dan Villiom Podlaski Christiansen + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + */ + +#include <unistd.h> +#include <stdint.h> +#include <stdlib.h> +#include <time.h> +#include <math.h> +#include <sys/time.h> +#include <mach/mach_time.h> + +#include "common/msg.h" +#include "timer.h" + +static double timebase_ratio_ns; + +void mp_sleep_ns(int64_t ns) +{ + uint64_t deadline = ns / timebase_ratio_ns + mach_absolute_time(); + mach_wait_until(deadline); +} + +uint64_t mp_raw_time_ns(void) +{ + return mach_absolute_time() * timebase_ratio_ns; +} + +void mp_raw_time_init(void) +{ + struct mach_timebase_info timebase; + + mach_timebase_info(&timebase); + timebase_ratio_ns = (double)timebase.numer / (double)timebase.denom; +} |