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 | // Update engine and graph manager state | ||||
fEngineControl->fBufferSize = buffer_size; | fEngineControl->fBufferSize = buffer_size; | ||||
fGraphManager->SetBufferSize(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(); | UpdateLatencies(); | ||||
// Redirect on slaves drivers... | |||||
// Redirected on slaves drivers... | |||||
return JackDriver::SetBufferSize(buffer_size); | return JackDriver::SetBufferSize(buffer_size); | ||||
} | } | ||||
int JackAudioDriver::SetSampleRate(jack_nframes_t sample_rate) | int JackAudioDriver::SetSampleRate(jack_nframes_t sample_rate) | ||||
{ | { | ||||
fEngineControl->fSampleRate = 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); | return JackDriver::SetSampleRate(sample_rate); | ||||
} | } | ||||
@@ -129,10 +129,7 @@ int JackDriver::Open(bool capturing, | |||||
strcpy(fCaptureDriverName, capture_driver_name); | strcpy(fCaptureDriverName, capture_driver_name); | ||||
strcpy(fPlaybackDriverName, playback_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 | fGraphManager->DirectConnect(fClientControl.fRefNum, fClientControl.fRefNum); // Connect driver to itself for "sync" mode | ||||
SetupDriverSync(fClientControl.fRefNum, false); | SetupDriverSync(fClientControl.fRefNum, false); | ||||
@@ -183,10 +180,7 @@ int JackDriver::Open(jack_nframes_t buffer_size, | |||||
strcpy(fCaptureDriverName, capture_driver_name); | strcpy(fCaptureDriverName, capture_driver_name); | ||||
strcpy(fPlaybackDriverName, playback_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->SetBufferSize(buffer_size); | ||||
fGraphManager->DirectConnect(fClientControl.fRefNum, fClientControl.fRefNum); // Connect driver to itself for "sync" mode | 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 CycleTakeEndTime(); | ||||
void SetupDriverSync(int ref, bool freewheel); | void SetupDriverSync(int ref, bool freewheel); | ||||
void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs); // XRun notification sent by the driver | 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 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 | 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) | 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); | CheckXRun(cur_cycle_begin); | ||||
} | |||||
fGraphManager->RunCurrentGraph(); | 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. | Important for internal clients : unlock before calling the notification callbacks. | ||||
*/ | */ | ||||
bool res = Unlock(); | 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); | jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); | ||||
if (res) | |||||
} | |||||
if (res) { | |||||
Lock(); | Lock(); | ||||
} | |||||
} else { | } else { | ||||
jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); | 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++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[i]; | JackClientInterface* client = fClientTable[i]; | ||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||||
return true; | return true; | ||||
} | |||||
} | } | ||||
for (std::map<int,std::string>::iterator i = fReservationMap.begin(); i != fReservationMap.end(); i++) { | 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 true; | ||||
} | |||||
} | } | ||||
return false; | return false; | ||||
@@ -527,8 +532,9 @@ int JackEngine::GetNewUUID() | |||||
void JackEngine::EnsureUUID(int uuid) | 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++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[i]; | JackClientInterface* client = fClientTable[i]; | ||||
@@ -542,8 +548,9 @@ int JackEngine::GetClientPID(const char* name) | |||||
{ | { | ||||
for (int i = 0; i < CLIENT_NUM; i++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[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 client->GetClientControl()->fPID; | ||||
} | |||||
} | } | ||||
return 0; | return 0; | ||||
@@ -553,8 +560,9 @@ int JackEngine::GetClientRefNum(const char* name) | |||||
{ | { | ||||
for (int i = 0; i < CLIENT_NUM; i++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[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 client->GetClientControl()->fRefNum; | ||||
} | |||||
} | } | ||||
return -1; | return -1; | ||||
@@ -124,6 +124,14 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem | |||||
~JackEngineControl() | ~JackEngineControl() | ||||
{} | {} | ||||
void UpdateTimeOut() | |||||
{ | |||||
fPeriodUsecs = jack_time_t(1000000.f / fSampleRate * fBufferSize); // In microsec | |||||
if (!(fTimeOut && fTimeOutUsecs > 2 * fPeriodUsecs)) { | |||||
fTimeOutUsecs = 2 * fPeriodUsecs; | |||||
} | |||||
} | |||||
// Cycle | // Cycle | ||||
void CycleIncTime(jack_time_t callback_usecs) | void CycleIncTime(jack_time_t callback_usecs) | ||||
@@ -136,6 +136,8 @@ int JackMidiDriver::SetBufferSize(jack_nframes_t buffer_size) | |||||
int JackMidiDriver::ProcessReadSync() | int JackMidiDriver::ProcessReadSync() | ||||
{ | { | ||||
int res = 0; | int res = 0; | ||||
jack_log("JackMidiDriver::ProcessReadSync"); | |||||
// Read input buffers for the current cycle | // Read input buffers for the current cycle | ||||
if (Read() < 0) { | if (Read() < 0) { | ||||
@@ -154,6 +156,8 @@ int JackMidiDriver::ProcessReadSync() | |||||
int JackMidiDriver::ProcessWriteSync() | int JackMidiDriver::ProcessWriteSync() | ||||
{ | { | ||||
int res = 0; | int res = 0; | ||||
jack_log("JackMidiDriver::ProcessWriteSync"); | |||||
if (SuspendRefNum() < 0) { | if (SuspendRefNum() < 0) { | ||||
jack_error("JackMidiDriver::ProcessWriteSync: SuspendRefNum error"); | jack_error("JackMidiDriver::ProcessWriteSync: SuspendRefNum error"); | ||||
@@ -172,6 +176,8 @@ int JackMidiDriver::ProcessWriteSync() | |||||
int JackMidiDriver::ProcessReadAsync() | int JackMidiDriver::ProcessReadAsync() | ||||
{ | { | ||||
int res = 0; | int res = 0; | ||||
jack_log("JackMidiDriver::ProcessReadAsync"); | |||||
// Read input buffers for the current cycle | // Read input buffers for the current cycle | ||||
if (Read() < 0) { | if (Read() < 0) { | ||||
@@ -195,6 +201,7 @@ int JackMidiDriver::ProcessReadAsync() | |||||
int JackMidiDriver::ProcessWriteAsync() | int JackMidiDriver::ProcessWriteAsync() | ||||
{ | { | ||||
jack_log("JackMidiDriver::ProcessWriteAsync"); | |||||
return 0; | return 0; | ||||
} | } | ||||