Browse Source

From: Jesse Chappell

Signed-off-by: Pieter Palmers

Comment:
While testing the freebob backend I noticed that it wasn't setting the
port latencies on the interface's ports.  In addition it didn't
support the -I and -O parameters which let users specify systemic
extra latency.  The attached patch provides both.  For those who might
not know, Ardour uses these value in order to do latency compensation.




git-svn-id: svn+ssh://jackaudio.org/trunk/jack@1001 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.109.0
pieterpalmers 19 years ago
parent
commit
f19a4daf90
3 changed files with 43 additions and 12 deletions
  1. +1
    -1
      configure.ac
  2. +29
    -4
      drivers/freebob/freebob_driver.c
  3. +13
    -7
      drivers/freebob/freebob_driver.h

+ 1
- 1
configure.ac View File

@@ -17,7 +17,7 @@ dnl changes are made
dnl --- dnl ---
JACK_MAJOR_VERSION=0 JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=102 JACK_MINOR_VERSION=102
JACK_MICRO_VERSION=28
JACK_MICRO_VERSION=29


dnl --- dnl ---
dnl HOWTO: updating the jack protocol version dnl HOWTO: updating the jack protocol version


+ 29
- 4
drivers/freebob/freebob_driver.c View File

@@ -133,8 +133,7 @@ freebob_driver_attach (freebob_driver_t *driver)
jack_slist_append (driver->capture_ports, port); 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 = driver->playback_ports =
jack_slist_append (driver->playback_ports, port); 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.nb_buffers=params->buffer_size;
driver->device_options.node_id=params->node_id; driver->device_options.node_id=params->node_id;
driver->device_options.port=params->port; 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) { if(!params->capture_ports) {
driver->device_options.directions |= FREEBOB_IGNORE_CAPTURE; driver->device_options.directions |= FREEBOB_IGNORE_CAPTURE;
@@ -1000,7 +1001,7 @@ driver_get_descriptor ()
desc = calloc (1, sizeof (jack_driver_desc_t)); desc = calloc (1, sizeof (jack_driver_desc_t));


strcpy (desc->name, "freebob"); strcpy (desc->name, "freebob");
desc->nparams = 6;
desc->nparams = 8;
params = calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); params = calloc (desc->nparams, sizeof (jack_driver_param_desc_t));
desc->params = params; desc->params = params;
@@ -1053,6 +1054,22 @@ driver_get_descriptor ()
strcpy (params[i].short_desc, "Provide playback ports."); strcpy (params[i].short_desc, "Provide playback ports.");
strcpy (params[i].long_desc, params[i].short_desc); 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; return desc;
} }


@@ -1087,6 +1104,8 @@ driver_initialize (jack_client_t *client, JSList * params)
cmlparams.node_id=-1; cmlparams.node_id=-1;
cmlparams.playback_ports=1; cmlparams.playback_ports=1;
cmlparams.capture_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)) for (node = params; node; node = jack_slist_next (node))
{ {
@@ -1115,6 +1134,12 @@ driver_initialize (jack_client_t *client, JSList * params)
case 'o': case 'o':
cmlparams.playback_ports = param->value.ui; cmlparams.playback_ports = param->value.ui;
break; break;
case 'I':
cmlparams.capture_frame_latency = param->value.ui;
break;
case 'O':
cmlparams.playback_frame_latency = param->value.ui;
break;
} }
} }


+ 13
- 7
drivers/freebob/freebob_driver.h View File

@@ -145,16 +145,19 @@ struct _freebob_jack_settings {
int buffer_size_set; int buffer_size_set;
jack_nframes_t buffer_size; 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 playback_ports;
int capture_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 #ifdef FREEBOB_DRIVER_WITH_MIDI
@@ -226,7 +229,10 @@ struct _freebob_driver
JSList *monitor_ports; JSList *monitor_ports;
channel_t playback_nchannels; channel_t playback_nchannels;
channel_t capture_nchannels; channel_t capture_nchannels;

jack_nframes_t playback_frame_latency;
jack_nframes_t capture_frame_latency;

freebob_device_info_t device_info; freebob_device_info_t device_info;
freebob_options_t device_options; freebob_options_t device_options;




Loading…
Cancel
Save