The main goal is to reduce risk of mismatch between allocated and initialized parameter numbers.tags/1.9.8
@@ -834,3 +834,104 @@ JackDriverInfo::~JackDriverInfo() | |||||
if (fHandle) | if (fHandle) | ||||
UnloadDriverModule(fHandle); | UnloadDriverModule(fHandle); | ||||
} | } | ||||
EXPORT | |||||
jack_driver_desc_t * | |||||
jack_driver_descriptor_construct( | |||||
const char * name, | |||||
const char * description, | |||||
jack_driver_desc_filler_t * filler_ptr) | |||||
{ | |||||
size_t name_len; | |||||
size_t description_len; | |||||
jack_driver_desc_t * desc_ptr; | |||||
name_len = strlen(name); | |||||
description_len = strlen(description); | |||||
if (name_len > sizeof(desc_ptr->name) - 1 || | |||||
description_len > sizeof(desc_ptr->desc) - 1) { | |||||
assert(false); | |||||
return 0; | |||||
} | |||||
desc_ptr = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
if (desc_ptr == NULL) { | |||||
jack_error("calloc() failed to allocate memory for driver descriptor struct"); | |||||
return 0; | |||||
} | |||||
memcpy(desc_ptr->name, name, name_len + 1); | |||||
memcpy(desc_ptr->desc, description, description_len + 1); | |||||
desc_ptr->nparams = 0; | |||||
if (filler_ptr != NULL) { | |||||
filler_ptr->size = 0; | |||||
} | |||||
return desc_ptr; | |||||
} | |||||
EXPORT | |||||
int | |||||
jack_driver_descriptor_add_parameter( | |||||
jack_driver_desc_t * desc_ptr, | |||||
jack_driver_desc_filler_t * filler_ptr, | |||||
const char * name, | |||||
char character, | |||||
jack_driver_param_type_t type, | |||||
const jack_driver_param_value_t * value_ptr, | |||||
jack_driver_param_constraint_desc_t * constraint, | |||||
const char * short_desc, | |||||
const char * long_desc) | |||||
{ | |||||
size_t name_len; | |||||
size_t short_desc_len; | |||||
size_t long_desc_len; | |||||
jack_driver_param_desc_t * param_ptr; | |||||
size_t newsize; | |||||
name_len = strlen(name); | |||||
short_desc_len = strlen(short_desc); | |||||
if (long_desc != NULL) { | |||||
long_desc_len = strlen(long_desc); | |||||
} else { | |||||
long_desc = short_desc; | |||||
long_desc_len = short_desc_len; | |||||
} | |||||
if (name_len > sizeof(param_ptr->name) - 1 || | |||||
short_desc_len > sizeof(param_ptr->short_desc) - 1 || | |||||
long_desc_len > sizeof(param_ptr->long_desc) - 1) { | |||||
assert(false); | |||||
return 0; | |||||
} | |||||
if (desc_ptr->nparams == filler_ptr->size) { | |||||
newsize = filler_ptr->size + 20; // most drivers have less than 20 parameters | |||||
param_ptr = (jack_driver_param_desc_t*)realloc (desc_ptr->params, newsize * sizeof (jack_driver_param_desc_t)); | |||||
if (param_ptr == NULL) { | |||||
jack_error("realloc() failed for parameter array of %zu elements", newsize); | |||||
return false; | |||||
} | |||||
filler_ptr->size = newsize; | |||||
desc_ptr->params = param_ptr; | |||||
} | |||||
assert(desc_ptr->nparams < filler_ptr->size); | |||||
param_ptr = desc_ptr->params + desc_ptr->nparams; | |||||
memcpy(param_ptr->name, name, name_len + 1); | |||||
param_ptr->character = character; | |||||
param_ptr->type = type; | |||||
param_ptr->value = *value_ptr; | |||||
param_ptr->constraint = constraint; | |||||
memcpy(param_ptr->short_desc, short_desc, short_desc_len + 1); | |||||
memcpy(param_ptr->long_desc, long_desc, long_desc_len + 1); | |||||
desc_ptr->nparams++; | |||||
return true; | |||||
} |
@@ -93,63 +93,26 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor () { | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor () { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy(desc->name, "dummy"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Timer based backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 6; | |||||
desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 2U; | |||||
strcpy(desc->params[i].short_desc, "Number of capture ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[1].value.ui = 2U; | |||||
strcpy(desc->params[i].short_desc, "Number of playback ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 48000U; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "monitor"); | |||||
desc->params[i].character = 'm'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = 0; | |||||
strcpy(desc->params[i].short_desc, "Provide monitor ports for the output"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 1024U; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "wait"); | |||||
desc->params[i].character = 'w'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 21333U; | |||||
strcpy(desc->params[i].short_desc, | |||||
"Number of usecs to wait between engine processes"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("dummy", "Timer based backend", &filler); | |||||
value.ui = 2U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamUInt, &value, NULL, "Number of capture ports", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamUInt, &value, NULL, "Number of playback ports", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "monitor", 'm', JackDriverParamBool, &value, NULL, "Provide monitor ports for the output", NULL); | |||||
value.ui = 1024U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = 21333U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "wait", 'w', JackDriverParamUInt, &value, NULL, "Number of usecs to wait between engine processes", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -98,22 +98,13 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy(desc->name, "loopback"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Loopback backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 1; | |||||
desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "channels"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of loopback ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("loopback", "Loopback backend", &filler); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "channels", 'c', JackDriverParamInt, &value, NULL, "Maximum number of loopback ports", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -403,112 +403,47 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t* desc = (jack_driver_desc_t*) calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "netadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "netjack net <==> audio backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->params = (jack_driver_param_desc_t*) calloc(12, sizeof(jack_driver_param_desc_t)); | |||||
int i = 0; | |||||
strcpy(desc->params[i].name, "multicast_ip"); | |||||
desc->params[i].character = 'a'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, DEFAULT_MULTICAST_IP); | |||||
strcpy(desc->params[i].short_desc, "Multicast Address"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "udp_net_port"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = DEFAULT_PORT; | |||||
strcpy(desc->params[i].short_desc, "UDP port"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "mtu"); | |||||
desc->params[i].character = 'M'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = DEFAULT_MTU; | |||||
strcpy(desc->params[i].short_desc, "MTU to the master"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input-ports"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 2; | |||||
strcpy(desc->params[i].short_desc, "Number of audio input ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output-ports"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 2; | |||||
strcpy(desc->params[i].short_desc, "Number of audio output ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("netadapter", "netjack net <==> audio backend adapter", &filler); | |||||
strcpy(value.str, DEFAULT_MULTICAST_IP); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "multicast_ip", 'a', JackDriverParamString, &value, NULL, "Multicast Address", NULL); | |||||
value.i = DEFAULT_PORT; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "udp_net_port", 'p', JackDriverParamInt, &value, NULL, "UDP port", NULL); | |||||
value.i = DEFAULT_MTU; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "mtu", 'M', JackDriverParamInt, &value, NULL, "MTU to the master", NULL); | |||||
value.i = 2; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-ports", 'C', JackDriverParamInt, &value, NULL, "Number of audio input ports", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-ports", 'C', JackDriverParamInt, &value, NULL, "Number of audio output ports", NULL); | |||||
#if HAVE_CELT | #if HAVE_CELT | ||||
i++; | |||||
strcpy(desc->params[i].name, "celt"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Set CELT encoding and number of kBits per channel"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
value.i = -1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "celt", 'c', JackDriverParamInt, &value, NULL, "Set CELT encoding and number of kBits per channel", NULL); | |||||
#endif | #endif | ||||
i++; | |||||
strcpy(desc->params[i].name, "client-name"); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "'hostname'"); | |||||
strcpy(desc->params[i].short_desc, "Name of the jack client"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "transport-sync"); | |||||
desc->params[i].character = 't'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 1U; | |||||
strcpy(desc->params[i].short_desc, "Sync transport with master's"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "mode"); | |||||
desc->params[i].character = 'm'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "slow"); | |||||
strcpy(desc->params[i].short_desc, "Slow, Normal or Fast mode."); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "quality"); | |||||
desc->params[i].character = 'q'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ring-buffer"); | |||||
desc->params[i].character = 'g'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 32768; | |||||
strcpy(desc->params[i].short_desc, "Fixed ringbuffer size"); | |||||
strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
i++; | |||||
strcpy (desc->params[i].name, "auto-connect"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy (desc->params[i].short_desc, "Auto connect netmaster to system ports"); | |||||
strcpy (desc->params[i].long_desc, desc->params[i].short_desc); | |||||
desc->nparams = i + 1; | |||||
strcpy(value.str, "'hostname'"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "client-name", 'n', JackDriverParamString, &value, NULL, "Name of the jack client", NULL); | |||||
value.ui = 1U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "transport-sync", 't', JackDriverParamUInt, &value, NULL, "Sync transport with master's", NULL); | |||||
strcpy(value.str, "slow"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "mode", 'm', JackDriverParamString, &value, NULL, "Slow, Normal or Fast mode.", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "quality", 'q', JackDriverParamInt, &value, NULL, "Resample algorithm quality (0 - 4)", NULL); | |||||
value.i = 32768; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ring-buffer", 'g', JackDriverParamInt, &value, NULL, "Fixed ringbuffer size", "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "auto-connect", 'c', JackDriverParamBool, &value, NULL, "Auto connect netmaster to system ports", ""); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -599,103 +599,41 @@ namespace Jack | |||||
#endif | #endif | ||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t* desc = (jack_driver_desc_t*) calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "net"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "netjack slave backend component"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->params = (jack_driver_param_desc_t*) calloc(11, sizeof(jack_driver_param_desc_t)); | |||||
int i = 0; | |||||
strcpy(desc->params[i].name, "multicast_ip"); | |||||
desc->params[i].character = 'a'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, DEFAULT_MULTICAST_IP); | |||||
strcpy(desc->params[i].short_desc, "Multicast Address"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "udp_net_port"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = DEFAULT_PORT; | |||||
strcpy(desc->params[i].short_desc, "UDP port"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "mtu"); | |||||
desc->params[i].character = 'M'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = DEFAULT_MTU; | |||||
strcpy(desc->params[i].short_desc, "MTU to the master"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input_ports"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Number of audio input ports"); | |||||
strcpy(desc->params[i].long_desc, "Number of audio input ports. If -1, audio physical input from the master"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output_ports"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Number of audio output ports"); | |||||
strcpy(desc->params[i].long_desc, "Number of audio output ports. If -1, audio physical output from the master"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "midi_in_ports"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 0; | |||||
strcpy(desc->params[i].short_desc, "Number of midi input ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "midi_out_ports"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 0; | |||||
strcpy(desc->params[i].short_desc, "Number of midi output ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("net", "netjack slave backend component", &filler); | |||||
strcpy(value.str, DEFAULT_MULTICAST_IP); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "multicast_ip", 'a', JackDriverParamString, &value, NULL, "Multicast Address", NULL); | |||||
value.i = DEFAULT_PORT; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "udp_net_port", 'p', JackDriverParamInt, &value, NULL, "UDP port", NULL); | |||||
value.i = DEFAULT_MTU; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "mtu", 'M', JackDriverParamInt, &value, NULL, "MTU to the master", NULL); | |||||
value.i = -1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input_ports", 'C', JackDriverParamInt, &value, NULL, "Number of audio input ports", "Number of audio input ports. If -1, audio physical input from the master"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output_ports", 'P', JackDriverParamInt, &value, NULL, "Number of audio output ports", "Number of audio output ports. If -1, audio physical output from the master"); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "midi_in_ports", 'i', JackDriverParamInt, &value, NULL, "Number of midi input ports", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "midi_out_ports", 'o', JackDriverParamInt, &value, NULL, "Number of midi output ports", NULL); | |||||
#if HAVE_CELT | #if HAVE_CELT | ||||
i++; | |||||
strcpy(desc->params[i].name, "celt"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Set CELT encoding and number of kBits per channel"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
value.i = -1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "celt", 'c', JackDriverParamInt, &value, NULL, "Set CELT encoding and number of kBits per channel", NULL); | |||||
#endif | #endif | ||||
i++; | |||||
strcpy(desc->params[i].name, "client_name"); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "'hostname'"); | |||||
strcpy(desc->params[i].short_desc, "Name of the jack client"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "transport_sync"); | |||||
desc->params[i].character = 't'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 1U; | |||||
strcpy(desc->params[i].short_desc, "Sync transport with master's"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "mode"); | |||||
desc->params[i].character = 'm'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "slow"); | |||||
strcpy(desc->params[i].short_desc, "Slow, Normal or Fast mode."); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
desc->nparams = i + 1; | |||||
strcpy(value.str, "'hostname'"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "client_name", 'n', JackDriverParamString, &value, NULL, "Name of the jack client", NULL); | |||||
value.ui = 1U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "transport_sync", 't', JackDriverParamUInt, &value, NULL, "Sync transport with master's", NULL); | |||||
strcpy(value.str, "slow"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "mode", 'm', JackDriverParamString, &value, NULL, "Slow, Normal or Fast mode.", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -751,38 +751,20 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
desc = ( jack_driver_desc_t* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); | |||||
strcpy ( desc->name, "netmanager" ); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy ( desc->desc, "netjack multi-cast master component" ); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 3; | |||||
desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) ); | |||||
int i = 0; | |||||
strcpy ( desc->params[i].name, "multicast_ip" ); | |||||
desc->params[i].character = 'a'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy ( desc->params[i].value.str, DEFAULT_MULTICAST_IP ); | |||||
strcpy ( desc->params[i].short_desc, "Multicast Address" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "udp_net_port" ); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = DEFAULT_PORT; | |||||
strcpy ( desc->params[i].short_desc, "UDP port" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "auto_connect" ); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy ( desc->params[i].short_desc, "Auto connect netmaster to system ports" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("netmanager", "netjack multi-cast master component", &filler); | |||||
strcpy(value.str, DEFAULT_MULTICAST_IP ); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "multicast_ip", 'a', JackDriverParamString, &value, NULL, "Multicast Address", NULL); | |||||
value.i = DEFAULT_PORT; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "udp_net_port", 'p', JackDriverParamInt, &value, NULL, "UDP port", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "auto_connect", 'c', JackDriverParamBool, &value, NULL, "Auto connect netmaster to system ports", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -778,174 +778,62 @@ extern "C" | |||||
#endif | #endif | ||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor () | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor () | ||||
{ | { | ||||
jack_driver_desc_t* desc = ( jack_driver_desc_t* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); | |||||
jack_driver_param_desc_t * params; | |||||
strcpy ( desc->name, "netone" ); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy ( desc->desc, "netjack one slave backend component" ); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
params = ( jack_driver_param_desc_t* ) calloc ( 18, sizeof ( jack_driver_param_desc_t ) ); | |||||
int i = 0; | |||||
strcpy (params[i].name, "audio-ins"); | |||||
params[i].character = 'i'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 2U; | |||||
strcpy (params[i].short_desc, "Number of capture channels (defaults to 2)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "audio-outs"); | |||||
params[i].character = 'o'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 2U; | |||||
strcpy (params[i].short_desc, "Number of playback channels (defaults to 2)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "midi-ins"); | |||||
params[i].character = 'I'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, "Number of midi capture channels (defaults to 1)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "midi-outs"); | |||||
params[i].character = 'O'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, "Number of midi playback channels (defaults to 1)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "rate"); | |||||
params[i].character = 'r'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 48000U; | |||||
strcpy (params[i].short_desc, "Sample rate"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "period"); | |||||
params[i].character = 'p'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1024U; | |||||
strcpy (params[i].short_desc, "Frames per period"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "num-periods"); | |||||
params[i].character = 'n'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 5U; | |||||
strcpy (params[i].short_desc, | |||||
"Network latency setting in no. of periods"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "listen-port"); | |||||
params[i].character = 'l'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 3000U; | |||||
strcpy (params[i].short_desc, | |||||
"The socket port we are listening on for sync packets"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "factor"); | |||||
params[i].character = 'f'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, | |||||
"Factor for sample rate reduction"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "upstream-factor"); | |||||
params[i].character = 'u'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0U; | |||||
strcpy (params[i].short_desc, | |||||
"Factor for sample rate reduction on the upstream"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("netone", "netjack one slave backend component", &filler); | |||||
value.ui = 2U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "audio-ins", 'i', JackDriverParamUInt, &value, NULL, "Number of capture channels (defaults to 2)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "audio-outs", 'o', JackDriverParamUInt, &value, NULL, "Number of playback channels (defaults to 2)", NULL); | |||||
value.ui = 1U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "midi-ins", 'I', JackDriverParamUInt, &value, NULL, "Number of midi capture channels (defaults to 1)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "midi-outs", 'O', JackDriverParamUInt, &value, NULL, "Number of midi playback channels (defaults to 1)", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 1024U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = 5U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "num-periods", 'n', JackDriverParamUInt, &value, NULL, "Network latency setting in no. of periods", NULL); | |||||
value.ui = 3000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "listen-port", 'l', JackDriverParamUInt, &value, NULL, "The socket port we are listening on for sync packets", NULL); | |||||
value.ui = 1U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "factor", 'f', JackDriverParamUInt, &value, NULL, "Factor for sample rate reduction", NULL); | |||||
value.ui = 0U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "upstream-factor", 'u', JackDriverParamUInt, &value, NULL, "Factor for sample rate reduction on the upstream", NULL); | |||||
#if HAVE_CELT | #if HAVE_CELT | ||||
i++; | |||||
strcpy (params[i].name, "celt"); | |||||
params[i].character = 'c'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0U; | |||||
strcpy (params[i].short_desc, | |||||
"sets celt encoding and number of kbits per channel"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
value.ui = 0U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "celt", 'c', JackDriverParamUInt, &value, NULL, "sets celt encoding and number of kbits per channel", NULL); | |||||
#endif | #endif | ||||
i++; | |||||
strcpy (params[i].name, "bit-depth"); | |||||
params[i].character = 'b'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0U; | |||||
strcpy (params[i].short_desc, | |||||
"Sample bit-depth (0 for float, 8 for 8bit and 16 for 16bit)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "transport-sync"); | |||||
params[i].character = 't'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, | |||||
"Whether to slave the transport to the master transport"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "autoconf"); | |||||
params[i].character = 'a'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, | |||||
"Whether to use Autoconfig, or just start."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "redundancy"); | |||||
params[i].character = 'R'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1U; | |||||
strcpy (params[i].short_desc, | |||||
"Send packets N times"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "native-endian"); | |||||
params[i].character = 'e'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.ui = 0U; | |||||
strcpy (params[i].short_desc, | |||||
"Dont convert samples to network byte order."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "jitterval"); | |||||
params[i].character = 'J'; | |||||
params[i].type = JackDriverParamInt; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, | |||||
"attempted jitterbuffer microseconds on master"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "always-deadline"); | |||||
params[i].character = 'D'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.ui = 0U; | |||||
strcpy (params[i].short_desc, | |||||
"always use deadline"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
desc->nparams = i + 1; | |||||
desc->params = params; | |||||
value.ui = 0U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "bit-depth", 'b', JackDriverParamUInt, &value, NULL, "Sample bit-depth (0 for float, 8 for 8bit and 16 for 16bit)", NULL); | |||||
value.i = true; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "transport-sync", 't', JackDriverParamBool, &value, NULL, "Whether to slave the transport to the master transport", NULL); | |||||
value.ui = true; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "autoconf", 'a', JackDriverParamBool, &value, NULL, "Whether to use Autoconfig, or just start.", NULL); | |||||
value.ui = 1U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "redundancy", 'R', JackDriverParamUInt, &value, NULL, "Send packets N times", NULL); | |||||
value.ui = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "native-endian", 'e', JackDriverParamBool, &value, NULL, "Dont convert samples to network byte order.", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "jitterval", 'J', JackDriverParamInt, &value, NULL, "attempted jitterbuffer microseconds on master", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "always-deadline", 'D', JackDriverParamBool, &value, NULL, "always use deadline", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -206,37 +206,16 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t* desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "profiler"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "real-time server profiling"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 3; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
int i = 0; | |||||
strcpy(desc->params[i].name, "cpu-load"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Show DSP CPU load"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "driver-period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Show driver period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "driver-end-time"); | |||||
desc->params[i].character = 'e'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Show driver end time"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("profiler", "real-time server profiling", &filler); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "cpu-load", 'c', JackDriverParamBool, &value, NULL, "Show DSP CPU load", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "driver-period", 'p', JackDriverParamBool, &value, NULL, "Show driver period", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "driver-end-time", 'e', JackDriverParamBool, &value, NULL, "Show driver end time", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -111,9 +111,32 @@ extern "C" | |||||
} | } | ||||
jack_driver_desc_t; | jack_driver_desc_t; | ||||
typedef struct { | |||||
uint32_t size; /* size of the param array, in elements */ | |||||
} | |||||
jack_driver_desc_filler_t; | |||||
SERVER_EXPORT int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr); | SERVER_EXPORT int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr); | ||||
jack_driver_desc_t * /* newlly allocated driver descriptor, NULL on failure */ | |||||
jack_driver_descriptor_construct( | |||||
const char * name, /* driver name */ | |||||
const char * description, /* driver description */ | |||||
jack_driver_desc_filler_t * filler); /* Pointer to stack var to be supplied to jack_driver_descriptor_add_parameter() as well. | |||||
Can be NULL for drivers that have no parameters. */ | |||||
int /* 0 on failure */ | |||||
jack_driver_descriptor_add_parameter( | |||||
jack_driver_desc_t * driver_descr, /* pointer to driver descriptor as returned by jack_driver_descriptor_construct() */ | |||||
jack_driver_desc_filler_t * filler, /* Pointer to the stack var that was supplied to jack_driver_descriptor_add_parameter(). */ | |||||
const char * name, /* parameter's name */ | |||||
char character, /* parameter's character (for getopt, etc) */ | |||||
jack_driver_param_type_t type, /* The parameter's type */ | |||||
const jack_driver_param_value_t * value_ptr, /* Pointer to parameter's (default) value */ | |||||
jack_driver_param_constraint_desc_t * constraint, /* Pointer to parameter constraint descriptor. NULL if there is no constraint */ | |||||
const char * short_desc, /* A short (~30 chars) description for the user */ | |||||
const char * long_desc); /* A longer description for the user, if NULL short_desc will be used */ | |||||
#ifdef __cplusplus | #ifdef __cplusplus | ||||
} | } | ||||
#endif | #endif | ||||
@@ -187,108 +187,40 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = ( jack_driver_desc_t* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); | |||||
strcpy ( desc->name, "audioadapter" ); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy ( desc->desc, "netjack audio <==> net backend adapter" ); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 11; | |||||
desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) ); | |||||
i = 0; | |||||
strcpy ( desc->params[i].name, "capture" ); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy ( desc->params[i].value.str, "none" ); | |||||
strcpy ( desc->params[i].short_desc, | |||||
"Provide capture ports. Optionally set device" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "playback" ); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy ( desc->params[i].value.str, "none" ); | |||||
strcpy ( desc->params[i].short_desc, | |||||
"Provide playback ports. Optionally set device" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "device" ); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy ( desc->params[i].value.str, "hw:0" ); | |||||
strcpy ( desc->params[i].short_desc, "ALSA device name" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "rate" ); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 48000U; | |||||
strcpy ( desc->params[i].short_desc, "Sample rate" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "periodsize" ); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 512U; | |||||
strcpy ( desc->params[i].short_desc, "Period size" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "nperiods" ); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 2U; | |||||
strcpy ( desc->params[i].short_desc, "Number of periods of playback latency" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "duplex" ); | |||||
desc->params[i].character = 'D'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = true; | |||||
strcpy ( desc->params[i].short_desc, | |||||
"Provide both capture and playback ports" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "inchannels" ); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 0; | |||||
strcpy ( desc->params[i].short_desc, | |||||
"Number of capture channels (defaults to hardware max)" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy ( desc->params[i].name, "outchannels" ); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = 0; | |||||
strcpy ( desc->params[i].short_desc, | |||||
"Number of playback channels (defaults to hardware max)" ); | |||||
strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); | |||||
i++; | |||||
strcpy(desc->params[i].name, "quality"); | |||||
desc->params[i].character = 'q'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ring-buffer"); | |||||
desc->params[i].character = 'g'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 32768; | |||||
strcpy(desc->params[i].short_desc, "Fixed ringbuffer size"); | |||||
strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("audioadapter", "netjack audio <==> net backend adapter", &filler); | |||||
strcpy(value.str, "none"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Provide capture ports. Optionally set device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Provide playback ports. Optionally set device", NULL); | |||||
strcpy(value.str, "hw:0"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "ALSA device name", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 512U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "periodsize", 'p', JackDriverParamUInt, &value, NULL, "Period size", NULL); | |||||
value.ui = 2U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods of playback latency", NULL); | |||||
value.i = true; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamInt, &value, NULL, "Number of capture channels (defaults to hardware max)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamInt, &value, NULL, "Number of playback channels (defaults to hardware max)", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "quality", 'q', JackDriverParamUInt, &value, NULL, "Resample algorithm quality (0 - 4)", NULL); | |||||
value.ui = 32768; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ring-buffer", 'g', JackDriverParamUInt, &value, NULL, "Fixed ringbuffer size", "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -725,179 +725,84 @@ dither_opt (char c, DitherAlgorithm* dither) | |||||
SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | ||||
{ | { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
jack_driver_param_desc_t * params; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy(desc->name, "alsa"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Linux ALSA API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 18; | |||||
params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy (params[i].name, "capture"); | |||||
params[i].character = 'C'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "none"); | |||||
strcpy (params[i].short_desc, | |||||
"Provide capture ports. Optionally set device"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "playback"); | |||||
params[i].character = 'P'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "none"); | |||||
strcpy (params[i].short_desc, | |||||
"Provide playback ports. Optionally set device"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "device"); | |||||
params[i].character = 'd'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "hw:0"); | |||||
strcpy (params[i].short_desc, "ALSA device name"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
params[i].constraint = enum_alsa_devices(); | |||||
i++; | |||||
strcpy (params[i].name, "rate"); | |||||
params[i].character = 'r'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 48000U; | |||||
strcpy (params[i].short_desc, "Sample rate"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "period"); | |||||
params[i].character = 'p'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1024U; | |||||
strcpy (params[i].short_desc, "Frames per period"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "nperiods"); | |||||
params[i].character = 'n'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 2U; | |||||
strcpy (params[i].short_desc, "Number of periods of playback latency"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "hwmon"); | |||||
params[i].character = 'H'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Hardware monitoring, if available"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "hwmeter"); | |||||
params[i].character = 'M'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Hardware metering, if available"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "duplex"); | |||||
params[i].character = 'D'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 1; | |||||
strcpy (params[i].short_desc, | |||||
"Provide both capture and playback ports"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "softmode"); | |||||
params[i].character = 's'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Soft-mode, no xrun handling"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "monitor"); | |||||
params[i].character = 'm'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Provide monitor ports for the output"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "dither"); | |||||
params[i].character = 'z'; | |||||
params[i].type = JackDriverParamChar; | |||||
params[i].value.c = 'n'; | |||||
strcpy (params[i].short_desc, "Dithering mode"); | |||||
strcpy (params[i].long_desc, | |||||
"Dithering mode:\n" | |||||
" n - none\n" | |||||
" r - rectangular\n" | |||||
" s - shaped\n" | |||||
" t - triangular"); | |||||
params[i].constraint = get_dither_constraint(); | |||||
i++; | |||||
strcpy (params[i].name, "inchannels"); | |||||
params[i].character = 'i'; | |||||
params[i].type = JackDriverParamInt; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, | |||||
"Number of capture channels (defaults to hardware max)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "outchannels"); | |||||
params[i].character = 'o'; | |||||
params[i].type = JackDriverParamInt; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, | |||||
"Number of playback channels (defaults to hardware max)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "shorts"); | |||||
params[i].character = 'S'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = FALSE; | |||||
strcpy (params[i].short_desc, "Try 16-bit samples before 32-bit"); | |||||
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); | |||||
i++; | |||||
strcpy (params[i].name, "midi-driver"); | |||||
params[i].character = 'X'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "none"); | |||||
strcpy (params[i].short_desc, "ALSA MIDI driver name (seq|raw)"); | |||||
strcpy (params[i].long_desc, | |||||
"ALSA MIDI driver:\n" | |||||
" none - no MIDI driver\n" | |||||
" seq - ALSA Sequencer driver\n" | |||||
" raw - ALSA RawMIDI driver\n"); | |||||
params[i].constraint = get_midi_driver_constraint(); | |||||
desc->params = params; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("alsa", "Linux ALSA API based audio backend", &filler); | |||||
strcpy(value.str, "none"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Provide capture ports. Optionally set device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Provide playback ports. Optionally set device", NULL); | |||||
strcpy(value.str, "hw:0"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, enum_alsa_devices(), "ALSA device name", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 1024U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = 2U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods of playback latency", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "hwmon", 'H', JackDriverParamBool, &value, NULL, "Hardware monitoring, if available", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "hwmeter", 'M', JackDriverParamBool, &value, NULL, "Hardware metering, if available", NULL); | |||||
value.i = 1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "softmode", 's', JackDriverParamBool, &value, NULL, "Soft-mode, no xrun handling", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "monitor", 'm', JackDriverParamBool, &value, NULL, "Provide monitor ports for the output", NULL); | |||||
value.c = 'n'; | |||||
jack_driver_descriptor_add_parameter( | |||||
desc, | |||||
&filler, | |||||
"dither", | |||||
'z', | |||||
JackDriverParamChar, | |||||
&value, | |||||
get_dither_constraint(), | |||||
"Dithering mode", | |||||
"Dithering mode:\n" | |||||
" n - none\n" | |||||
" r - rectangular\n" | |||||
" s - shaped\n" | |||||
" t - triangular"); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamInt, &value, NULL, "Number of capture channels (defaults to hardware max)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamInt, &value, NULL, "Number of playback channels (defaults to hardware max)", NULL); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "shorts", 'S', JackDriverParamBool, &value, NULL, "Try 16-bit samples before 32-bit", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency (frames)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency (frames)", NULL); | |||||
strcpy(value.str, "none"); | |||||
jack_driver_descriptor_add_parameter( | |||||
desc, | |||||
&filler, | |||||
"midi-driver", | |||||
'X', | |||||
JackDriverParamString, | |||||
&value, | |||||
get_midi_driver_constraint(), | |||||
"ALSA device name", | |||||
"ALSA MIDI driver:\n" | |||||
" none - no MIDI driver\n" | |||||
" seq - ALSA Sequencer driver\n" | |||||
" raw - ALSA RawMIDI driver\n"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -630,19 +630,11 @@ extern "C" { | |||||
SERVER_EXPORT jack_driver_desc_t * | SERVER_EXPORT jack_driver_desc_t * | ||||
driver_get_descriptor() | driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc = | |||||
(jack_driver_desc_t *) malloc(sizeof(jack_driver_desc_t)); | |||||
if (desc) { | |||||
strcpy(desc->desc, "Alternative ALSA raw MIDI backend."); | |||||
strcpy(desc->name, "alsarawmidi"); | |||||
// X: There could be parameters here regarding setting I/O buffer | |||||
// sizes. I don't think MIDI drivers can accept parameters right | |||||
// now without being set as the main driver. | |||||
desc->nparams = 0; | |||||
desc->params = 0; | |||||
} | |||||
return desc; | |||||
// X: There could be parameters here regarding setting I/O buffer | |||||
// sizes. I don't think MIDI drivers can accept parameters right | |||||
// now without being set as the main driver. | |||||
return jack_driver_descriptor_construct("alsarawmidi", "Alternative ALSA raw MIDI backend.", NULL); | |||||
} | } | ||||
SERVER_EXPORT Jack::JackDriverClientInterface * | SERVER_EXPORT Jack::JackDriverClientInterface * | ||||
@@ -751,122 +751,52 @@ extern "C" | |||||
SERVER_EXPORT const jack_driver_desc_t * | SERVER_EXPORT const jack_driver_desc_t * | ||||
driver_get_descriptor () { | driver_get_descriptor () { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
jack_driver_param_desc_t * params; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t *)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy (desc->name, "firewire"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Linux FFADO API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 13; | |||||
params = (jack_driver_param_desc_t *)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
desc->params = params; | |||||
i = 0; | |||||
strcpy (params[i].name, "device"); | |||||
params[i].character = 'd'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "hw:0"); | |||||
strcpy (params[i].short_desc, "The FireWire device to use."); | |||||
strcpy (params[i].long_desc, "The FireWire device to use. Please consult the FFADO documentation for more info."); | |||||
i++; | |||||
strcpy (params[i].name, "period"); | |||||
params[i].character = 'p'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1024; | |||||
strcpy (params[i].short_desc, "Frames per period"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "nperiods"); | |||||
params[i].character = 'n'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 3; | |||||
strcpy (params[i].short_desc, "Number of periods of playback latency"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "rate"); | |||||
params[i].character = 'r'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 48000U; | |||||
strcpy (params[i].short_desc, "Sample rate"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "capture"); | |||||
params[i].character = 'C'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Provide capture ports."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "playback"); | |||||
params[i].character = 'P'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Provide playback ports."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "duplex"); | |||||
params[i].character = 'D'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 1; | |||||
strcpy (params[i].short_desc, "Provide both capture and 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); | |||||
i++; | |||||
strcpy (params[i].name, "inchannels"); | |||||
params[i].character = 'i'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0; | |||||
strcpy (params[i].short_desc, "Number of input channels to provide (note: currently ignored)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "outchannels"); | |||||
params[i].character = 'o'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0; | |||||
strcpy (params[i].short_desc, "Number of output channels to provide (note: currently ignored)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "verbose"); | |||||
params[i].character = 'v'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 3; | |||||
strcpy (params[i].short_desc, "libffado verbose level"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "snoop"); | |||||
params[i].character = 'X'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Snoop firewire traffic"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("firewire", "Linux FFADO API based audio backend", &filler); | |||||
strcpy(value.str, "hw:0"); | |||||
jack_driver_descriptor_add_parameter( | |||||
desc, | |||||
&filler, | |||||
"device", | |||||
'd', | |||||
JackDriverParamString, | |||||
&value, | |||||
NULL, | |||||
"The FireWire device to use.", | |||||
"The FireWire device to use. Please consult the FFADO documentation for more info."); | |||||
value.ui = 1024; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = 3; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods of playback latency", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamBool, &value, NULL, "Provide capture ports.", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamBool, &value, NULL, "Provide playback ports.", NULL); | |||||
value.i = 1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports.", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency (frames)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency (frames)", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Number of input channels to provide (note: currently ignored)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Number of output channels to provide (note: currently ignored)", NULL); | |||||
value.ui = 3; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "verbose", 'v', JackDriverParamUInt, &value, NULL, "libffado verbose level", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "snoop", 'X', JackDriverParamBool, &value, NULL, "Snoop firewire traffic", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -952,106 +952,37 @@ extern "C" | |||||
const jack_driver_desc_t * | const jack_driver_desc_t * | ||||
driver_get_descriptor () { | driver_get_descriptor () { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
jack_driver_param_desc_t * params; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t *)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy (desc->name, "freebob"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Linux FreeBob API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 11; | |||||
params = (jack_driver_param_desc_t *)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
desc->params = params; | |||||
i = 0; | |||||
strcpy (params[i].name, "device"); | |||||
params[i].character = 'd'; | |||||
params[i].type = JackDriverParamString; | |||||
strcpy (params[i].value.str, "hw:0"); | |||||
strcpy (params[i].short_desc, "The FireWire device to use. Format is: 'hw:port[,node]'."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "period"); | |||||
params[i].character = 'p'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 1024; | |||||
strcpy (params[i].short_desc, "Frames per period"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "nperiods"); | |||||
params[i].character = 'n'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 3; | |||||
strcpy (params[i].short_desc, "Number of periods of playback latency"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "rate"); | |||||
params[i].character = 'r'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 48000U; | |||||
strcpy (params[i].short_desc, "Sample rate"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "capture"); | |||||
params[i].character = 'C'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Provide capture ports."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "playback"); | |||||
params[i].character = 'P'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 0; | |||||
strcpy (params[i].short_desc, "Provide playback ports."); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "duplex"); | |||||
params[i].character = 'D'; | |||||
params[i].type = JackDriverParamBool; | |||||
params[i].value.i = 1; | |||||
strcpy (params[i].short_desc, "Provide both capture and 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); | |||||
i++; | |||||
strcpy (params[i].name, "inchannels"); | |||||
params[i].character = 'i'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0; | |||||
strcpy (params[i].short_desc, "Number of input channels to provide (note: currently ignored)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
i++; | |||||
strcpy (params[i].name, "outchannels"); | |||||
params[i].character = 'o'; | |||||
params[i].type = JackDriverParamUInt; | |||||
params[i].value.ui = 0; | |||||
strcpy (params[i].short_desc, "Number of output channels to provide (note: currently ignored)"); | |||||
strcpy (params[i].long_desc, params[i].short_desc); | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("freebob", "Linux FreeBob API based audio backend", &filler); | |||||
strcpy(value.str, "hw:0"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "The FireWire device to use. Format is: 'hw:port[,node]'.", NULL); | |||||
value.ui = 1024; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = 3; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods of playback latency", NULL); | |||||
value.ui = 48000U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamBool, &value, NULL, "Provide capture ports.", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamBool, &value, NULL, "Provide playback ports.", NULL); | |||||
value.i = 1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports.", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency (frames)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency (frames)", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Number of input channels to provide (note: currently ignored)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Number of output channels to provide (note: currently ignored)", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -1497,116 +1497,44 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "audioadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "netjack audio <==> net backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 13; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "channels"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of channels. If -1, max possible number of channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of input channels. If -1, max possible number of input channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of output channels. If -1, max possible number of output channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "Input CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "Output CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 44100U; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 512U; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "duplex"); | |||||
desc->params[i].character = 'D'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = TRUE; | |||||
strcpy(desc->params[i].short_desc, "Provide both capture and playback ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "list-devices"); | |||||
desc->params[i].character = 'l'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = TRUE; | |||||
strcpy(desc->params[i].short_desc, "Display available CoreAudio devices"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "quality"); | |||||
desc->params[i].character = 'q'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ring-buffer"); | |||||
desc->params[i].character = 'g'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 32768; | |||||
strcpy(desc->params[i].short_desc, "Fixed ringbuffer size"); | |||||
strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "clock-drift"); | |||||
desc->params[i].character = 's'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Clock drift compensation"); | |||||
strcpy(desc->params[i].long_desc, "Whether to compensate clock drift in dynamically created aggregate device"); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("audioadapter", "netjack audio <==> net backend adapter", &filler); | |||||
value.i = -1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "channels", 'c', JackDriverParamInt, &value, NULL, "Maximum number of channels", "Maximum number of channels. If -1, max possible number of channels will be used"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamInt, &value, NULL, "Maximum number of input channels", "Maximum number of input channels. If -1, max possible number of input channels will be used"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamInt, &value, NULL, "Maximum number of output channels", "Maximum number of output channels. If -1, max possible number of output channels will be used"); | |||||
value.str[0] = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Input CoreAudio device name", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Output CoreAudio device name", NULL); | |||||
value.ui = 44100U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 512U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.i = TRUE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports", NULL); | |||||
value.str[0] = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "CoreAudio device name", NULL); | |||||
value.i = TRUE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "list-devices", 'l', JackDriverParamBool, &value, NULL, "Display available CoreAudio devices", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "quality", 'q', JackDriverParamInt, &value, NULL, "Resample algorithm quality (0 - 4)", NULL); | |||||
value.ui = 32768; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ring-buffer", 'g', JackDriverParamInt, &value, NULL, "Fixed ringbuffer size", "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "clock-drift", 's', JackDriverParamBool, &value, NULL, "Clock drift compensation", "Whether to compensate clock drift in dynamically created aggregate device"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -1833,148 +1833,54 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "coreaudio"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Apple CoreAudio API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 17; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "channels"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of channels. If -1, max possible number of channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of input channels. If -1, max possible number of input channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = -1; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||||
strcpy(desc->params[i].long_desc, "Maximum number of output channels. If -1, max possible number of output channels will be used"); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "Input CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "Output CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy (desc->params[i].name, "monitor"); | |||||
desc->params[i].character = 'm'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = 0; | |||||
strcpy(desc->params[i].short_desc, "Provide monitor ports for the output"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "duplex"); | |||||
desc->params[i].character = 'D'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = TRUE; | |||||
strcpy(desc->params[i].short_desc, "Provide both capture and playback ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 44100U; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 128U; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].short_desc, "CoreAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input-latency"); | |||||
desc->params[i].character = 'I'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra input latency (frames)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output-latency"); | |||||
desc->params[i].character = 'O'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra output latency (frames)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "list-devices"); | |||||
desc->params[i].character = 'l'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Display available CoreAudio devices"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "hog"); | |||||
desc->params[i].character = 'H'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Take exclusive access of the audio device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "async-latency"); | |||||
desc->params[i].character = 'L'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 100; | |||||
strcpy(desc->params[i].short_desc, "Extra output latency in asynchronous mode (percent)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "grain"); | |||||
desc->params[i].character = 'G'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 100; | |||||
strcpy(desc->params[i].short_desc, "Computation grain in RT thread (percent)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "clock-drift"); | |||||
desc->params[i].character = 's'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = FALSE; | |||||
strcpy(desc->params[i].short_desc, "Clock drift compensation"); | |||||
strcpy(desc->params[i].long_desc, "Whether to compensate clock drift in dynamically created aggregate device"); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("coreaudio", "Apple CoreAudio API based audio backend", &filler); | |||||
value.i = -1; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "channels", 'c', JackDriverParamInt, &value, NULL, "Maximum number of channels", "Maximum number of channels. If -1, max possible number of channels will be used"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamInt, &value, NULL, "Maximum number of input channels", "Maximum number of input channels. If -1, max possible number of input channels will be used"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamInt, &value, NULL, "Maximum number of output channels", "Maximum number of output channels. If -1, max possible number of output channels will be used"); | |||||
value.str[0] = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Input CoreAudio device name", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Output CoreAudio device name", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "monitor", 'm', JackDriverParamBool, &value, NULL, "Provide monitor ports for the output", NULL); | |||||
value.i = TRUE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports", NULL); | |||||
value.ui = 44100U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 128U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.str[0] = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "CoreAudio device name", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency (frames)", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency (frames)", NULL); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "list-devices", 'l', JackDriverParamBool, &value, NULL, "Display available CoreAudio devices", NULL); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "hog", 'H', JackDriverParamBool, &value, NULL, "Take exclusive access of the audio device", NULL); | |||||
value.ui = 100; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "async-latency", 'L', JackDriverParamUInt, &value, NULL, "Extra output latency in asynchronous mode (percent)", NULL); | |||||
value.ui = 100; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "grain", 'G', JackDriverParamUInt, &value, NULL, "Computation grain in RT thread (percent)", NULL); | |||||
value.i = FALSE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "clock-drift", 's', JackDriverParamBool, &value, NULL, "Clock drift compensation", "Whether to compensate clock drift in dynamically created aggregate device"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -637,30 +637,14 @@ extern "C" { | |||||
SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy(desc->name, "coremidi"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Apple CoreMIDI API based MIDI backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 2; | |||||
desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "CoreMIDI virtual bus"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "CoreMIDI virtual bus"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("coremidi", "Apple CoreMIDI API based MIDI backend", &filler); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "CoreMIDI virtual bus", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "CoreMIDI virtual bus", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -817,119 +817,44 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "boomer"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "Boomer/OSS API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = OSS_DRIVER_N_PARAMS; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_FS; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "nperiods"); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
strcpy(desc->params[i].short_desc, "Number of periods to prefill output buffer"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "wordlength"); | |||||
desc->params[i].character = 'w'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = OSS_DRIVER_DEF_BITS; | |||||
strcpy(desc->params[i].short_desc, "Word length"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_INS; | |||||
strcpy(desc->params[i].short_desc, "Capture channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS; | |||||
strcpy(desc->params[i].short_desc, "Playback channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "excl"); | |||||
desc->params[i].character = 'e'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy(desc->params[i].short_desc, "Exclusif (O_EXCL) access mode"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Input device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Output device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy (desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "OSS device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input-latency"); | |||||
desc->params[i].character = 'I'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra input latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output-latency"); | |||||
desc->params[i].character = 'O'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra output latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "sync-io"); | |||||
desc->params[i].character = 'S'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy(desc->params[i].short_desc, "In duplex mode, synchronize input and output"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("boomer", "Boomer/OSS API based audio backend", &filler); | |||||
value.ui = OSS_DRIVER_DEF_FS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods to prefill output buffer", NULL); | |||||
value.i = OSS_DRIVER_DEF_BITS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "wordlength", 'w', JackDriverParamInt, &value, NULL, "Word length", NULL); | |||||
value.ui = OSS_DRIVER_DEF_INS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Capture channels", NULL); | |||||
value.ui = OSS_DRIVER_DEF_OUTS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Playback channels", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "excl", 'e', JackDriverParamBool, &value, NULL, "Exclusif (O_EXCL) access mode", NULL); | |||||
strcpy(value.str, OSS_DRIVER_DEF_DEV); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Input device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Output device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "OSS device name", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "sync-io", 'S', JackDriverParamBool, &value, NULL, "In duplex mode, synchronize input and output", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -30,7 +30,6 @@ namespace Jack | |||||
typedef jack_default_audio_sample_t jack_sample_t; | typedef jack_default_audio_sample_t jack_sample_t; | ||||
#define OSS_DRIVER_N_PARAMS 13 | |||||
#define OSS_DRIVER_DEF_DEV "/dev/dsp" | #define OSS_DRIVER_DEF_DEV "/dev/dsp" | ||||
#define OSS_DRIVER_DEF_FS 48000 | #define OSS_DRIVER_DEF_FS 48000 | ||||
#define OSS_DRIVER_DEF_BLKSIZE 1024 | #define OSS_DRIVER_DEF_BLKSIZE 1024 | ||||
@@ -633,119 +633,46 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "audioadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "netjack audio <==> net backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = OSS_DRIVER_N_PARAMS; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_FS; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "nperiods"); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
strcpy(desc->params[i].short_desc, "Number of periods to prefill output buffer"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "wordlength"); | |||||
desc->params[i].character = 'w'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = OSS_DRIVER_DEF_BITS; | |||||
strcpy(desc->params[i].short_desc, "Word length"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_INS; | |||||
strcpy(desc->params[i].short_desc, "Capture channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS; | |||||
strcpy(desc->params[i].short_desc, "Playback channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "excl"); | |||||
desc->params[i].character = 'e'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy(desc->params[i].short_desc, "Exclusif (O_EXCL) access mode"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Input device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("audioadapter", "netjack audio <==> net backend adapter", &filler); | |||||
value.ui = OSS_DRIVER_DEF_FS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods to prefill output buffer", NULL); | |||||
value.i = OSS_DRIVER_DEF_BITS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "wordlength", 'w', JackDriverParamInt, &value, NULL, "Word length", NULL); | |||||
value.ui = OSS_DRIVER_DEF_INS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Capture channels", NULL); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Output device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy (desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "OSS device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
value.ui = OSS_DRIVER_DEF_OUTS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Playback channels", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "excl", 'e', JackDriverParamBool, &value, NULL, "Exclusif (O_EXCL) access mode", NULL); | |||||
strcpy(value.str, OSS_DRIVER_DEF_DEV); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Input device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Output device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "OSS device name", NULL); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ignorehwbuf"); | |||||
desc->params[i].character = 'b'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = true; | |||||
strcpy(desc->params[i].short_desc, "Ignore hardware period size"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
value.i = true; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ignorehwbuf", 'b', JackDriverParamBool, &value, NULL, "Ignore hardware period size", NULL); | |||||
i++; | |||||
strcpy(desc->params[i].name, "quality"); | |||||
desc->params[i].character = 'q'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "quality", 'q', JackDriverParamInt, &value, NULL, "Resample algorithm quality (0 - 4)", NULL); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ring-buffer"); | |||||
desc->params[i].character = 'g'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 32768; | |||||
strcpy(desc->params[i].short_desc, "Fixed ringbuffer size"); | |||||
strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
value.i = 32768; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ring-buffer", 'g', JackDriverParamInt, &value, NULL, "Fixed ringbuffer size", "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -34,7 +34,6 @@ namespace Jack | |||||
typedef jack_default_audio_sample_t jack_sample_t; | typedef jack_default_audio_sample_t jack_sample_t; | ||||
#define OSS_DRIVER_N_PARAMS 13 | |||||
#define OSS_DRIVER_DEF_DEV "/dev/dsp" | #define OSS_DRIVER_DEF_DEV "/dev/dsp" | ||||
#define OSS_DRIVER_DEF_FS 48000 | #define OSS_DRIVER_DEF_FS 48000 | ||||
#define OSS_DRIVER_DEF_BLKSIZE 1024 | #define OSS_DRIVER_DEF_BLKSIZE 1024 | ||||
@@ -734,119 +734,44 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "oss"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "OSS API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = OSS_DRIVER_N_PARAMS; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_FS; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "nperiods"); | |||||
desc->params[i].character = 'n'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
strcpy(desc->params[i].short_desc, "Number of periods to prefill output buffer"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "wordlength"); | |||||
desc->params[i].character = 'w'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.i = OSS_DRIVER_DEF_BITS; | |||||
strcpy(desc->params[i].short_desc, "Word length"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_INS; | |||||
strcpy(desc->params[i].short_desc, "Capture channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS; | |||||
strcpy(desc->params[i].short_desc, "Playback channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "excl"); | |||||
desc->params[i].character = 'e'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy(desc->params[i].short_desc, "Exclusif (O_EXCL) access mode"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Input device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "Output device"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy (desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); | |||||
strcpy(desc->params[i].short_desc, "OSS device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ignorehwbuf"); | |||||
desc->params[i].character = 'b'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = false; | |||||
strcpy(desc->params[i].short_desc, "Ignore hardware period size"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input-latency"); | |||||
desc->params[i].character = 'I'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra input latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output-latency"); | |||||
desc->params[i].character = 'O'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra output latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("oss", "OSS API based audio backend", &filler); | |||||
value.ui = OSS_DRIVER_DEF_FS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = OSS_DRIVER_DEF_BLKSIZE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
value.ui = OSS_DRIVER_DEF_NPERIODS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "nperiods", 'n', JackDriverParamUInt, &value, NULL, "Number of periods to prefill output buffer", NULL); | |||||
value.i = OSS_DRIVER_DEF_BITS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "wordlength", 'w', JackDriverParamInt, &value, NULL, "Word length", NULL); | |||||
value.ui = OSS_DRIVER_DEF_INS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Capture channels", NULL); | |||||
value.ui = OSS_DRIVER_DEF_OUTS; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Playback channels", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "excl", 'e', JackDriverParamBool, &value, NULL, "Exclusif (O_EXCL) access mode", NULL); | |||||
strcpy(value.str, OSS_DRIVER_DEF_DEV); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Input device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Output device", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "OSS device name", NULL); | |||||
value.i = false; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ignorehwbuf", 'b', JackDriverParamBool, &value, NULL, "Ignore hardware period size", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -28,7 +28,6 @@ namespace Jack | |||||
typedef jack_default_audio_sample_t jack_sample_t; | typedef jack_default_audio_sample_t jack_sample_t; | ||||
#define OSS_DRIVER_N_PARAMS 13 | |||||
#define OSS_DRIVER_DEF_DEV "/dev/dsp" | #define OSS_DRIVER_DEF_DEV "/dev/dsp" | ||||
#define OSS_DRIVER_DEF_FS 48000 | #define OSS_DRIVER_DEF_FS 48000 | ||||
#define OSS_DRIVER_DEF_BLKSIZE 1024 | #define OSS_DRIVER_DEF_BLKSIZE 1024 | ||||
@@ -214,96 +214,39 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "audioadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "netjack audio <==> net backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 10; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "default input device"); | |||||
strcpy(desc->params[i].short_desc, "Provide capture ports. Optionally set PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "default output device"); | |||||
strcpy(desc->params[i].short_desc, "Provide playback ports. Optionally set PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 44100U; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "periodsize"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 512U; | |||||
strcpy(desc->params[i].short_desc, "Period size"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
desc->params[i].value.ui = 128U; | |||||
strcpy(desc->params[i].value.str, "default device"); | |||||
strcpy(desc->params[i].short_desc, "PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "list-devices"); | |||||
desc->params[i].character = 'l'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = true; | |||||
strcpy(desc->params[i].short_desc, "Display available PortAudio devices"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "quality"); | |||||
desc->params[i].character = 'q'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "ring-buffer"); | |||||
desc->params[i].character = 'g'; | |||||
desc->params[i].type = JackDriverParamInt; | |||||
desc->params[i].value.ui = 32768; | |||||
strcpy(desc->params[i].short_desc, "Fixed ringbuffer size"); | |||||
strcpy(desc->params[i].long_desc, "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("audioadapter", "netjack audio <==> net backend adapter", &filler); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamInt, &value, NULL, "Maximum number of input channels", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamInt, &value, NULL, "Maximum number of output channels", NULL); | |||||
strcpy(value.str, "default input device"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Provide capture ports. Optionally set PortAudio device name", NULL); | |||||
strcpy(value.str, "default output device"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Provide playback ports. Optionally set PortAudio device name", NULL); | |||||
value.ui = 44100U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 512U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "periodsize", 'p', JackDriverParamUInt, &value, NULL, "Period size", NULL); | |||||
strcpy(value.str, "default device"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "PortAudio device name", NULL); | |||||
value.i = true; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "list-devices", 'l', JackDriverParamBool, &value, NULL, "Display available PortAudio devices", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "quality", 'q', JackDriverParamInt, &value, NULL, "Resample algorithm quality (0 - 4)", NULL); | |||||
value.ui = 32768; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "ring-buffer", 'g', JackDriverParamInt, &value, NULL, "Fixed ringbuffer size", "Fixed ringbuffer size (if not set => automatic adaptative)"); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -260,119 +260,44 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t *desc; | |||||
unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||||
strcpy(desc->name, "portaudio"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "PortAudio API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 13; | |||||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||||
i = 0; | |||||
strcpy(desc->params[i].name, "channels"); | |||||
desc->params[i].character = 'c'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "inchannels"); | |||||
desc->params[i].character = 'i'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "outchannels"); | |||||
desc->params[i].character = 'o'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "capture"); | |||||
desc->params[i].character = 'C'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "will take default PortAudio input device"); | |||||
strcpy(desc->params[i].short_desc, "Provide capture ports. Optionally set PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "playback"); | |||||
desc->params[i].character = 'P'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "will take default PortAudio output device"); | |||||
strcpy(desc->params[i].short_desc, "Provide playback ports. Optionally set PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy (desc->params[i].name, "monitor"); | |||||
desc->params[i].character = 'm'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = 0; | |||||
strcpy(desc->params[i].short_desc, "Provide monitor ports for the output"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "duplex"); | |||||
desc->params[i].character = 'D'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = TRUE; | |||||
strcpy(desc->params[i].short_desc, "Provide both capture and playback ports"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "rate"); | |||||
desc->params[i].character = 'r'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 44100U; | |||||
strcpy(desc->params[i].short_desc, "Sample rate"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "period"); | |||||
desc->params[i].character = 'p'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 128U; | |||||
strcpy(desc->params[i].short_desc, "Frames per period"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "device"); | |||||
desc->params[i].character = 'd'; | |||||
desc->params[i].type = JackDriverParamString; | |||||
strcpy(desc->params[i].value.str, "will take default PortAudio device name"); | |||||
strcpy(desc->params[i].short_desc, "PortAudio device name"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "input-latency"); | |||||
desc->params[i].character = 'I'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra input latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "output-latency"); | |||||
desc->params[i].character = 'O'; | |||||
desc->params[i].type = JackDriverParamUInt; | |||||
desc->params[i].value.ui = 0; | |||||
strcpy(desc->params[i].short_desc, "Extra output latency"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
i++; | |||||
strcpy(desc->params[i].name, "list-devices"); | |||||
desc->params[i].character = 'l'; | |||||
desc->params[i].type = JackDriverParamBool; | |||||
desc->params[i].value.i = TRUE; | |||||
strcpy(desc->params[i].short_desc, "Display available PortAudio devices"); | |||||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||||
jack_driver_desc_t * desc; | |||||
jack_driver_desc_filler_t filler; | |||||
jack_driver_param_value_t value; | |||||
desc = jack_driver_descriptor_construct("portaudio", "PortAudio API based audio backend", &filler); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "channels", 'c', JackDriverParamUInt, &value, NULL, "Maximum number of channels", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "inchannels", 'i', JackDriverParamUInt, &value, NULL, "Maximum number of input channels", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "outchannels", 'o', JackDriverParamUInt, &value, NULL, "Maximum number of output channels", NULL); | |||||
strcpy(value.str, "will take default PortAudio input device"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "capture", 'C', JackDriverParamString, &value, NULL, "Provide capture ports. Optionally set PortAudio device name", NULL); | |||||
strcpy(value.str, "will take default PortAudio output device"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "playback", 'P', JackDriverParamString, &value, NULL, "Provide playback ports. Optionally set PortAudio device name", NULL); | |||||
value.i = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "monitor", 'm', JackDriverParamBool, &value, NULL, "Provide monitor ports for the output", NULL); | |||||
value.i = TRUE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "duplex", 'D', JackDriverParamBool, &value, NULL, "Provide both capture and playback ports", NULL); | |||||
value.ui = 44100U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "rate", 'r', JackDriverParamUInt, &value, NULL, "Sample rate", NULL); | |||||
value.ui = 128U; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "period", 'p', JackDriverParamUInt, &value, NULL, "Frames per period", NULL); | |||||
strcpy(value.str, "will take default PortAudio device name"); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "device", 'd', JackDriverParamString, &value, NULL, "PortAudio device name", NULL); | |||||
value.ui = 0; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "input-latency", 'I', JackDriverParamUInt, &value, NULL, "Extra input latency", NULL); | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "output-latency", 'O', JackDriverParamUInt, &value, NULL, "Extra output latency", NULL); | |||||
value.i = TRUE; | |||||
jack_driver_descriptor_add_parameter(desc, &filler, "list-devices", 'l', JackDriverParamBool, &value, NULL, "Display available PortAudio devices", NULL); | |||||
return desc; | return desc; | ||||
} | } | ||||
@@ -362,16 +362,8 @@ extern "C" | |||||
SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() | ||||
{ | { | ||||
jack_driver_desc_t * desc; | jack_driver_desc_t * desc; | ||||
//unsigned int i; | |||||
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||||
strcpy(desc->name, "winmme"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||||
strcpy(desc->desc, "WinMME API based MIDI backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||||
desc->nparams = 0; | |||||
desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||||
return desc; | |||||
return jack_driver_descriptor_construct("winmme", "WinMME API based MIDI backend", NULL); | |||||
} | } | ||||
SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) | SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) | ||||