From e75dad444870892d8e1796991a10bdfac5a94013 Mon Sep 17 00:00:00 2001 From: Thomas Zobler Date: Tue, 23 Jun 2026 10:23:43 +0200 Subject: [PATCH] fix: Prevents a crash if no audio device is connected --- src/core/afv/audio/input.cpp | 6 +++--- src/sound/audioutilities.cpp | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/afv/audio/input.cpp b/src/core/afv/audio/input.cpp index 7d0bb5e96..5194ec93c 100644 --- a/src/core/afv/audio/input.cpp +++ b/src/core/afv/audio/input.cpp @@ -96,21 +96,21 @@ namespace swift::core::afv::audio inputFormat.setSampleFormat(QAudioFormat::Int16); QAudioDevice selectedDevice = getLowestLatencyDevice(inputDevice, inputFormat); - + if (selectedDevice.isNull()) { CLogMessage(this).error(u"No suitable audio input device found for '%1'. Required format: %2") << inputDevice.getName() << toQString(inputFormat); return; } - + if (!selectedDevice.isFormatSupported(inputFormat)) { CLogMessage(this).error(u"Selected device '%1' does not support required format: %2") << selectedDevice.description() << toQString(inputFormat); return; } - + m_inputFormat = inputFormat; m_audioInput.reset(new QAudioSource(selectedDevice, m_inputFormat)); if (!m_audioInputBuffer) { m_audioInputBuffer = new CAudioInputBuffer(this); } diff --git a/src/sound/audioutilities.cpp b/src/sound/audioutilities.cpp index 1c572c947..993e7db8d 100644 --- a/src/sound/audioutilities.cpp +++ b/src/sound/audioutilities.cpp @@ -73,47 +73,47 @@ namespace swift::sound { const QAudioDevice defDevice = device.isInputDevice() ? QMediaDevices::defaultAudioInput() : QMediaDevices::defaultAudioOutput(); - + if (defDevice.isNull()) { // No default device available return {}; } - + if (!defDevice.isFormatSupported(format)) { // Try to find a supported format QAudioFormat adjustedFormat = defDevice.preferredFormat(); - + // Try to keep as many original settings as possible adjustedFormat.setSampleRate(format.sampleRate()); adjustedFormat.setChannelCount(format.channelCount()); adjustedFormat.setSampleFormat(format.sampleFormat()); - + if (defDevice.isFormatSupported(adjustedFormat)) { format = adjustedFormat; return defDevice; } - + // Fallback: Try with preferred format's sample rate but keep other settings adjustedFormat = defDevice.preferredFormat(); adjustedFormat.setChannelCount(format.channelCount()); adjustedFormat.setSampleFormat(format.sampleFormat()); - + if (defDevice.isFormatSupported(adjustedFormat)) { format = adjustedFormat; return defDevice; } - + // Last resort: Use the device's preferred format entirely if (defDevice.isFormatSupported(defDevice.preferredFormat())) { format = defDevice.preferredFormat(); return defDevice; } - + // Device doesn't support any reasonable format return {}; }