/** inform JACK that port has /frames/ frames of latency */ void Port::set_latency ( direction_e dir, nframes_t min, nframes_t max ) { #ifdef HAVE_JACK_PORT_GET_LATENCY_RANGE jack_latency_range_t range; // DMESSAGE( "Setting port latency!" ); range.max = max; range.min = min; jack_port_set_latency_range( _port, dir == Output ? JackPlaybackLatency : JackCaptureLatency, &range ); #else jack_port_set_latency( _port, max ); #endif }
static int coreaudio_driver_attach (coreaudio_driver_t *driver, jack_engine_t *engine) { jack_port_t *port; int port_flags; channel_t chn; char buf[JACK_PORT_NAME_SIZE]; driver->engine = engine; driver->engine->set_buffer_size (engine, driver->frames_per_cycle); driver->engine->set_sample_rate (engine, driver->frame_rate); port_flags = JackPortIsOutput|JackPortIsPhysical|JackPortIsTerminal; /* if (driver->has_hw_monitoring) { port_flags |= JackPortCanMonitor; } */ for (chn = 0; chn < driver->capture_nchannels; chn++) { //snprintf (buf, sizeof(buf) - 1, "capture_%lu", chn+1); snprintf (buf, sizeof(buf) - 1, "%s:out%lu", driver->driver_name, chn+1); if ((port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error ("coreaudio: cannot register port for %s", buf); break; } /* XXX fix this so that it can handle: systemic (external) latency */ jack_port_set_latency (port, driver->frames_per_cycle); driver->capture_ports = jack_slist_append (driver->capture_ports, port); } port_flags = JackPortIsInput|JackPortIsPhysical|JackPortIsTerminal; for (chn = 0; chn < driver->playback_nchannels; chn++) { //snprintf (buf, sizeof(buf) - 1, "playback_%lu", chn+1); snprintf (buf, sizeof(buf) - 1, "%s:in%lu", driver->driver_name, chn+1); if ((port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error ("coreaudio: cannot register port for %s", buf); break; } /* XXX fix this so that it can handle: systemic (external) latency */ jack_port_set_latency (port, driver->frames_per_cycle); driver->playback_ports = jack_slist_append (driver->playback_ports, port); } jack_activate (driver->client); return 0; }