From dcf79d4998cd106a5ebc62ab213fa954f79c388d Mon Sep 17 00:00:00 2001 From: Lev Zelenskiy Date: Thu, 28 Jun 2012 15:04:09 +1000 Subject: [PATCH] Read actual period size after initializing a stream. QTBUG-23833 Change-Id: I2bd352cf34d12e1be22f640c47fc2388dc3a7f8a Reviewed-by: Michael Goddard --- src/plugins/pulseaudio/qaudioinput_pulse.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/pulseaudio/qaudioinput_pulse.cpp b/src/plugins/pulseaudio/qaudioinput_pulse.cpp index d88a48b..cdb3928 100644 --- a/src/plugins/pulseaudio/qaudioinput_pulse.cpp +++ b/src/plugins/pulseaudio/qaudioinput_pulse.cpp @@ -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; -- 2.7.4