summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/out/ao_coreaudio.c')
-rw-r--r--audio/out/ao_coreaudio.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index ae743c90b2..1b0f99a9d1 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -16,6 +16,7 @@
*/
#include <CoreAudio/HostTime.h>
+#include <libavutil/mathematics.h>
#include "ao.h"
#include "internal.h"
@@ -89,14 +90,8 @@ static OSStatus render_cb_lpcm(void *ctx, AudioUnitRenderActionFlags *aflags,
int64_t end = mp_time_ns();
end += p->hw_latency_ns + ca_get_latency(ts) + ca_frames_to_ns(ao, frames);
- int samples = ao_read_data(ao, planes, frames, end);
-
- if (samples == 0)
- *aflags |= kAudioUnitRenderAction_OutputIsSilence;
-
- for (int n = 0; n < buffer_list->mNumberBuffers; n++)
- buffer_list->mBuffers[n].mDataByteSize = samples * ao->sstride;
-
+ // don't use the returned sample count since CoreAudio always expects full frames
+ ao_read_data(ao, planes, frames, end, NULL, true, true);
return noErr;
}
@@ -184,6 +179,7 @@ static int init(struct ao *ao)
goto coreaudio_error;
reinit_latency(ao);
+ ao->device_buffer = av_rescale(p->hw_latency_ns, ao->samplerate, 1000000000) * 2;
p->queue = dispatch_queue_create("io.mpv.coreaudio_stop_during_idle",
DISPATCH_QUEUE_SERIAL);