Fix CoreAudio systemic latency, implement hw latency report
This commit is contained in:
parent
53a6c24147
commit
a9c75f9760
@ -440,6 +440,24 @@ CoreAudioBackend::systemic_output_latency () const
|
|||||||
return _systemic_audio_output_latency;
|
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 */
|
/* MIDI */
|
||||||
|
|
||||||
std::vector<std::string>
|
std::vector<std::string>
|
||||||
@ -1120,7 +1138,7 @@ CoreAudioBackend::register_system_audio_ports()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* audio ports */
|
/* 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) {
|
for (uint32_t i = 0; i < a_ins; ++i) {
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
snprintf(tmp, sizeof(tmp), "system:capture_%d", i+1);
|
snprintf(tmp, sizeof(tmp), "system:capture_%d", i+1);
|
||||||
@ -1132,7 +1150,7 @@ CoreAudioBackend::register_system_audio_ports()
|
|||||||
_system_inputs.push_back(cp);
|
_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) {
|
for (uint32_t i = 0; i < a_out; ++i) {
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
snprintf(tmp, sizeof(tmp), "system:playback_%d", i+1);
|
snprintf(tmp, sizeof(tmp), "system:playback_%d", i+1);
|
||||||
|
@ -262,6 +262,9 @@ class CoreAudioBackend : public AudioBackend {
|
|||||||
uint32_t systemic_midi_input_latency (std::string const) const { return 0; }
|
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_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 */}
|
bool can_set_systemic_midi_latencies () const { return false; /* XXX */}
|
||||||
|
|
||||||
/* External control app */
|
/* External control app */
|
||||||
|
@ -474,7 +474,9 @@ CoreAudioPCM::get_latency(uint32_t device_id, bool input)
|
|||||||
for (size_t i = 0; i < stream_latencies.size(); ++i) {
|
for (size_t i = 0; i < stream_latencies.size(); ++i) {
|
||||||
max_stream_latency = std::max(max_stream_latency, stream_latencies[i]);
|
max_stream_latency = std::max(max_stream_latency, stream_latencies[i]);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
latency += max_stream_latency;
|
latency += max_stream_latency;
|
||||||
|
#endif
|
||||||
|
|
||||||
return latency;
|
return latency;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user