@@ -97,7 +97,7 @@ void JackEngineControl::ResetRollingUsecs() | |||||
void JackEngineControl::NotifyXRun(jack_time_t callback_usecs, float delayed_usecs) | void JackEngineControl::NotifyXRun(jack_time_t callback_usecs, float delayed_usecs) | ||||
{ | { | ||||
ResetFrameTime(callback_usecs); // Is this still necessary? SL 03/21/2012 | |||||
ResetFrameTime(callback_usecs); | |||||
fXrunDelayedUsecs = delayed_usecs; | fXrunDelayedUsecs = delayed_usecs; | ||||
if (delayed_usecs > fMaxDelayedUsecs) { | if (delayed_usecs > fMaxDelayedUsecs) { | ||||
fMaxDelayedUsecs = delayed_usecs; | fMaxDelayedUsecs = delayed_usecs; | ||||
@@ -162,7 +162,7 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem | |||||
void ResetFrameTime(jack_time_t callback_usecs) | void ResetFrameTime(jack_time_t callback_usecs) | ||||
{ | { | ||||
fFrameTimer.ResetFrameTime(fSampleRate, callback_usecs, fPeriodUsecs); | |||||
fFrameTimer.ResetFrameTime(callback_usecs); | |||||
} | } | ||||
void ReadFrameTime(JackTimer* timer) | void ReadFrameTime(JackTimer* timer) | ||||
@@ -122,15 +122,12 @@ void JackFrameTimer::IncFrameTime(jack_nframes_t buffer_size, jack_time_t callba | |||||
IncFrameTimeAux(buffer_size, callback_usecs, period_usecs); | IncFrameTimeAux(buffer_size, callback_usecs, period_usecs); | ||||
} | } | ||||
void JackFrameTimer::ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs) | |||||
void JackFrameTimer::ResetFrameTime(jack_time_t callback_usecs) | |||||
{ | { | ||||
if (!fFirstWakeUp) { // ResetFrameTime may be called by a xrun/delayed wakeup on the first cycle | if (!fFirstWakeUp) { // ResetFrameTime may be called by a xrun/delayed wakeup on the first cycle | ||||
JackTimer* timer = WriteNextStateStart(); | JackTimer* timer = WriteNextStateStart(); | ||||
jack_nframes_t period_size_guess = (jack_nframes_t)(frames_rate * ((timer->fNextWakeUp - timer->fCurrentWakeup) / 1000000.0)); | |||||
timer->fFrames += ((callback_usecs - timer->fNextWakeUp) / period_size_guess) * period_size_guess; | |||||
timer->fCurrentWakeup = callback_usecs; | timer->fCurrentWakeup = callback_usecs; | ||||
timer->fCurrentCallback = callback_usecs; | timer->fCurrentCallback = callback_usecs; | ||||
timer->fNextWakeUp = callback_usecs + period_usecs; | |||||
WriteNextStateStop(); | WriteNextStateStop(); | ||||
TrySwitchState(); // always succeed since there is only one writer | TrySwitchState(); // always succeed since there is only one writer | ||||
} | } | ||||
@@ -93,7 +93,7 @@ class SERVER_EXPORT JackFrameTimer : public JackAtomicState<JackTimer> | |||||
{} | {} | ||||
void InitFrameTime(); | void InitFrameTime(); | ||||
void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs); | |||||
void ResetFrameTime(jack_time_t callback_usecs); | |||||
void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs); | void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs); | ||||
void ReadFrameTime(JackTimer* timer); | void ReadFrameTime(JackTimer* timer); | ||||