From ab0d2dce6f762f928fd20958600ef0030cf0466c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 10 Jul 2024 15:37:34 +0200 Subject: [PATCH] Fix reduced channelcount when restarting engine with different device 1. Start engine with a stereo soundcard (n_inputs was set to 2) 2. Restart engine with multi-channel soundcard, n_inputs remained a 2) --- libs/backends/alsa/alsa_audiobackend.cc | 24 ++------------------ libs/backends/alsa/alsa_audiobackend.h | 3 --- libs/backends/coreaudio/coreaudio_backend.cc | 24 ++------------------ libs/backends/coreaudio/coreaudio_backend.h | 3 --- libs/backends/portaudio/portaudio_backend.cc | 15 ++---------- libs/backends/portaudio/portaudio_backend.h | 3 --- 6 files changed, 6 insertions(+), 66 deletions(-) diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 34c2d8b49d..9f6c1f7c4c 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -71,8 +71,6 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _samplerate (48000) , _samples_per_period (1024) , _periods_per_cycle (2) - , _n_inputs (0) - , _n_outputs (0) , _systemic_audio_input_latency (0) , _systemic_audio_output_latency (0) , _midi_device_thread_active (false) @@ -919,24 +917,6 @@ AlsaAudioBackend::_start (bool for_latency_measurement) } #endif - if (_n_outputs != _pcmi->nplay ()) { - if (_n_outputs == 0) { - _n_outputs = _pcmi->nplay (); - } else { - _n_outputs = std::min (_n_outputs, _pcmi->nplay ()); - } - PBD::info << _("AlsaAudioBackend: adjusted output channel count to match device.") << endmsg; - } - - if (_n_inputs != _pcmi->ncapt ()) { - if (_n_inputs == 0) { - _n_inputs = _pcmi->ncapt (); - } else { - _n_inputs = std::min (_n_inputs, _pcmi->ncapt ()); - } - PBD::info << _("AlsaAudioBackend: adjusted input channel count to match device.") << endmsg; - } - if (_pcmi->fsize () != _samples_per_period) { _samples_per_period = _pcmi->fsize (); PBD::warning << string_compose (_("AlsaAudioBackend: samples per period does not match, using %1."), _samples_per_period) << endmsg; @@ -1246,8 +1226,8 @@ AlsaAudioBackend::register_system_audio_ports () { LatencyRange lr; - const int a_ins = _n_inputs; - const int a_out = _n_outputs; + const int a_ins = _pcmi->ncapt (); + const int a_out = _pcmi->nplay (); const uint32_t lcpp = (_periods_per_cycle - 2) * _samples_per_period; diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h index 2efd60d271..0614a773d8 100644 --- a/libs/backends/alsa/alsa_audiobackend.h +++ b/libs/backends/alsa/alsa_audiobackend.h @@ -302,9 +302,6 @@ class AlsaAudioBackend : public AudioBackend, public PortEngineSharedImpl size_t _periods_per_cycle; static size_t _max_buffer_size; - uint32_t _n_inputs; - uint32_t _n_outputs; - uint32_t _systemic_audio_input_latency; uint32_t _systemic_audio_output_latency; diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 67b4b9aecd..bed80696b3 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -108,8 +108,6 @@ CoreAudioBackend::CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _midi_driver_option(_("CoreMidi")) , _samplerate (48000) , _samples_per_period (1024) - , _n_inputs (0) - , _n_outputs (0) , _systemic_audio_input_latency (0) , _systemic_audio_output_latency (0) , _hw_audio_input_latency (0) @@ -564,24 +562,6 @@ CoreAudioBackend::_start (bool for_latency_measurement) return error_code; } - if (_n_outputs != _pcmio->n_playback_channels ()) { - if (_n_outputs == 0) { - _n_outputs = _pcmio->n_playback_channels (); - } else { - _n_outputs = std::min (_n_outputs, _pcmio->n_playback_channels ()); - } - PBD::info << _("CoreAudioBackend: adjusted output channel count to match device.") << endmsg; - } - - if (_n_inputs != _pcmio->n_capture_channels ()) { - if (_n_inputs == 0) { - _n_inputs = _pcmio->n_capture_channels (); - } else { - _n_inputs = std::min (_n_inputs, _pcmio->n_capture_channels ()); - } - PBD::info << _("CoreAudioBackend: adjusted input channel count to match device.") << endmsg; - } - if (_pcmio->sample_rate() != _samplerate) { _samplerate = _pcmio->sample_rate(); engine.sample_rate_change (_samplerate); @@ -927,8 +907,8 @@ CoreAudioBackend::register_system_audio_ports() { LatencyRange lr; - const uint32_t a_ins = _n_inputs; - const uint32_t a_out = _n_outputs; + const uint32_t a_ins = _pcmio->n_capture_channels (); + const uint32_t a_out = _pcmio->n_playback_channels (); const uint32_t coreaudio_reported_input_latency = _pcmio->get_latency(name_to_id(_input_audio_device, Input), true); const uint32_t coreaudio_reported_output_latency = _pcmio->get_latency(name_to_id(_output_audio_device, Output), false); diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h index 67bdece15f..b4db80ea6e 100644 --- a/libs/backends/coreaudio/coreaudio_backend.h +++ b/libs/backends/coreaudio/coreaudio_backend.h @@ -353,9 +353,6 @@ class CoreAudioBackend : public AudioBackend, public PortEngineSharedImpl { size_t _samples_per_period; static size_t _max_buffer_size; - uint32_t _n_inputs; - uint32_t _n_outputs; - uint32_t _systemic_audio_input_latency; uint32_t _systemic_audio_output_latency; diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index f3ef6778f3..3295bb0e79 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -84,8 +84,6 @@ PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _midi_driver_option(winmme_driver_name) , _samplerate (48000) , _samples_per_period (1024) - , _n_inputs (0) - , _n_outputs (0) , _systemic_audio_input_latency (0) , _systemic_audio_output_latency (0) , _dsp_load (0) @@ -612,15 +610,6 @@ PortAudioBackend::_start (bool for_latency_measurement) return AudioDeviceOpenError; } - if (_n_outputs != _pcmio->n_playback_channels ()) { - _n_outputs = _pcmio->n_playback_channels (); - PBD::info << get_error_string(OutputChannelCountNotSupportedError) << endmsg; - } - - if (_n_inputs != _pcmio->n_capture_channels ()) { - _n_inputs = _pcmio->n_capture_channels (); - PBD::info << get_error_string(InputChannelCountNotSupportedError) << endmsg; - } #if 0 if (_pcmio->samples_per_period() != _samples_per_period) { _samples_per_period = _pcmio->samples_per_period(); @@ -1196,8 +1185,8 @@ PortAudioBackend::register_system_audio_ports() { LatencyRange lr; - const uint32_t a_ins = _n_inputs; - const uint32_t a_out = _n_outputs; + const uint32_t a_ins = _pcmio->n_capture_channels (); + const uint32_t a_out = _pcmio->n_playback_channels (); /* audio ports */ lr.min = lr.max = (_measure_latency ? 0 : _systemic_audio_input_latency); diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h index bb04c37ee7..3d4bd99df1 100644 --- a/libs/backends/portaudio/portaudio_backend.h +++ b/libs/backends/portaudio/portaudio_backend.h @@ -322,9 +322,6 @@ class PortAudioBackend : public AudioBackend, public PortEngineSharedImpl { size_t _samples_per_period; static size_t _max_buffer_size; - uint32_t _n_inputs; - uint32_t _n_outputs; - uint32_t _systemic_audio_input_latency; uint32_t _systemic_audio_output_latency;