diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 37f1fe8c5c..5d5f20844d 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -440,6 +440,24 @@ CoreAudioBackend::systemic_output_latency () const return _systemic_audio_output_latency; } +uint32_t +CoreAudioBackend::systemic_hw_input_latency () const +{ + if (name_to_id (_input_audio_device) != UINT32_MAX) { + return _pcmio->get_latency(name_to_id(_input_audio_device, Input), true); + } + return 0; +} + +uint32_t +CoreAudioBackend::systemic_hw_output_latency () const +{ + if (name_to_id (_output_audio_device) != UINT32_MAX) { + return _pcmio->get_latency(name_to_id(_output_audio_device, Output), false); + } + return 0; +} + /* MIDI */ std::vector @@ -1120,7 +1138,7 @@ CoreAudioBackend::register_system_audio_ports() #endif /* audio ports */ - lr.min = lr.max = coreaudio_reported_input_latency + (_measure_latency ? 0 : _systemic_audio_input_latency); + lr.min = lr.max = _measure_latency ? 0 : _systemic_audio_input_latency; for (uint32_t i = 0; i < a_ins; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:capture_%d", i+1); @@ -1132,7 +1150,7 @@ CoreAudioBackend::register_system_audio_ports() _system_inputs.push_back(cp); } - lr.min = lr.max = coreaudio_reported_output_latency + (_measure_latency ? 0 : _systemic_audio_output_latency); + lr.min = lr.max = _measure_latency ? 0 : _systemic_audio_output_latency; for (uint32_t i = 0; i < a_out; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:playback_%d", i+1); diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h index d36ab7a8fb..f2507d8c3d 100644 --- a/libs/backends/coreaudio/coreaudio_backend.h +++ b/libs/backends/coreaudio/coreaudio_backend.h @@ -262,6 +262,9 @@ class CoreAudioBackend : public AudioBackend { uint32_t systemic_midi_input_latency (std::string const) const { return 0; } uint32_t systemic_midi_output_latency (std::string const) const { return 0; } + uint32_t systemic_hw_input_latency () const; + uint32_t systemic_hw_output_latency () const; + bool can_set_systemic_midi_latencies () const { return false; /* XXX */} /* External control app */ diff --git a/libs/backends/coreaudio/coreaudio_pcmio.cc b/libs/backends/coreaudio/coreaudio_pcmio.cc index b0d9fc4870..26231dad62 100644 --- a/libs/backends/coreaudio/coreaudio_pcmio.cc +++ b/libs/backends/coreaudio/coreaudio_pcmio.cc @@ -474,7 +474,9 @@ CoreAudioPCM::get_latency(uint32_t device_id, bool input) for (size_t i = 0; i < stream_latencies.size(); ++i) { max_stream_latency = std::max(max_stream_latency, stream_latencies[i]); } +#if 0 latency += max_stream_latency; +#endif return latency; }