summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/out/ao_wasapi.c29
1 files changed, 6 insertions, 23 deletions
diff --git a/audio/out/ao_wasapi.c b/audio/out/ao_wasapi.c
index 55fc3006ba..6e26fb5061 100644
--- a/audio/out/ao_wasapi.c
+++ b/audio/out/ao_wasapi.c
@@ -806,39 +806,22 @@ exit_label:
static int validate_device(const m_option_t *opt, struct bstr name,
struct bstr param) {
- IMMDevice *pDevice = NULL;
-
- mp_msg(MSGT_AO, MSGL_V, "ao-wasapi: validating device=%s\n", param.start);
-
if (bstr_equals0(param, "help")) {
enumerate_devices();
return M_OPT_EXIT;
}
- CoInitialize(NULL);
+ mp_msg(MSGT_AO, MSGL_DBG2, "ao-wasapi: validating device=%s\n", param.start);
- int devno = -1;
- char *devid = NULL;
+ char *end;
+ int devno = (int) strtol(param.start, &end, 10);
- if (bstr_startswith0(param, "{")) { // ID as printed by enumerate_devices
- devid = param.start;
- } else {
- unsigned char *end;
- devno = (int) strtol(param.start, (char**)&end, 10);
- if (end == param.start || *end || devno < 0) {
- mp_msg(MSGT_AO, MSGL_ERR, "ao-wasapi: invalid number \"%s\"!\n", param.start);
- return M_OPT_INVALID;
- }
- }
int ret = 1;
- if (FAILED(find_and_load_device(&pDevice, devno, devid))) {
+ if ((end == (void*)param.start || *end) && devno < 0)
ret = M_OPT_OUT_OF_RANGE;
- }
- mp_msg(MSGT_AO, MSGL_V, "ao-wasapi: device=%s %svalid\n",
- param.start, ret == 1 ? "" : "not ");
- SAFE_RELEASE(pDevice, IMMDevice_Release(pDevice));
- CoUninitialize();
+ mp_msg(MSGT_AO, MSGL_DBG2, "ao-wasapi: device=%s %svalid\n",
+ param.start, ret == 1 ? "" : "not ");
return ret;
}