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) | ||||