From 1970fd015719ee562dfc4e0ef336a7f267b96d75 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Tue, 23 Jun 2026 20:48:06 +0200 Subject: [PATCH] fix: Start only with valid output/input device Fixes #382 --- src/core/afv/clients/afvclient.cpp | 19 +++++++++++++++---- src/sound/audioutilities.cpp | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/core/afv/clients/afvclient.cpp b/src/core/afv/clients/afvclient.cpp index 1d85623f2..5124c0e76 100644 --- a/src/core/afv/clients/afvclient.cpp +++ b/src/core/afv/clients/afvclient.cpp @@ -283,9 +283,14 @@ namespace swift::core::afv::clients const CAudioDeviceInfo useOutputDevice = outputDevice.isValid() ? outputDevice : CAudioDeviceInfo::getDefaultOutputDevice(); - SWIFT_VERIFY_X(useInputDevice.isValid() && useInputDevice.isInputDevice(), Q_FUNC_INFO, "Wrong input device"); - SWIFT_VERIFY_X(useOutputDevice.isValid() && useOutputDevice.isOutputDevice(), Q_FUNC_INFO, - "Wrong output device"); + if (!useOutputDevice.isValid() || !useOutputDevice.isOutputDevice()) + { + CLogMessage(this).error(u"No audio output device found. Audio For VATSIM (AFV) " + "is disabled"); + return; + } + + // The input device is allowed to be invalid as AFV is also usable with "receive only". if (m_isStarted) { @@ -325,7 +330,13 @@ namespace swift::core::afv::clients QMutexLocker lock(&m_mutex); m_output->start(useOutputDevice, m_outputSampleProvider); - m_input->start(useInputDevice); + + if (useInputDevice.getType() != CAudioDeviceInfo::Unknown) { m_input->start(useInputDevice); } + else + { + CLogMessage(this).warning( + u"No audio input device was found. Audio for VATSIM (AFV) will run in receive-only mode."); + } // runs in correct thread m_voiceServerTimer->start(PositionUpdatesMs); // start for preset values diff --git a/src/sound/audioutilities.cpp b/src/sound/audioutilities.cpp index f6cc4d368..2f5ee746f 100644 --- a/src/sound/audioutilities.cpp +++ b/src/sound/audioutilities.cpp @@ -69,6 +69,7 @@ namespace swift::sound QAudioDevice getLowestLatencyDevice(const CAudioDeviceInfo &device, QAudioFormat &format) { + Q_ASSERT_X(device.getType() != CAudioDeviceInfo::Unknown, Q_FUNC_INFO, "Device type must not be unknown"); if (device.isDefault() || !device.isValid()) { const QAudioDevice defDevice =