summaryrefslogtreecommitdiffstats
path: root/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/pulseaudio/qaudiooutput_pulse.cpp')
-rw-r--r--src/plugins/pulseaudio/qaudiooutput_pulse.cpp32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
index ea7a2be0c..19ddac1e5 100644
--- a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
+++ b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp
@@ -310,7 +310,34 @@ bool QPulseAudioOutput::open()
if (!m_category.isNull())
pa_proplist_sets(propList, PA_PROP_MEDIA_ROLE, m_category.toLatin1().constData());
- m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, 0, propList);
+ static const auto mapName = qEnvironmentVariable("QT_PA_CHANNEL_MAP");
+ pa_channel_map_def_t mapDef = PA_CHANNEL_MAP_DEFAULT;
+ if (mapName == QLatin1String("ALSA"))
+ mapDef = PA_CHANNEL_MAP_ALSA;
+ else if (mapName == QLatin1String("AUX"))
+ mapDef = PA_CHANNEL_MAP_AUX;
+ else if (mapName == QLatin1String("WAVEEX"))
+ mapDef = PA_CHANNEL_MAP_WAVEEX;
+ else if (mapName == QLatin1String("OSS"))
+ mapDef = PA_CHANNEL_MAP_OSS;
+ else if (!mapName.isEmpty())
+ qWarning() << "Unknown pulse audio channel mapping definition:" << mapName;
+
+ pa_channel_map m;
+ auto channelMap = pa_channel_map_init_extend(&m, m_spec.channels, mapDef);
+ if (!channelMap)
+ qWarning() << "QAudioOutput: pa_channel_map_init_extend() Could not initialize channel map";
+
+ m_stream = pa_stream_new_with_proplist(pulseEngine->context(), m_streamName.constData(), &m_spec, channelMap, propList);
+ if (!m_stream) {
+ qWarning() << "QAudioOutput: pa_stream_new_with_proplist() failed!";
+ pulseEngine->unlock();
+ setError(QAudio::OpenError);
+ setState(QAudio::StoppedState);
+ emit stateChanged(m_deviceState);
+ return false;
+ }
+
pa_proplist_free(propList);
pa_stream_set_state_callback(m_stream, outputStreamStateCallback, this);
@@ -469,8 +496,7 @@ void QPulseAudioOutput::userFeed()
if (m_notifyInterval && (m_timeStamp.elapsed() + m_elapsedTimeOffset) > m_notifyInterval) {
emit notify();
- m_elapsedTimeOffset = m_timeStamp.elapsed() + m_elapsedTimeOffset - m_notifyInterval;
- m_timeStamp.restart();
+ m_elapsedTimeOffset = m_timeStamp.restart() + m_elapsedTimeOffset - m_notifyInterval;
}
}