summaryrefslogtreecommitdiff
path: root/common/JackNetManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/JackNetManager.cpp')
-rw-r--r--common/JackNetManager.cpp42
1 files changed, 34 insertions, 8 deletions
diff --git a/common/JackNetManager.cpp b/common/JackNetManager.cpp
index 23b8fd03..98768e02 100644
--- a/common/JackNetManager.cpp
+++ b/common/JackNetManager.cpp
@@ -135,12 +135,16 @@ namespace Jack
goto fail;
}
+ if (jack_set_latency_callback(fClient, LatencyCallback, this) < 0) {
+ goto fail;
+ }
+
/*
if (jack_set_port_connect_callback(fClient, SetConnectCallback, this) < 0) {
goto fail;
}
*/
-
+
if (AllocPorts() != 0) {
jack_error("Can't allocate JACK ports");
goto fail;
@@ -193,7 +197,7 @@ namespace Jack
if ((fAudioPlaybackPorts[i] = jack_port_register(fClient, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput | JackPortIsTerminal, 0)) == NULL)
return -1;
//port latency
- range.min = range.max = fParams.fNetworkLatency * port_latency + (fParams.fSlaveSyncMode) ? 0 : port_latency;
+ range.min = range.max = fParams.fNetworkLatency * port_latency + ((fParams.fSlaveSyncMode) ? 0 : port_latency);
jack_port_set_latency_range(fAudioPlaybackPorts[i], JackPlaybackLatency, &range);
}
@@ -212,7 +216,7 @@ namespace Jack
if ((fMidiPlaybackPorts[i] = jack_port_register(fClient, name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput | JackPortIsTerminal, 0)) == NULL)
return -1;
//port latency
- range.min = range.max = fParams.fNetworkLatency * port_latency + (fParams.fSlaveSyncMode) ? 0 : port_latency;
+ range.min = range.max = fParams.fNetworkLatency * port_latency + ((fParams.fSlaveSyncMode) ? 0 : port_latency);
jack_port_set_latency_range(fMidiPlaybackPorts[i], JackPlaybackLatency, &range);
}
return 0;
@@ -220,14 +224,14 @@ namespace Jack
void JackNetMaster::ConnectPorts()
{
- const char **ports;
+ const char** ports;
ports = jack_get_ports(fClient, NULL, NULL, JackPortIsPhysical | JackPortIsOutput);
if (ports != NULL) {
for (int i = 0; i < fParams.fSendAudioChannels && ports[i]; i++) {
jack_connect(fClient, ports[i], jack_port_name(fAudioCapturePorts[i]));
}
- free(ports);
+ jack_free(ports);
}
ports = jack_get_ports(fClient, NULL, NULL, JackPortIsPhysical | JackPortIsInput);
@@ -235,7 +239,7 @@ namespace Jack
for (int i = 0; i < fParams.fReturnAudioChannels && ports[i]; i++) {
jack_connect(fClient, jack_port_name(fAudioPlaybackPorts[i]), ports[i]);
}
- free(ports);
+ jack_free(ports);
}
}
@@ -383,6 +387,28 @@ namespace Jack
}
return 0;
}
+
+ void JackNetMaster::LatencyCallback(jack_latency_callback_mode_t mode, void* arg)
+ {
+ JackNetMaster* obj = static_cast<JackNetMaster*>(arg);
+ jack_nframes_t port_latency = jack_get_buffer_size(obj->fClient);
+ jack_latency_range_t range;
+ int i;
+
+ //audio
+ for (i = 0; i < obj->fParams.fReturnAudioChannels; i++) {
+ //port latency
+ range.min = range.max = obj->fParams.fNetworkLatency * port_latency + ((obj->fParams.fSlaveSyncMode) ? 0 : port_latency);
+ jack_port_set_latency_range(obj->fAudioPlaybackPorts[i], JackPlaybackLatency, &range);
+ }
+
+ //midi
+ for (i = 0; i < obj->fParams.fReturnMidiChannels; i++) {
+ //port latency
+ range.min = range.max = obj->fParams.fNetworkLatency * port_latency + ((obj->fParams.fSlaveSyncMode) ? 0 : port_latency);
+ jack_port_set_latency_range(obj->fMidiPlaybackPorts[i], JackPlaybackLatency, &range);
+ }
+ }
//process-----------------------------------------------------------------------------
int JackNetMaster::SetProcess(jack_nframes_t nframes, void* arg)
@@ -595,7 +621,7 @@ namespace Jack
int JackNetMasterManager::CountIO(int flags)
{
- const char **ports;
+ const char** ports;
int count = 0;
jack_port_t* port;
@@ -606,7 +632,7 @@ namespace Jack
&& (strcmp(jack_port_type(port), JACK_DEFAULT_AUDIO_TYPE) == 0)) {
count++;
}
- free(ports);
+ jack_free(ports);
}
return count;
}