[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [phonon-vlc] src: Hopefully start fixing device selection in non-PA
From: Andreas Hartmetz <ahartmetz () gmail ! com>
Date: 2011-07-31 22:29:42
Message-ID: 20110731222942.E696EA60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 93e263b1b6c0110dcf467da3841fc279eb3dca72 by Andreas Hartmetz.
Committed on 01/08/2011 at 00:24.
Pushed by ahartmetz into branch 'master'.
Hopefully start fixing device selection in non-PA mode.
...by enumerating actual devices, not sound systems. Restructure the
code for better readability in the process.
M +45 -34 src/devicemanager.cpp
http://commits.kde.org/phonon-vlc/93e263b1b6c0110dcf467da3841fc279eb3dca72
diff --git a/src/devicemanager.cpp b/src/devicemanager.cpp
index c4f55a5..0f3b34e 100644
--- a/src/devicemanager.cpp
+++ b/src/devicemanager.cpp
@@ -140,57 +140,68 @@ void DeviceManager::updateDeviceSublist(const QList<DeviceInfo> &newDevices, QLi
}
}
+static QList<QByteArray> vlcAudioOutBackends()
+{
+ QList<QByteArray> ret;
+
+ libvlc_audio_output_t *firstAudioOut = libvlc_audio_output_list_get(libvlc);
+ if (!firstAudioOut) {
+ error() << "libVLC:" << LibVLC::errorMessage();
+ return ret;
+ }
+ for (libvlc_audio_output_t *audioOut = firstAudioOut; audioOut; audioOut = audioOut->p_next) {
+ ret.append(QByteArray(audioOut->psz_name));
+ }
+ libvlc_audio_output_list_release(firstAudioOut);
+
+ return ret;
+}
+
void DeviceManager::updateDeviceList()
{
// Lists for audio output devices
QList<DeviceInfo> audioOutputDeviceList;
+
audioOutputDeviceList.append(DeviceInfo("default"));
- audioOutputDeviceList.last().capabilities = DeviceInfo::AudioOutput;
+ DeviceInfo &defaultAudioOutputDevice = audioOutputDeviceList.first();
+ defaultAudioOutputDevice.capabilities = DeviceInfo::AudioOutput;
if (!LibVLC::self || !libvlc)
return;
- bool checkpulse = false;
+ QList<QByteArray> audioOutBackends = vlcAudioOutBackends();
+
#ifdef PHONON_PULSESUPPORT
PulseSupport *pulse = PulseSupport::getInstance();
- checkpulse = pulse->isActive();
+ if (pulse && pulse->isActive()) {
+ if (audioOutBackends.contains("pulse")) {
+ defaultAudioOutputDevice.isAdvanced = false;
+ defaultAudioOutputDevice.accessList.append(DeviceAccess("pulse", "default"));
+ return;
+ } else {
+ pulse->enable(false);
+ }
+ }
#endif
- bool haspulse = false;
- // Get the list of available audio outputs
- libvlc_audio_output_t *audioOutput = libvlc_audio_output_list_get(libvlc);
- if (!audioOutput)
- error() << "libVLC:" << LibVLC::errorMessage();
+ QList<QByteArray> knownSoundSystems;
+ knownSoundSystems << "alsa" << "oss";
+ foreach (const QByteArray &soundSystem, knownSoundSystems) {
+ if (audioOutBackends.contains(soundSystem)) {
+ const int deviceCount = libvlc_audio_output_device_count(libvlc, soundSystem);
- libvlc_audio_output_t *start = audioOutput;
- while (audioOutput) {
-#ifdef __GNUC__
-#warning this only iters on aouts, not actual devices
-#endif
- if (checkpulse && qstrcmp(audioOutput->psz_name, "pulse") == 0) {
- audioOutputDeviceList.last().isAdvanced = false;
- audioOutputDeviceList.last().accessList.append(DeviceAccess("pulse", "default"));
- haspulse = true;
+ for (int i = 0; i < deviceCount; i++) {
+ const char *idName = libvlc_audio_output_device_id(libvlc, soundSystem, i);
+ const char *longName = libvlc_audio_output_device_longname(libvlc, soundSystem, i);
+
+ DeviceInfo device(idName, longName, false);
+ device.accessList.append(DeviceAccess(idName, QString()));
+ device.capabilities = DeviceInfo::AudioOutput;
+ audioOutputDeviceList.append(device);
+ }
break;
}
-
- DeviceInfo device(audioOutput->psz_name,
- audioOutput->psz_description,
- true);
- device.accessList.append(DeviceAccess(audioOutput->psz_name, QString()));
- device.capabilities = DeviceInfo::AudioOutput;
- audioOutputDeviceList.append(device);
-
- audioOutput = audioOutput->p_next;
- }
- libvlc_audio_output_list_release(start);
-
-#ifdef PHONON_PULSESUPPORT
- if (haspulse) {
- return;
}
- pulse->enable(false);
-#endif
updateDeviceSublist(audioOutputDeviceList, m_audioOutputDeviceList);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic