diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-12-03 11:12:53 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-12-09 21:26:56 +0000 |
commit | cc9cbb4e3b4f649a5cc91a16586be638d5f4ffa6 (patch) | |
tree | a864f41298256ed9ea2f3f4d2b55d4a285075355 | |
parent | 8b81084996f8f66e5b5d69b1d90b50a29568353f (diff) | |
download | qtmultimedia-cc9cbb4e3b4f649a5cc91a16586be638d5f4ffa6.tar.gz |
PulseAudio: correctly specify the preferred format for sources/sinks
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>
(cherry picked from commit a1f4ea7f397f6ab112bc5b31e001c5dc5c4beb68)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-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); |