summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio_utils.c
diff options
context:
space:
mode:
authorAman Gupta <aman@tmm1.net>2019-02-08 15:15:58 -0800
committerAman Gupta <aman@tmm1.net>2019-04-05 10:29:44 +0700
commite35aca3cb4a6e93a2eda8c14c69ab0fbadf7c2ee (patch)
tree4d088da90f0276ff2de343ad036022d17987dcde /audio/out/ao_coreaudio_utils.c
parent6c913149001b242aa777d6a1e67f62162c1e6694 (diff)
downloadmpv-e35aca3cb4a6e93a2eda8c14c69ab0fbadf7c2ee.tar.bz2
mpv-e35aca3cb4a6e93a2eda8c14c69ab0fbadf7c2ee.tar.xz
ao/audiounit: improve a/v sync
This more closely mimics ao_coreaudio, on which this driver was originally based. Signed-off-by: Aman Gupta <aman@tmm1.net>
Diffstat (limited to 'audio/out/ao_coreaudio_utils.c')
-rw-r--r--audio/out/ao_coreaudio_utils.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/audio/out/ao_coreaudio_utils.c b/audio/out/ao_coreaudio_utils.c
index d458b581ae..b55bf1c0df 100644
--- a/audio/out/ao_coreaudio_utils.c
+++ b/audio/out/ao_coreaudio_utils.c
@@ -31,6 +31,8 @@
#if HAVE_COREAUDIO
#include "audio/out/ao_coreaudio_properties.h"
#include <CoreAudio/HostTime.h>
+#else
+#include <mach/mach_time.h>
#endif
CFStringRef cfstr_from_cstr(char *str)
@@ -310,9 +312,9 @@ int64_t ca_frames_to_us(struct ao *ao, uint32_t frames)
return frames / (float) ao->samplerate * 1e6;
}
-#if HAVE_COREAUDIO
int64_t ca_get_latency(const AudioTimeStamp *ts)
{
+#if HAVE_COREAUDIO
uint64_t out = AudioConvertHostTimeToNanos(ts->mHostTime);
uint64_t now = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime());
@@ -320,8 +322,22 @@ int64_t ca_get_latency(const AudioTimeStamp *ts)
return 0;
return (out - now) * 1e-3;
+#else
+ static mach_timebase_info_data_t timebase;
+ if (timebase.denom == 0)
+ mach_timebase_info(&timebase);
+
+ uint64_t out = ts->mHostTime;
+ uint64_t now = mach_absolute_time();
+
+ if (now > out)
+ return 0;
+
+ return (out - now) * timebase.numer / timebase.denom / 1e3;
+#endif
}
+#if HAVE_COREAUDIO
bool ca_stream_supports_compressed(struct ao *ao, AudioStreamID stream)
{
AudioStreamRangedDescription *formats = NULL;