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) | |||
| 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 () { | |||
| 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; | |||
| } | |||
| @@ -98,22 +98,13 @@ extern "C" | |||
| 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, "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; | |||
| } | |||
| @@ -403,112 +403,47 @@ extern "C" | |||
| 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 | |||
| 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 | |||
| 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; | |||
| } | |||
| @@ -599,103 +599,41 @@ namespace Jack | |||
| #endif | |||
| 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 | |||
| 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 | |||
| 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; | |||
| } | |||
| @@ -751,38 +751,20 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -778,174 +778,62 @@ extern "C" | |||
| #endif | |||
| 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 | |||
| 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 | |||
| 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; | |||
| } | |||
| @@ -206,37 +206,16 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -111,9 +111,32 @@ extern "C" | |||
| } | |||
| 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); | |||
| 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 | |||
| } | |||
| #endif | |||
| @@ -187,108 +187,40 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -725,179 +725,84 @@ dither_opt (char c, DitherAlgorithm* dither) | |||
| SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | |||
| { | |||
| 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; | |||
| } | |||
| @@ -630,19 +630,11 @@ extern "C" { | |||
| SERVER_EXPORT jack_driver_desc_t * | |||
| 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 * | |||
| @@ -751,122 +751,52 @@ extern "C" | |||
| SERVER_EXPORT const jack_driver_desc_t * | |||
| driver_get_descriptor () { | |||
| 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; | |||
| } | |||
| @@ -952,106 +952,37 @@ extern "C" | |||
| const jack_driver_desc_t * | |||
| driver_get_descriptor () { | |||
| 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; | |||
| } | |||
| @@ -1497,116 +1497,44 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -1833,148 +1833,54 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -637,30 +637,14 @@ extern "C" { | |||
| 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, "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; | |||
| } | |||
| @@ -817,119 +817,44 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -30,7 +30,6 @@ namespace Jack | |||
| 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_FS 48000 | |||
| #define OSS_DRIVER_DEF_BLKSIZE 1024 | |||
| @@ -633,119 +633,46 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -34,7 +34,6 @@ namespace Jack | |||
| 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_FS 48000 | |||
| #define OSS_DRIVER_DEF_BLKSIZE 1024 | |||
| @@ -734,119 +734,44 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -28,7 +28,6 @@ namespace Jack | |||
| 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_FS 48000 | |||
| #define OSS_DRIVER_DEF_BLKSIZE 1024 | |||
| @@ -214,96 +214,39 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -260,119 +260,44 @@ extern "C" | |||
| 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; | |||
| } | |||
| @@ -362,16 +362,8 @@ extern "C" | |||
| 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, "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) | |||