diff options
author | Alex Marsev <alex.marsev@gmail.com> | 2015-10-21 01:40:00 +0300 |
---|---|---|
committer | Alex Marsev <alex.marsev@gmail.com> | 2016-01-24 08:08:10 +0300 |
commit | 6927511f3610bdc889959f17739ba760029989de (patch) | |
tree | c95df2e9fe8b00bbec1bc1be3da8e77c5dd42f21 | |
parent | 5f2752a3f7652a289f48211cd15b967632506621 (diff) |
Sleep to minimize clock slaving jitter
Before starting audio device, if it makes sense to.
-rw-r--r-- | src/AudioRenderer.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/AudioRenderer.cpp b/src/AudioRenderer.cpp index 5df133a..04ba0c9 100644 --- a/src/AudioRenderer.cpp +++ b/src/AudioRenderer.cpp @@ -457,6 +457,23 @@ namespace SaneAudioRenderer if (m_device)
{
+ // Try to minimize clock slaving initial jitter.
+ {
+ REFERENCE_TIME clockTime;
+ m_myClock.GetImmediateTime(&clockTime);
+
+ if (!m_device->IsExclusive())
+ clockTime += m_device->GetStreamLatency();
+
+ int64_t sleepTime = llMulDiv(m_startTime + m_startClockOffset - clockTime, 1000, OneSecond, 0);
+
+ if (sleepTime > 0 && sleepTime < 200)
+ {
+ TimePeriodHelper timePeriodHelper(1);
+ Sleep((DWORD)sleepTime);
+ }
+ }
+
m_guidedReclockOffset = 0;
m_myClock.SlaveClockToAudio(m_device->GetClock(), m_startTime + m_startClockOffset);
m_clockCorrection = 0;
|