Did some investigation - the problem has at least 2 parts. The first problem is around this line:
int usRefToVSync = vsyncThread->usFromTimerToNextSync(&data.m_referenceTime);
When "data.m_referenceTime" is newer than the VSync thread's "m_timer" the resulting call to "PerformanceTimer::difference()" underflows an unsigned int, resulting in a huge "offset" which is used on this line:
The first part is to fix this underflow, define what "difference()" should return in this case, and in general, handle the case where "data.m_referenceTime" is newer than the vsync thread's "m_timer" .
The 2nd part is this. I fixed the underflow and the playPos no longer jumps around. But the waveform (appears to) run at a very low framerate. I'm guessing the VSync thread is getting starved.
Did some investigation - the problem has at least 2 parts. The first problem is around this line:
int usRefToVSync = vsyncThread- >usFromTimerToN extSync( &data.m_ referenceTime) ;
When "data.m_ referenceTime" is newer than the VSync thread's "m_timer" the resulting call to "PerformanceTim er::difference( )" underflows an unsigned int, resulting in a huge "offset" which is used on this line:
playPos += data.m_positionStep * offset * data.m_rate / m_dAudioBufferSize / 1000;
so the playPos jumps way too far ahead.
The first part is to fix this underflow, define what "difference()" should return in this case, and in general, handle the case where "data.m_ referenceTime" is newer than the vsync thread's "m_timer" .
The 2nd part is this. I fixed the underflow and the playPos no longer jumps around. But the waveform (appears to) run at a very low framerate. I'm guessing the VSync thread is getting starved.