diff options
Diffstat (limited to 'audio/out/ao_coreaudio.c')
-rw-r--r-- | audio/out/ao_coreaudio.c | 12 |
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); |