From dcf327f86aa4fad565f39e1cd88cc99644e88ee9 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Sat, 26 Sep 2015 21:03:02 +1000 Subject: Return meaningful error codes when ALSA backend fails to start Unfortunately it seems that in zita-alsa-pcmi doesn't set state() correctly in some cases. Setting an invalid SR doesn't display the correct error message, first guess would be that set_hwpar is failing and state() is not representative of the actual error. --- libs/backends/alsa/alsa_audiobackend.cc | 48 ++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 99b80f17d5..36ea6a5cc8 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -752,20 +752,48 @@ AlsaAudioBackend::_start (bool for_latency_measurement) (duplex & 2) ? alsa_device.c_str() : NULL, (duplex & 1) ? alsa_device.c_str() : NULL, 0, _samplerate, _samples_per_period, _periods_per_cycle, 0); - switch (_pcmi->state ()) { - case 0: /* OK */ break; - case -1: PBD::error << _("AlsaAudioBackend: failed to open device.") << endmsg; break; - case -2: PBD::error << _("AlsaAudioBackend: failed to allocate parameters.") << endmsg; break; - case -3: PBD::error << _("AlsaAudioBackend: cannot set requested sample rate.") << endmsg; break; - case -4: PBD::error << _("AlsaAudioBackend: cannot set requested period size.") << endmsg; break; - case -5: PBD::error << _("AlsaAudioBackend: cannot set requested number of periods.") << endmsg; break; - case -6: PBD::error << _("AlsaAudioBackend: unsupported sample format.") << endmsg; break; - default: PBD::error << _("AlsaAudioBackend: initialization failed.") << endmsg; break; + + AudioBackend::ErrorCode error_code = NoError; + switch (_pcmi->state()) { + case 0: /* OK */ + break; + case -1: + PBD::error << _("AlsaAudioBackend: failed to open device.") << endmsg; + error_code = AudioDeviceOpenError; + break; + case -2: + PBD::error << _("AlsaAudioBackend: failed to allocate parameters.") << endmsg; + error_code = AudioDeviceOpenError; + break; + case -3: + PBD::error << _("AlsaAudioBackend: cannot set requested sample rate.") + << endmsg; + error_code = SampleRateNotSupportedError; + break; + case -4: + PBD::error << _("AlsaAudioBackend: cannot set requested period size.") + << endmsg; + error_code = PeriodSizeNotSupportedError; + break; + case -5: + PBD::error << _("AlsaAudioBackend: cannot set requested number of periods.") + << endmsg; + error_code = PeriodCountNotSupportedError; + break; + case -6: + PBD::error << _("AlsaAudioBackend: unsupported sample format.") << endmsg; + error_code = SampleFormatNotSupportedError; + break; + default: + PBD::error << _("AlsaAudioBackend: initialization failed.") << endmsg; + error_code = AudioDeviceOpenError; + break; } + if (_pcmi->state ()) { delete _pcmi; _pcmi = 0; release_device(); - return -1; + return error_code; } #ifndef NDEBUG -- cgit v1.2.3