diff --git a/configure.ac b/configure.ac index b5cacfd..7e726df 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl changes are made dnl --- JACK_MAJOR_VERSION=0 JACK_MINOR_VERSION=102 -JACK_MICRO_VERSION=28 +JACK_MICRO_VERSION=29 dnl --- dnl HOWTO: updating the jack protocol version diff --git a/drivers/freebob/freebob_driver.c b/drivers/freebob/freebob_driver.c index fef1ab0..0d1af0d 100644 --- a/drivers/freebob/freebob_driver.c +++ b/drivers/freebob/freebob_driver.c @@ -133,8 +133,7 @@ freebob_driver_attach (freebob_driver_t *driver) jack_slist_append (driver->capture_ports, port); } - -// jack_port_set_latency (port, driver->period_size); + jack_port_set_latency (port, driver->period_size + driver->capture_frame_latency); } @@ -163,7 +162,7 @@ freebob_driver_attach (freebob_driver_t *driver) driver->playback_ports = jack_slist_append (driver->playback_ports, port); } -// jack_port_set_latency (port, (driver->period_size * (driver->user_nperiods - 1)) + driver->playback_frame_latency); + jack_port_set_latency (port, (driver->period_size * (driver->device_options.nb_buffers - 1)) + driver->playback_frame_latency); } @@ -633,6 +632,8 @@ freebob_driver_new (jack_client_t * client, driver->device_options.nb_buffers=params->buffer_size; driver->device_options.node_id=params->node_id; driver->device_options.port=params->port; + driver->capture_frame_latency = params->capture_frame_latency; + driver->playback_frame_latency = params->playback_frame_latency; if(!params->capture_ports) { driver->device_options.directions |= FREEBOB_IGNORE_CAPTURE; @@ -1000,7 +1001,7 @@ driver_get_descriptor () desc = calloc (1, sizeof (jack_driver_desc_t)); strcpy (desc->name, "freebob"); - desc->nparams = 6; + desc->nparams = 8; params = calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); desc->params = params; @@ -1053,6 +1054,22 @@ driver_get_descriptor () strcpy (params[i].short_desc, "Provide playback ports."); strcpy (params[i].long_desc, params[i].short_desc); + i++; + strcpy (params[i].name, "input-latency"); + params[i].character = 'I'; + params[i].type = JackDriverParamUInt; + params[i].value.ui = 0; + strcpy (params[i].short_desc, "Extra input latency (frames)"); + strcpy (params[i].long_desc, params[i].short_desc); + + i++; + strcpy (params[i].name, "output-latency"); + params[i].character = 'O'; + params[i].type = JackDriverParamUInt; + params[i].value.ui = 0; + strcpy (params[i].short_desc, "Extra output latency (frames)"); + strcpy (params[i].long_desc, params[i].short_desc); + return desc; } @@ -1087,6 +1104,8 @@ driver_initialize (jack_client_t *client, JSList * params) cmlparams.node_id=-1; cmlparams.playback_ports=1; cmlparams.capture_ports=1; + cmlparams.playback_frame_latency=0; + cmlparams.capture_frame_latency=0; for (node = params; node; node = jack_slist_next (node)) { @@ -1115,6 +1134,12 @@ driver_initialize (jack_client_t *client, JSList * params) case 'o': cmlparams.playback_ports = param->value.ui; break; + case 'I': + cmlparams.capture_frame_latency = param->value.ui; + break; + case 'O': + cmlparams.playback_frame_latency = param->value.ui; + break; } } diff --git a/drivers/freebob/freebob_driver.h b/drivers/freebob/freebob_driver.h index d801ec9..d048a56 100644 --- a/drivers/freebob/freebob_driver.h +++ b/drivers/freebob/freebob_driver.h @@ -145,16 +145,19 @@ struct _freebob_jack_settings { int buffer_size_set; jack_nframes_t buffer_size; - int port_set; - int port; - - int node_id_set; - int node_id; + int port_set; + int port; + + int node_id_set; + int node_id; int playback_ports; int capture_ports; + + jack_nframes_t capture_frame_latency; + jack_nframes_t playback_frame_latency; - freebob_handle_t fb_handle; + freebob_handle_t fb_handle; }; #ifdef FREEBOB_DRIVER_WITH_MIDI @@ -226,7 +229,10 @@ struct _freebob_driver JSList *monitor_ports; channel_t playback_nchannels; channel_t capture_nchannels; - + + jack_nframes_t playback_frame_latency; + jack_nframes_t capture_frame_latency; + freebob_device_info_t device_info; freebob_options_t device_options;