src/multimedia/audio/qaudiooutput_alsa_p.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
child 18 2f34d5167611
--- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -52,6 +52,7 @@
 
 #include <QtCore/qcoreapplication.h>
 #include "qaudiooutput_alsa_p.h"
+#include "qaudiodeviceinfo_alsa_p.h"
 
 QT_BEGIN_NAMESPACE
 
@@ -77,7 +78,7 @@
     intervalTime = 1000;
     audioBuffer = 0;
     errorState = QAudio::NoError;
-    deviceState = QAudio::StopState;
+    deviceState = QAudio::StoppedState;
     audioSource = 0;
     pullMode = true;
     resuming = false;
@@ -215,8 +216,8 @@
 
 QIODevice* QAudioOutputPrivate::start(QIODevice* device)
 {
-    if(deviceState != QAudio::StopState)
-        deviceState = QAudio::StopState;
+    if(deviceState != QAudio::StoppedState)
+        deviceState = QAudio::StoppedState;
 
     errorState = QAudio::NoError;
 
@@ -256,9 +257,9 @@
 
 void QAudioOutputPrivate::stop()
 {
-    if(deviceState == QAudio::StopState)
+    if(deviceState == QAudio::StoppedState)
         return;
-    deviceState = QAudio::StopState;
+    deviceState = QAudio::StoppedState;
     close();
     emit stateChanged(deviceState);
 }
@@ -281,21 +282,31 @@
     unsigned int freakuency=settings.frequency();
 
     QString dev = QLatin1String(m_device.constData());
-    if(!dev.contains(QLatin1String("default"))) {
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) 
-        dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData()));
+    QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
+    if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(devices.first().constData());
+#else
+        dev = QLatin1String("hw:0,0");
+#endif
+    } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+        dev = QLatin1String(m_device);
 #else
         int idx = 0;
         char *name;
 
+        QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
+
 	while(snd_card_get_name(idx,&name) == 0) {
-            if(m_device.contains(name))
+            if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
                 break;
             idx++;
 	}
         dev = QString(QLatin1String("hw:%1,0")).arg(idx);
 #endif
     }
+
     // Step 1: try and open the device
     while((count < 5) && (err < 0)) {
         err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
@@ -304,7 +315,7 @@
     }
     if (( err < 0)||(handle == 0)) {
         errorState = QAudio::OpenError;
-        deviceState = QAudio::StopState;
+        deviceState = QAudio::StoppedState;
         return false;
     }
     snd_pcm_nonblock( handle, 0 );
@@ -387,7 +398,7 @@
     if( err < 0) {
         qWarning()<<errMessage;
         errorState = QAudio::OpenError;
-        deviceState = QAudio::StopState;
+        deviceState = QAudio::StoppedState;
         return false;
     }
     snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
@@ -431,7 +442,7 @@
 
 void QAudioOutputPrivate::close()
 {
-    deviceState = QAudio::StopState;
+    deviceState = QAudio::StoppedState;
     timer->stop();
 
     if ( handle ) {
@@ -494,7 +505,7 @@
     if(err < 0) {
         close();
         errorState = QAudio::FatalError;
-        deviceState = QAudio::StopState;
+        deviceState = QAudio::StoppedState;
         emit stateChanged(deviceState);
     }
     return 0;
@@ -507,7 +518,7 @@
 
 void QAudioOutputPrivate::setBufferSize(int value)
 {
-    if(deviceState == QAudio::StopState)
+    if(deviceState == QAudio::StoppedState)
         buffer_size = value;
 }
 
@@ -529,14 +540,14 @@
     return intervalTime;
 }
 
-qint64 QAudioOutputPrivate::totalTime() const
+qint64 QAudioOutputPrivate::processedUSecs() const
 {
     return totalTimeValue;
 }
 
 void QAudioOutputPrivate::resume()
 {
-    if(deviceState == QAudio::SuspendState) {
+    if(deviceState == QAudio::SuspendedState) {
         int err = 0;
 
         if(handle) {
@@ -571,7 +582,7 @@
 {
     if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
         timer->stop();
-        deviceState = QAudio::SuspendState;
+        deviceState = QAudio::SuspendedState;
         errorState = QAudio::NoError;
         emit stateChanged(deviceState);
     }
@@ -579,7 +590,7 @@
 
 void QAudioOutputPrivate::userFeed()
 {
-    if(deviceState == QAudio::StopState || deviceState == QAudio::SuspendState)
+    if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
         return;
 #ifdef DEBUG_AUDIO
     QTime now(QTime::currentTime());
@@ -658,15 +669,15 @@
     return true;
 }
 
-qint64 QAudioOutputPrivate::clock() const
+qint64 QAudioOutputPrivate::elapsedUSecs() const
 {
     if(!handle)
         return 0;
 
-    if (deviceState == QAudio::StopState)
+    if (deviceState == QAudio::StoppedState)
         return 0;
 
-#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) 
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
     snd_pcm_status_t* status;
     snd_pcm_status_alloca(&status);