From 3c82c2e45c8395b78b3a98db2d9a5364b191edb9 Mon Sep 17 00:00:00 2001 From: Tomasz Olszak Date: Wed, 23 Jan 2019 12:24:05 +0100 Subject: Make QPulseAudioOutput::elapsedUSecs prone to OS time change Pulseaudio implementation of QAudioOutput used QTime as time counter. Hence when output was started and timezone or time has changed the QAudioOutput::elapsedUSecs() returned faulty values. It happened because QTime::elapsed is undefined after system clock update. Using QElapsedTimer instead of QTime seems safer. Change-Id: I1f0c27deea550f249e2ccad0fc716b95a32608ae Reviewed-by: VaL Doroshchuk --- src/plugins/pulseaudio/qaudiooutput_pulse.cpp | 3 +-- src/plugins/pulseaudio/qaudiooutput_pulse.h | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp index b4bd1c55c..19ddac1e5 100644 --- a/src/plugins/pulseaudio/qaudiooutput_pulse.cpp +++ b/src/plugins/pulseaudio/qaudiooutput_pulse.cpp @@ -496,8 +496,7 @@ void QPulseAudioOutput::userFeed() if (m_notifyInterval && (m_timeStamp.elapsed() + m_elapsedTimeOffset) > m_notifyInterval) { emit notify(); - m_elapsedTimeOffset = m_timeStamp.elapsed() + m_elapsedTimeOffset - m_notifyInterval; - m_timeStamp.restart(); + m_elapsedTimeOffset = m_timeStamp.restart() + m_elapsedTimeOffset - m_notifyInterval; } } diff --git a/src/plugins/pulseaudio/qaudiooutput_pulse.h b/src/plugins/pulseaudio/qaudiooutput_pulse.h index 58f175e18..40d052681 100644 --- a/src/plugins/pulseaudio/qaudiooutput_pulse.h +++ b/src/plugins/pulseaudio/qaudiooutput_pulse.h @@ -55,7 +55,7 @@ #include #include #include -#include +#include #include #include "qaudio.h" @@ -131,11 +131,11 @@ private: int m_periodSize; int m_bufferSize; int m_maxBufferSize; - QTime m_clockStamp; + QElapsedTimer m_clockStamp; qint64 m_totalTimeValue; QTimer *m_tickTimer; char *m_audioBuffer; - QTime m_timeStamp; + QElapsedTimer m_timeStamp; qint64 m_elapsedTimeOffset; bool m_resuming; QString m_category; -- cgit v1.2.1