Read actual period size after initializing a stream.
authorLev Zelenskiy <lev.zelenskiy@nokia.com>
Thu, 28 Jun 2012 05:04:09 +0000 (15:04 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 28 Jun 2012 07:17:47 +0000 (09:17 +0200)
QTBUG-23833

Change-Id: I2bd352cf34d12e1be22f640c47fc2388dc3a7f8a
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
src/plugins/pulseaudio/qaudioinput_pulse.cpp

index d88a48b..cdb3928 100644 (file)
@@ -169,6 +169,7 @@ QPulseAudioInput::QPulseAudioInput(const QByteArray &device)
     , m_bufferSize(0)
     , m_periodSize(0)
     , m_intervalTime(1000)
+    , m_periodTime(PeriodTimeMs)
     , m_stream(0)
     , m_device(device)
 {
@@ -345,13 +346,18 @@ bool QPulseAudioInput::open()
         pa_threaded_mainloop_wait(pulseEngine->mainloop());
     }
 
+    const pa_buffer_attr *actualBufferAttr = pa_stream_get_buffer_attr(m_stream);
+    m_periodSize = actualBufferAttr->fragsize;
+    m_periodTime = pa_bytes_to_usec(m_periodSize, &spec) / 1000;
+    if (actualBufferAttr->tlength != (uint32_t)-1)
+        m_bufferSize = actualBufferAttr->tlength;
+
     setPulseVolume();
 
     pa_threaded_mainloop_unlock(pulseEngine->mainloop());
 
     m_opened = true;
-    m_periodSize = pa_usec_to_bytes(PeriodTimeMs*1000, &spec);
-    m_timer->start(PeriodTimeMs);
+    m_timer->start(m_periodTime);
     m_errorState = QAudio::NoError;
 
     m_totalTimeValue = 0;
@@ -533,7 +539,7 @@ void QPulseAudioInput::resume()
 
         pa_threaded_mainloop_unlock(pulseEngine->mainloop());
 
-        m_timer->start(PeriodTimeMs);
+        m_timer->start(m_periodTime);
 
         m_deviceState = QAudio::ActiveState;