From: Colin Guthrie Date: Sat, 30 Jan 2010 11:52:50 +0000 (+0000) Subject: phonon: Add specific support for PulseAudio. X-Git-Tag: 1.1.0-ff~650 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=49aed5c302c118b8d67068712beaff907b4a1beb;p=vlc phonon: Add specific support for PulseAudio. This uses the PulseSupport class from phonon to allow use to support PulseAudio nicely (e.g. nice device listings etc.) (cherry picked from commit bf1ef7158347153310cf4644a66da14f85db38c9) Signed-off-by: Jean-Baptiste Kempf --- diff --git a/bindings/phonon/vlc/audiooutput.cpp b/bindings/phonon/vlc/audiooutput.cpp index ab889ea897..48eefba0e1 100644 --- a/bindings/phonon/vlc/audiooutput.cpp +++ b/bindings/phonon/vlc/audiooutput.cpp @@ -28,6 +28,10 @@ #include "vlcloader.h" +#ifdef PHONON_PULSESUPPORT +# include +#endif + namespace Phonon { namespace VLC { @@ -70,6 +74,15 @@ bool AudioOutput::setOutputDevice(int device) if (i_device == device) return true; +#ifdef PHONON_PULSESUPPORT + if (PulseSupport::getInstance()->isActive()) { + i_device = device; + libvlc_audio_output_set(vlc_instance, "pulse"); + qDebug() << "set aout " << "pulse"; + return true; + } +#endif + const QList deviceList = p_backend->deviceManager()->audioOutputDevices(); if (device >= 0 && device < deviceList.size()) { diff --git a/bindings/phonon/vlc/backend.cpp b/bindings/phonon/vlc/backend.cpp index 046372256e..7d2e0101c1 100644 --- a/bindings/phonon/vlc/backend.cpp +++ b/bindings/phonon/vlc/backend.cpp @@ -31,6 +31,10 @@ #include "vlcloader.h" #include "vlcmediaobject.h" +#ifdef PHONON_PULSESUPPORT +# include +#endif + #include #include #include @@ -47,6 +51,13 @@ Backend::Backend(QObject *parent, const QVariantList &) , m_effectManager(NULL) , m_debugLevel(Debug) { +#ifdef PHONON_PULSESUPPORT + // Initialise PulseAudio support + PulseSupport *pulse = PulseSupport::getInstance(); + pulse->enable(); + connect(pulse, SIGNAL(objectDescriptionChanged(ObjectDescriptionType)), SIGNAL(objectDescriptionChanged(ObjectDescriptionType))); +#endif + bool wasInit = vlcInit(); setProperty("identifier", QLatin1String("phonon_vlc")); diff --git a/bindings/phonon/vlc/devicemanager.cpp b/bindings/phonon/vlc/devicemanager.cpp index 3bea98c709..18db2f7292 100644 --- a/bindings/phonon/vlc/devicemanager.cpp +++ b/bindings/phonon/vlc/devicemanager.cpp @@ -21,6 +21,10 @@ //#include "widgetrenderer.h" #include "vlcloader.h" +#ifdef PHONON_PULSESUPPORT +# include +#endif + /** * This class manages the list of currently active output devices. */ @@ -102,13 +106,30 @@ void DeviceManager::updateDeviceList() vlcExceptionRaised(); libvlc_audio_output_t *p_start = p_ao_list; + bool checkpulse = false; +#ifdef PHONON_PULSESUPPORT + PulseSupport *pulse = PulseSupport::getInstance(); + checkpulse = pulse->isActive(); +#endif + bool haspulse = false; while (p_ao_list) { + if (checkpulse && 0 == strcmp(p_ao_list->psz_name, "pulse")) { + haspulse = true; + break; + } list.append(p_ao_list->psz_name); list_hw.append(""); p_ao_list = p_ao_list->p_next; } libvlc_audio_output_list_release(p_start); + +#ifdef PHONON_PULSESUPPORT + if (haspulse) + return; + pulse->enable(false); +#endif + for (int i = 0 ; i < list.size() ; ++i) { QByteArray nameId = list.at(i); QByteArray hwId = list_hw.at(i);