static cubeb_device_info * winmm_create_device_from_incaps(LPWAVEINCAPSA caps, UINT devid) { cubeb_device_info * ret; ret = calloc(1, sizeof(cubeb_device_info)); if (!ret) { return NULL; } ret->devid = (cubeb_devid)(size_t)devid; ret->device_id = device_id_idx(devid); ret->friendly_name = _strdup(caps->szPname); ret->group_id = NULL; ret->vendor_name = NULL; ret->type = CUBEB_DEVICE_TYPE_INPUT; ret->state = CUBEB_DEVICE_STATE_ENABLED; ret->preferred = winmm_query_preferred_in_device(devid); ret->max_channels = caps->wChannels; winmm_calculate_device_rate(ret, caps->dwFormats); winmm_query_supported_formats(devid, caps->dwFormats, &ret->format, &ret->default_format); /* Hardcoed latency estimates... */ ret->latency_lo = 100 * ret->default_rate / 1000; ret->latency_hi = 200 * ret->default_rate / 1000; return ret; }
static cubeb_device_info * winmm_create_device_from_outcaps2(LPWAVEOUTCAPS2A caps, UINT devid) { cubeb_device_info * ret; ret = calloc(1, sizeof(cubeb_device_info)); ret->devid = (cubeb_devid)(size_t)devid; ret->device_id = device_id_idx(devid); ret->friendly_name = _strdup(caps->szPname); ret->group_id = guid_to_cstr(&caps->ProductGuid); ret->vendor_name = guid_to_cstr(&caps->ManufacturerGuid); ret->type = CUBEB_DEVICE_TYPE_OUTPUT; ret->state = CUBEB_DEVICE_STATE_ENABLED; ret->preferred = winmm_query_preferred_out_device(devid); ret->max_channels = caps->wChannels; winmm_calculate_device_rate(ret, caps->dwFormats); winmm_query_supported_formats(devid, caps->dwFormats, &ret->format, &ret->default_format); /* Hardcoed latency estimates... */ ret->latency_lo_ms = 100; ret->latency_hi_ms = 200; return ret; }