diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-12-03 11:12:53 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-12-09 13:34:40 +0100 |
commit | a1f4ea7f397f6ab112bc5b31e001c5dc5c4beb68 (patch) | |
tree | 61167de5f9992290a3118f7a7a4b5bd4825a8262 | |
parent | 13438c29298c1412caef93ca8074f468b74c129d (diff) | |
download | qtmultimedia-a1f4ea7f397f6ab112bc5b31e001c5dc5c4beb68.tar.gz |
PulseAudio: correctly specify the preferred format for sources/sinks
Pick-to: 6.2
Change-Id: I616fd1ab143bbdaeeb4943f6f6d997a76e51a409
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r-- | src/multimedia/platform/pulseaudio/qaudioengine_pulse.cpp | 2 | ||||
-rw-r--r-- | src/multimedia/platform/pulseaudio/qpulsehelpers.cpp | 31 | ||||
-rw-r--r-- | src/multimedia/platform/pulseaudio/qpulsehelpers_p.h | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/src/multimedia/platform/pulseaudio/qaudioengine_pulse.cpp b/src/multimedia/platform/pulseaudio/qaudioengine_pulse.cpp index 53ffffe53..59b0ff90d 100644 --- a/src/multimedia/platform/pulseaudio/qaudioengine_pulse.cpp +++ b/src/multimedia/platform/pulseaudio/qaudioengine_pulse.cpp @@ -126,6 +126,7 @@ static void sinkInfoCallback(pa_context *context, const pa_sink_info *info, int QWriteLocker locker(&pulseEngine->m_sinkLock); bool isDefault = pulseEngine->m_defaultSink == info->name; auto *dinfo = new QPulseAudioDeviceInfo(info->name, info->description, isDefault, QAudioDevice::Output); + dinfo->preferredFormat = QPulseAudioInternal::sampleSpecToAudioFormat(info->sample_spec); pulseEngine->m_sinks.insert(info->index, dinfo->create()); } @@ -164,6 +165,7 @@ static void sourceInfoCallback(pa_context *context, const pa_source_info *info, return; bool isDefault = pulseEngine->m_defaultSink == info->name; auto *dinfo = new QPulseAudioDeviceInfo(info->name, info->description, isDefault, QAudioDevice::Input); + dinfo->preferredFormat = QPulseAudioInternal::sampleSpecToAudioFormat(info->sample_spec); pulseEngine->m_sources.insert(info->index, dinfo->create()); } diff --git a/src/multimedia/platform/pulseaudio/qpulsehelpers.cpp b/src/multimedia/platform/pulseaudio/qpulsehelpers.cpp index c3ca6f8c9..27f8e2602 100644 --- a/src/multimedia/platform/pulseaudio/qpulsehelpers.cpp +++ b/src/multimedia/platform/pulseaudio/qpulsehelpers.cpp @@ -65,6 +65,37 @@ pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format) return spec; } +QAudioFormat sampleSpecToAudioFormat(const pa_sample_spec &spec) +{ + QAudioFormat format; + + format.setSampleRate(spec.rate); + format.setChannelCount(spec.channels); + QAudioFormat::SampleFormat sampleFormat; + switch (spec.format) { + case PA_SAMPLE_U8: + sampleFormat = QAudioFormat::UInt8; + break; + case PA_SAMPLE_S16LE: + case PA_SAMPLE_S16BE: + sampleFormat = QAudioFormat::Int16; + break; + case PA_SAMPLE_FLOAT32LE: + case PA_SAMPLE_FLOAT32BE: + sampleFormat = QAudioFormat::Float; + break; + case PA_SAMPLE_S32LE: + case PA_SAMPLE_S32BE: + sampleFormat = QAudioFormat::Int32; + break; + default: + return {}; + } + + format.setSampleFormat(sampleFormat); + return format; +} + #ifdef DEBUG_PULSE QString stateToQString(pa_stream_state_t state) { diff --git a/src/multimedia/platform/pulseaudio/qpulsehelpers_p.h b/src/multimedia/platform/pulseaudio/qpulsehelpers_p.h index 5663e73ed..56d9678bf 100644 --- a/src/multimedia/platform/pulseaudio/qpulsehelpers_p.h +++ b/src/multimedia/platform/pulseaudio/qpulsehelpers_p.h @@ -60,6 +60,7 @@ QT_BEGIN_NAMESPACE namespace QPulseAudioInternal { pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format); +QAudioFormat sampleSpecToAudioFormat(const pa_sample_spec &spec); QString stateToQString(pa_stream_state_t state); QString stateToQString(pa_context_state_t state); QString sampleFormatToQString(pa_sample_format format); |