diff options
Diffstat (limited to 'src/multimedia')
-rw-r--r-- | src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp | 40 | ||||
-rw-r--r-- | src/multimedia/audio/qaudioinput_alsa_p.cpp | 19 | ||||
-rw-r--r-- | src/multimedia/audio/qaudioinput_alsa_p.h | 1 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiooutput_alsa_p.cpp | 17 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiooutput_alsa_p.h | 1 |
5 files changed, 74 insertions, 4 deletions
diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 55020a6..e828238 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -52,6 +52,8 @@ #include "qaudiodeviceinfo_alsa_p.h" +#include <alsa/version.h> + QT_BEGIN_NAMESPACE QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode) @@ -151,8 +153,19 @@ bool QAudioDeviceInfoInternal::open() int err = 0; QString dev = device; if(!dev.contains(QLatin1String("default"))) { - int idx = snd_card_get_index(dev.toLocal8Bit().constData()); +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QString(QLatin1String("default:CARD=%1")).arg(dev); +#else + int idx = 0; + char *name; + + while(snd_card_get_name(idx,&name) == 0) { + if(dev.contains(QLatin1String(name))) + break; + idx++; + } dev = QString(QLatin1String("hw:%1,0")).arg(idx); +#endif } if(mode == QAudio::AudioOutput) { err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -184,8 +197,19 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const // open() if(!dev.contains(QLatin1String("default"))) { - int idx = snd_card_get_index(dev.toLocal8Bit().constData()); +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QString(QLatin1String("default:CARD=%1")).arg(dev); +#else + int idx = 0; + char *name; + + while(snd_card_get_name(idx,&name) == 0) { + if(dev.contains(QLatin1String(name))) + break; + idx++; + } dev = QString(QLatin1String("hw:%1,0")).arg(idx); +#endif } if(mode == QAudio::AudioOutput) { err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -362,7 +386,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode) { QList<QByteArray> devices; QByteArray filter; - +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) // Create a list of all current audio devices that support mode void **hints, **n; char *name, *descr, *io; @@ -404,7 +428,17 @@ QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode) if(devices.size() > 0) { devices.append("default"); } +#else + int idx = 0; + char* name; + while(snd_card_get_name(idx,&name) == 0) { + devices.append(name); + idx++; + } + if (idx > 0) + devices.append("default"); +#endif return devices; } diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index 5e9aa81..6786657 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -249,6 +249,7 @@ bool QAudioInputPrivate::open() QTime now(QTime::currentTime()); qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()"; #endif + clockStamp.restart(); timeStamp.restart(); elapsedTimeOffset = 0; @@ -259,9 +260,21 @@ bool QAudioInputPrivate::open() QString dev = QString(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())); - } +#else + int idx = 0; + char *name; + while(snd_card_get_name(idx,&name) == 0) { + if(m_device.contains(name)) + 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_CAPTURE,0); @@ -601,6 +614,7 @@ qint64 QAudioInputPrivate::clock() const if (deviceState == QAudio::StopState) return 0; +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); @@ -619,6 +633,9 @@ qint64 QAudioInputPrivate::clock() const return ((t1.tv_sec * 1000)+l/1000); } else return 0; +#else + return clockStamp.elapsed()*1000; +#endif } void QAudioInputPrivate::reset() diff --git a/src/multimedia/audio/qaudioinput_alsa_p.h b/src/multimedia/audio/qaudioinput_alsa_p.h index 5583ea0..2ed7453 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.h +++ b/src/multimedia/audio/qaudioinput_alsa_p.h @@ -117,6 +117,7 @@ private: QTimer* timer; QTime timeStamp; + QTime clockStamp; qint64 elapsedTimeOffset; int intervalTime; char* audioBuffer; diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index d814d97..efa7b27 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -282,7 +282,19 @@ bool QAudioOutputPrivate::open() 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())); +#else + int idx = 0; + char *name; + + while(snd_card_get_name(idx,&name) == 0) { + if(m_device.contains(name)) + break; + idx++; + } + dev = QString(QLatin1String("hw:%1,0")).arg(idx); +#endif } // Step 1: try and open the device while((count < 5) && (err < 0)) { @@ -407,6 +419,7 @@ bool QAudioOutputPrivate::open() // Step 6: Start audio processing timer->start(period_time/1000); + clockStamp.restart(); timeStamp.restart(); elapsedTimeOffset = 0; errorState = QAudio::NoError; @@ -653,6 +666,7 @@ qint64 QAudioOutputPrivate::clock() const if (deviceState == QAudio::StopState) return 0; +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); @@ -671,6 +685,9 @@ qint64 QAudioOutputPrivate::clock() const return ((t1.tv_sec * 1000)+l/1000); } else return 0; +#else + return clockStamp.elapsed()*1000; +#endif return 0; } diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.h b/src/multimedia/audio/qaudiooutput_alsa_p.h index 6d4177d..298e89e 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.h +++ b/src/multimedia/audio/qaudiooutput_alsa_p.h @@ -134,6 +134,7 @@ private: QByteArray m_device; int bytesAvailable; QTime timeStamp; + QTime clockStamp; qint64 elapsedTimeOffset; char* audioBuffer; snd_pcm_t* handle; |