git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4759 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.9.5
@@ -46,25 +46,20 @@ int JackAudioDriver::SetBufferSize(jack_nframes_t buffer_size) | |||
// Update engine and graph manager state | |||
fEngineControl->fBufferSize = buffer_size; | |||
fGraphManager->SetBufferSize(buffer_size); | |||
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec | |||
if (!fEngineControl->fTimeOut) { | |||
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * fEngineControl->fPeriodUsecs); | |||
} | |||
fEngineControl->UpdateTimeOut(); | |||
UpdateLatencies(); | |||
// Redirect on slaves drivers... | |||
// Redirected on slaves drivers... | |||
return JackDriver::SetBufferSize(buffer_size); | |||
} | |||
int JackAudioDriver::SetSampleRate(jack_nframes_t sample_rate) | |||
{ | |||
fEngineControl->fSampleRate = sample_rate; | |||
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec | |||
if (!fEngineControl->fTimeOut) { | |||
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * fEngineControl->fPeriodUsecs); | |||
} | |||
fEngineControl->UpdateTimeOut(); | |||
// Redirected on slaves drivers... | |||
return JackDriver::SetSampleRate(sample_rate); | |||
} | |||
@@ -129,10 +129,7 @@ int JackDriver::Open(bool capturing, | |||
strcpy(fCaptureDriverName, capture_driver_name); | |||
strcpy(fPlaybackDriverName, playback_driver_name); | |||
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec | |||
if (!fEngineControl->fTimeOut) { | |||
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * fEngineControl->fPeriodUsecs); | |||
} | |||
fEngineControl->UpdateTimeOut(); | |||
fGraphManager->DirectConnect(fClientControl.fRefNum, fClientControl.fRefNum); // Connect driver to itself for "sync" mode | |||
SetupDriverSync(fClientControl.fRefNum, false); | |||
@@ -183,10 +180,7 @@ int JackDriver::Open(jack_nframes_t buffer_size, | |||
strcpy(fCaptureDriverName, capture_driver_name); | |||
strcpy(fPlaybackDriverName, playback_driver_name); | |||
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec | |||
if (!fEngineControl->fTimeOut) { | |||
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * fEngineControl->fPeriodUsecs); | |||
} | |||
fEngineControl->UpdateTimeOut(); | |||
fGraphManager->SetBufferSize(buffer_size); | |||
fGraphManager->DirectConnect(fClientControl.fRefNum, fClientControl.fRefNum); // Connect driver to itself for "sync" mode | |||
@@ -176,7 +176,7 @@ class SERVER_EXPORT JackDriver : public JackDriverClientInterface | |||
void CycleTakeEndTime(); | |||
void SetupDriverSync(int ref, bool freewheel); | |||
void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs); // XRun notification sent by the driver | |||
void NotifyBufferSize(jack_nframes_t buffer_size); // BufferSize notification sent by the driver | |||
void NotifySampleRate(jack_nframes_t sample_rate); // SampleRate notification sent by the driver | |||
@@ -163,8 +163,9 @@ void JackEngine::ProcessNext(jack_time_t cur_cycle_begin) | |||
void JackEngine::ProcessCurrent(jack_time_t cur_cycle_begin) | |||
{ | |||
if (cur_cycle_begin < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) // Signal XRun only for the first failing cycle | |||
if (cur_cycle_begin < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) { // Signal XRun only for the first failing cycle | |||
CheckXRun(cur_cycle_begin); | |||
} | |||
fGraphManager->RunCurrentGraph(); | |||
} | |||
@@ -265,10 +266,12 @@ void JackEngine::NotifyClient(int refnum, int event, int sync, const char* messa | |||
Important for internal clients : unlock before calling the notification callbacks. | |||
*/ | |||
bool res = Unlock(); | |||
if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, message, value1, value2) < 0) | |||
if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, message, value1, value2) < 0) { | |||
jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | |||
if (res) | |||
} | |||
if (res) { | |||
Lock(); | |||
} | |||
} else { | |||
jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); | |||
@@ -508,13 +511,15 @@ bool JackEngine::ClientCheckName(const char* name) | |||
{ | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||
return true; | |||
} | |||
} | |||
for (std::map<int,std::string>::iterator i = fReservationMap.begin(); i != fReservationMap.end(); i++) { | |||
if (i->second == name) | |||
if (i->second == name) { | |||
return true; | |||
} | |||
} | |||
return false; | |||
@@ -527,8 +532,9 @@ int JackEngine::GetNewUUID() | |||
void JackEngine::EnsureUUID(int uuid) | |||
{ | |||
if (uuid > fMaxUUID) | |||
fMaxUUID = uuid+1; | |||
if (uuid > fMaxUUID) { | |||
fMaxUUID = uuid + 1; | |||
} | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
@@ -542,8 +548,9 @@ int JackEngine::GetClientPID(const char* name) | |||
{ | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||
return client->GetClientControl()->fPID; | |||
} | |||
} | |||
return 0; | |||
@@ -553,8 +560,9 @@ int JackEngine::GetClientRefNum(const char* name) | |||
{ | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||
return client->GetClientControl()->fRefNum; | |||
} | |||
} | |||
return -1; | |||
@@ -124,6 +124,14 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem | |||
~JackEngineControl() | |||
{} | |||
void UpdateTimeOut() | |||
{ | |||
fPeriodUsecs = jack_time_t(1000000.f / fSampleRate * fBufferSize); // In microsec | |||
if (!(fTimeOut && fTimeOutUsecs > 2 * fPeriodUsecs)) { | |||
fTimeOutUsecs = 2 * fPeriodUsecs; | |||
} | |||
} | |||
// Cycle | |||
void CycleIncTime(jack_time_t callback_usecs) | |||
@@ -136,6 +136,8 @@ int JackMidiDriver::SetBufferSize(jack_nframes_t buffer_size) | |||
int JackMidiDriver::ProcessReadSync() | |||
{ | |||
int res = 0; | |||
jack_log("JackMidiDriver::ProcessReadSync"); | |||
// Read input buffers for the current cycle | |||
if (Read() < 0) { | |||
@@ -154,6 +156,8 @@ int JackMidiDriver::ProcessReadSync() | |||
int JackMidiDriver::ProcessWriteSync() | |||
{ | |||
int res = 0; | |||
jack_log("JackMidiDriver::ProcessWriteSync"); | |||
if (SuspendRefNum() < 0) { | |||
jack_error("JackMidiDriver::ProcessWriteSync: SuspendRefNum error"); | |||
@@ -172,6 +176,8 @@ int JackMidiDriver::ProcessWriteSync() | |||
int JackMidiDriver::ProcessReadAsync() | |||
{ | |||
int res = 0; | |||
jack_log("JackMidiDriver::ProcessReadAsync"); | |||
// Read input buffers for the current cycle | |||
if (Read() < 0) { | |||
@@ -195,6 +201,7 @@ int JackMidiDriver::ProcessReadAsync() | |||
int JackMidiDriver::ProcessWriteAsync() | |||
{ | |||
jack_log("JackMidiDriver::ProcessWriteAsync"); | |||
return 0; | |||
} | |||