diff options
author | Justin McPherson <justin.mcpherson@nokia.com> | 2009-11-11 03:57:30 (GMT) |
---|---|---|
committer | Justin McPherson <justin.mcpherson@nokia.com> | 2009-11-12 05:39:38 (GMT) |
commit | 80c24f730c3443e8c05fca374fca365456034fe8 (patch) | |
tree | a5f9c43098b280a64594bb5acccbdc4bcc9e8e99 | |
parent | efc566799797a9088628ac21d83ee2d39805fabc (diff) | |
download | Qt-80c24f730c3443e8c05fca374fca365456034fe8.zip Qt-80c24f730c3443e8c05fca374fca365456034fe8.tar.gz Qt-80c24f730c3443e8c05fca374fca365456034fe8.tar.bz2 |
Gstreamer: Do not assume that the list index is the same as the device
id.
This fix is similar to KDE change 1027568 by cguthrie.
This commit fixes a bug that was highlighted when devices had been
added/removed or the backend was reloaded.
The AudioDevice used to use a static counter to allocate itself
a device id that was propigated through the Phonon API.
Code in the Backend invalidly assumed that the index
in the list was the same as this id.
-rw-r--r-- | src/3rdparty/phonon/gstreamer/audiooutput.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/3rdparty/phonon/gstreamer/audiooutput.cpp b/src/3rdparty/phonon/gstreamer/audiooutput.cpp index fcadac2..641ff6b 100644 --- a/src/3rdparty/phonon/gstreamer/audiooutput.cpp +++ b/src/3rdparty/phonon/gstreamer/audiooutput.cpp @@ -136,11 +136,19 @@ bool AudioOutput::setOutputDevice(int newDevice) bool success = false; const QList<AudioDevice> deviceList = m_backend->deviceManager()->audioOutputDevices(); - if (m_audioSink && newDevice >= 0 && newDevice < deviceList.size()) { + int deviceIdx = -1; + for (int i=0; i<deviceList.size(); i++) { + if (deviceList.at(i).id == newDevice) { + deviceIdx = i; + break; + } + } + + if (m_audioSink && deviceIdx >= 0) { // 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(deviceIdx).gstId; m_device = newDevice; // We test if the device can be opened by checking if it can go from NULL to READY state |