summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio.c
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-10-11 13:45:40 -0500
committerDudemanguy <random342@airmail.cc>2023-10-16 15:38:59 +0000
commit50025428b17e82c9689dab82fcd0486648c4a9fd (patch)
treef9039f4110dd54be060b5e7ef4ef3131be0a3e32 /audio/out/ao_coreaudio.c
parentd310430332b9c7dbedf28398b7018364401d327d (diff)
downloadmpv-50025428b17e82c9689dab82fcd0486648c4a9fd.tar.bz2
mpv-50025428b17e82c9689dab82fcd0486648c4a9fd.tar.xz
ao: convert all timing code to nanoseconds
Pull AOs work off of a callback that relies on mpv's internal timer. So like with the related video changes, convert all of these to nanoseconds instead. In many cases, the underlying audio API does actually provide nanosecond resolution as well.
Diffstat (limited to 'audio/out/ao_coreaudio.c')
-rw-r--r--audio/out/ao_coreaudio.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index ee8d63a81c..d96b597f6e 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -31,7 +31,7 @@ struct priv {
AudioDeviceID device;
AudioUnit audio_unit;
- uint64_t hw_latency_us;
+ uint64_t hw_latency_ns;
AudioStreamBasicDescription original_asbd;
AudioStreamID original_asbd_stream;
@@ -53,13 +53,13 @@ static int64_t ca_get_hardware_latency(struct ao *ao) {
&size);
CHECK_CA_ERROR("cannot get audio unit latency");
- uint64_t audiounit_latency_us = audiounit_latency_sec * 1e6;
- uint64_t device_latency_us = ca_get_device_latency_us(ao, p->device);
+ uint64_t audiounit_latency_ns = MP_TIME_S_TO_NS(audiounit_latency_sec);
+ uint64_t device_latency_ns = ca_get_device_latency_ns(ao, p->device);
- MP_VERBOSE(ao, "audiounit latency [us]: %lld\n", audiounit_latency_us);
- MP_VERBOSE(ao, "device latency [us]: %lld\n", device_latency_us);
+ MP_VERBOSE(ao, "audiounit latency [ns]: %lld\n", audiounit_latency_ns);
+ MP_VERBOSE(ao, "device latency [ns]: %lld\n", device_latency_ns);
- return audiounit_latency_us + device_latency_us;
+ return audiounit_latency_ns + device_latency_ns;
coreaudio_error:
return 0;
@@ -76,8 +76,8 @@ static OSStatus render_cb_lpcm(void *ctx, AudioUnitRenderActionFlags *aflags,
for (int n = 0; n < ao->num_planes; n++)
planes[n] = buffer_list->mBuffers[n].mData;
- int64_t end = mp_time_us();
- end += p->hw_latency_us + ca_get_latency(ts) + ca_frames_to_us(ao, frames);
+ int64_t end = mp_time_ns();
+ end += p->hw_latency_ns + ca_get_latency(ts) + ca_frames_to_ns(ao, frames);
ao_read_data(ao, planes, frames, end);
return noErr;
}
@@ -288,7 +288,7 @@ static bool init_audiounit(struct ao *ao, AudioStreamBasicDescription asbd)
CHECK_CA_ERROR_L(coreaudio_error_audiounit,
"can't link audio unit to selected device");
- p->hw_latency_us = ca_get_hardware_latency(ao);
+ p->hw_latency_ns = ca_get_hardware_latency(ao);
AURenderCallbackStruct render_cb = (AURenderCallbackStruct) {
.inputProc = render_cb_lpcm,