|
|
|
@@ -110,6 +110,7 @@ int JackEngine::Allocate() |
|
|
|
// Graph management |
|
|
|
//------------------ |
|
|
|
|
|
|
|
/* |
|
|
|
bool JackEngine::Process(jack_time_t callback_usecs) |
|
|
|
{ |
|
|
|
bool res = true; |
|
|
|
@@ -131,7 +132,7 @@ bool JackEngine::Process(jack_time_t callback_usecs) |
|
|
|
} else { |
|
|
|
JackLog("Process: graph not finished!\n"); |
|
|
|
if (callback_usecs > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) { |
|
|
|
JackLog("Process: switch to next state %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
JackLog("Process: switch to next state delta = %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
//RemoveZombifiedClients(callback_usecs); TODO |
|
|
|
fLastSwitchUsecs = callback_usecs; |
|
|
|
if (fGraphManager->RunNextGraph()) |
|
|
|
@@ -139,18 +140,69 @@ bool JackEngine::Process(jack_time_t callback_usecs) |
|
|
|
fSignal->SignalAll(); // Signal for threads waiting for next cycle |
|
|
|
res = true; |
|
|
|
} else { |
|
|
|
JackLog("Process: waiting to switch %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
JackLog("Process: waiting to switch delta = %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
if (callback_usecs < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) // Signal XRun only for the first failling cycle |
|
|
|
CheckXRun(callback_usecs); |
|
|
|
fGraphManager->RunCurrentGraph(); |
|
|
|
res = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Transport |
|
|
|
fEngineControl->CycleEnd(fClientTable); |
|
|
|
return res; |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
void JackEngine::ProcessNext(jack_time_t callback_usecs) |
|
|
|
{ |
|
|
|
fLastSwitchUsecs = callback_usecs; |
|
|
|
if (fGraphManager->RunNextGraph()) // True if the graph actually switched to a new state |
|
|
|
fChannel->ClientNotify(ALL_CLIENTS, JackNotifyChannelInterface::kGraphOrderCallback, 0); |
|
|
|
fSignal->SignalAll(); // Signal for threads waiting for next cycle |
|
|
|
} |
|
|
|
|
|
|
|
void JackEngine::ProcessCurrent(jack_time_t callback_usecs) |
|
|
|
{ |
|
|
|
if (callback_usecs < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) // Signal XRun only for the first failling cycle |
|
|
|
CheckXRun(callback_usecs); |
|
|
|
fGraphManager->RunCurrentGraph(); |
|
|
|
} |
|
|
|
|
|
|
|
bool JackEngine::Process(jack_time_t callback_usecs) |
|
|
|
{ |
|
|
|
bool res = true; |
|
|
|
|
|
|
|
// Transport |
|
|
|
fEngineControl->CycleBegin(callback_usecs); |
|
|
|
|
|
|
|
// Timing |
|
|
|
fEngineControl->IncFrameTime(callback_usecs); |
|
|
|
fEngineTiming->UpdateTiming(callback_usecs); |
|
|
|
|
|
|
|
// Graph |
|
|
|
if (fGraphManager->IsFinishedGraph()) { |
|
|
|
ProcessNext(callback_usecs); |
|
|
|
res = true; |
|
|
|
} else { |
|
|
|
JackLog("Process: graph not finished!\n"); |
|
|
|
if (callback_usecs > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) { |
|
|
|
JackLog("Process: switch to next state delta = %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
//RemoveZombifiedClients(callback_usecs); TODO |
|
|
|
ProcessNext(callback_usecs); |
|
|
|
res = true; |
|
|
|
} else { |
|
|
|
JackLog("Process: waiting to switch delta = %ld\n", long(callback_usecs - fLastSwitchUsecs)); |
|
|
|
ProcessCurrent(callback_usecs); |
|
|
|
res = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Transport |
|
|
|
fEngineControl->CycleEnd(fClientTable); |
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
Client that finish *after* the callback date are considered late even if their output buffers may have been |
|
|
|
|