diff options
Diffstat (limited to 'common/JackNetManager.cpp')
-rw-r--r-- | common/JackNetManager.cpp | 42 |
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; } |