diff -up qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/audiooutput.cpp.than qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/audiooutput.cpp --- qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/audiooutput.cpp.than 2009-08-16 14:20:43.000000000 +0200 +++ qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/audiooutput.cpp 2009-08-16 14:45:56.000000000 +0200 @@ -141,7 +141,9 @@ bool AudioOutput::setOutputDevice(int ne // Save previous state GstState oldState = GST_STATE(m_audioSink); const QByteArray oldDeviceValue = GstHelper::property(m_audioSink, "device"); - const QByteArray deviceId = deviceList.at(newDevice).gstId; + const QByteArray deviceId = (deviceList.at(newDevice).gstId == "PulseAudio" + ? "default" + : deviceList.at(newDevice).gstId); m_device = newDevice; // We test if the device can be opened by checking if it can go from NULL to READY state diff -up qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/devicemanager.cpp.than qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/devicemanager.cpp --- qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/devicemanager.cpp.than 2009-08-15 12:39:08.000000000 +0200 +++ qt-x11-opensource-src-4.5.2/src/3rdparty/phonon/gstreamer/devicemanager.cpp 2009-08-16 14:45:13.000000000 +0200 @@ -50,6 +50,8 @@ AudioDevice::AudioDevice(DeviceManager * //get name from device if (gstId == "default") { description = "Default audio device"; + } else if (gstId == "PulseAudio") { + description = QObject::tr("Pass all audio through the PulseAudio Sound Server.\n").toUtf8(); } else { GstElement *aSink= manager->createAudioSink(); @@ -175,6 +177,18 @@ GstElement *DeviceManager::createAudioSi } } + if (!sink) { + sink = gst_element_factory_make ("pulsesink", NULL); + if (canOpenDevice(sink)) { + m_backend->logMessage("AudioOutput using pulse audio sink"); + m_audioSink = "pulsesink"; + } + else if (sink) { + gst_object_unref(sink); + sink = 0; + } + } + #ifdef USE_ALSASINK2 if (!sink) { sink = gst_element_factory_make ("_k_alsasink", NULL); @@ -306,8 +320,12 @@ void DeviceManager::updateDeviceList() QList list; if (audioSink) { - list = GstHelper::extractProperties(audioSink, "device"); - list.prepend("default"); + if (m_audioSink == "pulsesink") { + list.append("PulseAudio"); + } else { + list = GstHelper::extractProperties(audioSink, "device"); + list.prepend("default"); + } for (int i = 0 ; i < list.size() ; ++i) { QByteArray gstId = list.at(i);