OpenSL ES: lazy initialization of QAudioInput's supported formats.
authorYoann Lopes <yoann.lopes@digia.com>
Tue, 11 Mar 2014 11:31:34 +0000 (12:31 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 18 Mar 2014 13:47:48 +0000 (14:47 +0100)
Change-Id: I51cdd35a944c990ce7df999bcb6063342e98c62d
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
src/plugins/opensles/qopenslesengine.cpp
src/plugins/opensles/qopenslesengine.h

index 056b51e..68c324f 100644 (file)
@@ -55,6 +55,7 @@ Q_GLOBAL_STATIC(QOpenSLESEngine, openslesEngine);
 QOpenSLESEngine::QOpenSLESEngine()
     : m_engineObject(0)
     , m_engine(0)
+    , m_checkedInputFormats(false)
 {
     SLresult result;
 
@@ -66,8 +67,6 @@ QOpenSLESEngine::QOpenSLESEngine()
 
     result = (*m_engineObject)->GetInterface(m_engineObject, SL_IID_ENGINE, &m_engine);
     CheckError("Failed to get engine interface");
-
-    checkSupportedInputFormats();
 }
 
 QOpenSLESEngine::~QOpenSLESEngine()
@@ -118,15 +117,20 @@ QList<QByteArray> QOpenSLESEngine::availableDevices(QAudio::Mode mode) const
 
 QList<int> QOpenSLESEngine::supportedChannelCounts(QAudio::Mode mode) const
 {
-    if (mode == QAudio::AudioInput)
+    if (mode == QAudio::AudioInput) {
+        if (!m_checkedInputFormats)
+            const_cast<QOpenSLESEngine *>(this)->checkSupportedInputFormats();
         return m_supportedInputChannelCounts;
-    else
+    } else {
         return QList<int>() << 1 << 2;
+    }
 }
 
 QList<int> QOpenSLESEngine::supportedSampleRates(QAudio::Mode mode) const
 {
     if (mode == QAudio::AudioInput) {
+        if (!m_checkedInputFormats)
+            const_cast<QOpenSLESEngine *>(this)->checkSupportedInputFormats();
         return m_supportedInputSampleRates;
     } else {
         return QList<int>() << 8000 << 11025 << 12000 << 16000 << 22050
@@ -177,6 +181,8 @@ void QOpenSLESEngine::checkSupportedInputFormats()
         if (inputFormatIsSupported(format))
             m_supportedInputChannelCounts.append(2);
     }
+
+    m_checkedInputFormats = true;
 }
 
 bool QOpenSLESEngine::inputFormatIsSupported(SLDataFormat_PCM format)
index 9f12ac6..81d1f66 100644 (file)
@@ -75,6 +75,7 @@ private:
 
     QList<int> m_supportedInputChannelCounts;
     QList<int> m_supportedInputSampleRates;
+    bool m_checkedInputFormats;
 };
 
 QT_END_NAMESPACE