summaryrefslogtreecommitdiff
path: root/libs/backends/alsa
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-06-07 00:13:32 +0200
committerRobin Gareus <robin@gareus.org>2014-06-07 17:28:47 +0200
commit8f17b7c3091e87544766741668e5aa9410458079 (patch)
treed948d9bf18ca52f720a0ee4f264e560bcc926f98 /libs/backends/alsa
parent436eecbb3c0f8cf7265a8835ae07a7d1586fc577 (diff)
ALSA backend: separate systemic audio+midi latency
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc28
-rw-r--r--libs/backends/alsa/alsa_audiobackend.h6
2 files changed, 20 insertions, 14 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc
index cec72418a4..c5382e81d8 100644
--- a/libs/backends/alsa/alsa_audiobackend.cc
+++ b/libs/backends/alsa/alsa_audiobackend.cc
@@ -54,8 +54,10 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
, _dsp_load (0)
, _n_inputs (0)
, _n_outputs (0)
- , _systemic_input_latency (0)
- , _systemic_output_latency (0)
+ , _systemic_audio_input_latency (0)
+ , _systemic_audio_output_latency (0)
+ , _systemic_midi_input_latency (0)
+ , _systemic_midi_output_latency (0)
, _processed_samples (0)
, _port_change_flag (false)
{
@@ -278,14 +280,16 @@ AlsaAudioBackend::set_output_channels (uint32_t cc)
int
AlsaAudioBackend::set_systemic_input_latency (uint32_t sl)
{
- _systemic_input_latency = sl;
+ _systemic_audio_input_latency = sl;
+ _systemic_midi_input_latency = sl;
return 0;
}
int
AlsaAudioBackend::set_systemic_output_latency (uint32_t sl)
{
- _systemic_output_latency = sl;
+ _systemic_audio_output_latency = sl;
+ _systemic_midi_output_latency = sl;
return 0;
}
@@ -329,13 +333,13 @@ AlsaAudioBackend::output_channels () const
uint32_t
AlsaAudioBackend::systemic_input_latency () const
{
- return _systemic_input_latency;
+ return _systemic_audio_input_latency;
}
uint32_t
AlsaAudioBackend::systemic_output_latency () const
{
- return _systemic_output_latency;
+ return _systemic_audio_output_latency;
}
/* MIDI */
@@ -464,8 +468,8 @@ AlsaAudioBackend::_start (bool for_latency_measurement)
}
if (for_latency_measurement) {
- _systemic_input_latency = 0;
- _systemic_output_latency = 0;
+ _systemic_audio_input_latency = 0;
+ _systemic_audio_output_latency = 0;
}
register_system_midi_ports();
@@ -836,7 +840,7 @@ AlsaAudioBackend::register_system_audio_ports()
const int a_out = _n_outputs > 0 ? _n_outputs : 2;
/* audio ports */
- lr.min = lr.max = _samples_per_period * _periods_per_cycle + _systemic_input_latency;
+ lr.min = lr.max = _samples_per_period + _systemic_audio_input_latency;
for (int i = 1; i <= a_ins; ++i) {
char tmp[64];
snprintf(tmp, sizeof(tmp), "system:capture_%d", i);
@@ -846,7 +850,7 @@ AlsaAudioBackend::register_system_audio_ports()
_system_inputs.push_back(static_cast<AlsaPort*>(p));
}
- lr.min = lr.max = _samples_per_period * _periods_per_cycle + _systemic_output_latency;
+ lr.min = lr.max = _samples_per_period + _systemic_audio_output_latency;
for (int i = 1; i <= a_out; ++i) {
char tmp[64];
snprintf(tmp, sizeof(tmp), "system:playback_%d", i);
@@ -928,7 +932,7 @@ AlsaAudioBackend::register_system_midi_ports()
const int m_ins = _rmidi_in.size();
const int m_out = _rmidi_out.size();
- lr.min = lr.max = _samples_per_period + _systemic_input_latency;
+ lr.min = lr.max = _samples_per_period + _systemic_midi_input_latency;
for (int i = 1; i <= m_ins; ++i) {
char tmp[64];
snprintf(tmp, sizeof(tmp), "system:midi_capture_%d", i);
@@ -938,7 +942,7 @@ AlsaAudioBackend::register_system_midi_ports()
_system_midi_in.push_back(static_cast<AlsaPort*>(p));
}
- lr.min = lr.max = _samples_per_period + _systemic_output_latency;
+ lr.min = lr.max = _samples_per_period + _systemic_midi_output_latency;
for (int i = 1; i <= m_out; ++i) {
char tmp[64];
snprintf(tmp, sizeof(tmp), "system:midi_playback_%d", i);
diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h
index 55a6b0086e..98d3aaa13f 100644
--- a/libs/backends/alsa/alsa_audiobackend.h
+++ b/libs/backends/alsa/alsa_audiobackend.h
@@ -306,8 +306,10 @@ class AlsaAudioBackend : public AudioBackend {
uint32_t _n_inputs;
uint32_t _n_outputs;
- uint32_t _systemic_input_latency;
- uint32_t _systemic_output_latency;
+ uint32_t _systemic_audio_input_latency;
+ uint32_t _systemic_audio_output_latency;
+ uint32_t _systemic_midi_input_latency;
+ uint32_t _systemic_midi_output_latency;
uint64_t _processed_samples;