summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-04-28 22:09:51 +0200
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>2015-04-29 18:40:20 +0900
commit63bd171c0d564fa2398df78b642c097d69c5a568 (patch)
treee9f0d269f631d4e4fee200017e093826cafee1ad
parent73086a6ba3de013e1aae42ed375f39592d100031 (diff)
downloadmpv-63bd171c0d564fa2398df78b642c097d69c5a568.tar.bz2
mpv-63bd171c0d564fa2398df78b642c097d69c5a568.tar.xz
ao_coreaudio_exclusive: account for additional latency
Whether this is correct is unknown. This change tripples the latency from ~15ms to ~45ms. XBMC does this, VLC does not from what I could see. (cherry picked from commit 5f86fad2f0ab76b7497230b18cd146a7c4d38cd2)
-rw-r--r--audio/out/ao_coreaudio_exclusive.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/audio/out/ao_coreaudio_exclusive.c b/audio/out/ao_coreaudio_exclusive.c
index cc8c33e72e..762decffa4 100644
--- a/audio/out/ao_coreaudio_exclusive.c
+++ b/audio/out/ao_coreaudio_exclusive.c
@@ -501,10 +501,17 @@ static int init_digital(struct ao *ao, AudioStreamBasicDescription asbd)
p->stream_asbd.mFramesPerPacket);
uint32_t latency_frames = 0;
- err = CA_GET_O(p->device, kAudioDevicePropertyLatency, &latency_frames);
- if (err != noErr) {
+ uint32_t latency_properties[] = {
+ kAudioDevicePropertyLatency,
+ kAudioDevicePropertyBufferFrameSize,
+ kAudioDevicePropertySafetyOffset,
+ };
+ for (int n = 0; n < MP_ARRAY_SIZE(latency_properties); n++) {
+ uint32_t temp;
+ err = CA_GET_O(p->device, kAudioDevicePropertyLatency, &temp);
CHECK_CA_WARN("cannot get device latency");
- latency_frames = 0;
+ if (err == noErr)
+ latency_frames += temp;
}
p->hw_latency_us = ca_frames_to_us(ao, latency_frames);