ALSA backend: separate systemic audio+midi latency
authorRobin Gareus <robin@gareus.org>
Fri, 6 Jun 2014 22:13:32 +0000 (00:13 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 7 Jun 2014 15:28:47 +0000 (17:28 +0200)
libs/backends/alsa/alsa_audiobackend.cc
libs/backends/alsa/alsa_audiobackend.h

index cec72418a4ce2352260037a8c5003e00ab542a8c..c5382e81d81adae432bf862d12c30c6e529b1c3d 100644 (file)
@@ -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);
index 55a6b0086e84af01ed929c80716ebc978e42f195..98d3aaa13f9261e3e4ad6542817a889027aae9e8 100644 (file)
@@ -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;