diff options
author | rcombs <rcombs@rcombs.me> | 2022-12-09 16:32:22 -0600 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2022-12-10 18:15:46 +0200 |
commit | 2fa1e7d0b409f2ceb608d9b6c5d90106507595aa (patch) | |
tree | a12a48a953ca19b0d4197805d326f71068f6ee8b /audio/out/ao_coreaudio_utils.c | |
parent | 25b66256d7ff48254b2055a066e29f260414112f (diff) | |
download | mpv-2fa1e7d0b409f2ceb608d9b6c5d90106507595aa.tar.bz2 mpv-2fa1e7d0b409f2ceb608d9b6c5d90106507595aa.tar.xz |
ao_coreaudio: use device's nominal sample rate for latency properties
Fixes sync issues when using high-latency devices at non-native sample rates
Closes #10984
Diffstat (limited to 'audio/out/ao_coreaudio_utils.c')
-rw-r--r-- | audio/out/ao_coreaudio_utils.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/audio/out/ao_coreaudio_utils.c b/audio/out/ao_coreaudio_utils.c index b55bf1c0df..f7869c2453 100644 --- a/audio/out/ao_coreaudio_utils.c +++ b/audio/out/ao_coreaudio_utils.c @@ -456,7 +456,15 @@ int64_t ca_get_device_latency_us(struct ao *ao, AudioDeviceID device) } } - return ca_frames_to_us(ao, latency_frames); + double sample_rate = ao->samplerate; + OSStatus err = CA_GET_O(device, kAudioDevicePropertyNominalSampleRate, + &sample_rate); + CHECK_CA_WARN("cannot get device sample rate, falling back to AO sample rate!"); + if (err == noErr) { + MP_VERBOSE(ao, "Device sample rate: %f\n", sample_rate); + } + + return latency_frames / sample_rate * 1e6; } static OSStatus ca_change_format_listener( |