Correct JackFrameTimer::ResetFrameTime for new Fons DLL model.

This commit is contained in:
Stephane Letz 2012-03-22 15:13:21 +01:00
parent 43990aee85
commit 85b14bd45d
4 changed files with 4 additions and 7 deletions

View File

@ -97,7 +97,7 @@ void JackEngineControl::ResetRollingUsecs()
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;
if (delayed_usecs > fMaxDelayedUsecs) {
fMaxDelayedUsecs = delayed_usecs;

View File

@ -162,7 +162,7 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem
void ResetFrameTime(jack_time_t callback_usecs)
{
fFrameTimer.ResetFrameTime(fSampleRate, callback_usecs, fPeriodUsecs);
fFrameTimer.ResetFrameTime(callback_usecs);
}
void ReadFrameTime(JackTimer* timer)

View File

@ -122,15 +122,12 @@ void JackFrameTimer::IncFrameTime(jack_nframes_t buffer_size, jack_time_t callba
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
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->fCurrentCallback = callback_usecs;
timer->fNextWakeUp = callback_usecs + period_usecs;
WriteNextStateStop();
TrySwitchState(); // always succeed since there is only one writer
}

View File

@ -93,7 +93,7 @@ class SERVER_EXPORT JackFrameTimer : public JackAtomicState<JackTimer>
{}
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 ReadFrameTime(JackTimer* timer);