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 ---
JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=102
JACK_MICRO_VERSION=28
JACK_MICRO_VERSION=29

dnl ---
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_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;
}
}


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

@@ -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;



Loading…
Cancel
Save