summaryrefslogtreecommitdiffstats
path: root/audio/out
diff options
context:
space:
mode:
authorKevin Mitchell <kevmitch@gmail.com>2016-01-22 21:35:51 -0800
committerKevin Mitchell <kevmitch@gmail.com>2016-01-28 00:55:58 -0800
commite927ff16661e7b5bd42cba2aa3f1bd3d4ac148ff (patch)
tree9579a5ef8c22e653209cf33d2a6e5069f1a53693 /audio/out
parentf1072be3b795b1ca360be62cb22581250cd2d6d3 (diff)
downloadmpv-e927ff16661e7b5bd42cba2aa3f1bd3d4ac148ff.tar.bz2
mpv-e927ff16661e7b5bd42cba2aa3f1bd3d4ac148ff.tar.xz
ao_wasapi: correct check for specified device on default change
Correctly avoid a reload if the current device was specified by the user through --audio-device. Previously, we only recognized if the user had specified --ao=wasapi:device=.
Diffstat (limited to 'audio/out')
-rw-r--r--audio/out/ao_wasapi.h1
-rw-r--r--audio/out/ao_wasapi_changenotify.c6
-rw-r--r--audio/out/ao_wasapi_utils.c9
3 files changed, 11 insertions, 5 deletions
diff --git a/audio/out/ao_wasapi.h b/audio/out/ao_wasapi.h
index 642d92f66f..eaa056a931 100644
--- a/audio/out/ao_wasapi.h
+++ b/audio/out/ao_wasapi.h
@@ -119,6 +119,7 @@ char *mp_PKEY_to_str_buf(char *buf, size_t buf_size, const PROPERTYKEY *pkey);
#define mp_PKEY_to_str(pkey) mp_PKEY_to_str_buf((char[42]){0}, 42, (pkey))
void wasapi_list_devs(struct ao *ao, struct ao_device_list *list);
+bstr wasapi_get_specified_device_string(struct ao *ao);
LPWSTR find_deviceID(struct ao *ao);
void wasapi_dispatch(struct ao *ao);
diff --git a/audio/out/ao_wasapi_changenotify.c b/audio/out/ao_wasapi_changenotify.c
index c25b806c8e..661e957bcc 100644
--- a/audio/out/ao_wasapi_changenotify.c
+++ b/audio/out/ao_wasapi_changenotify.c
@@ -122,7 +122,6 @@ static HRESULT STDMETHODCALLTYPE sIMMNotificationClient_OnDefaultDeviceChanged(
{
change_notify *change = (change_notify *)This;
struct ao *ao = change->ao;
- struct wasapi_state *state = ao->priv;
// don't care about "eCapture" or non-"eMultimedia" roles
if (flow == eCapture || role != eMultimedia) return S_OK;
@@ -133,9 +132,10 @@ static HRESULT STDMETHODCALLTYPE sIMMNotificationClient_OnDefaultDeviceChanged(
ao_hotplug_event(ao);
} else {
// stay on the device the user specified
- if (state->opt_device) {
+ bstr device = wasapi_get_specified_device_string(ao);
+ if (device.len) {
MP_VERBOSE(ao, "OnDefaultDeviceChanged triggered: "
- "staying on specified device %s\n", state->opt_device);
+ "staying on specified device %.*s\n", BSTR_P(device));
return S_OK;
}
diff --git a/audio/out/ao_wasapi_utils.c b/audio/out/ao_wasapi_utils.c
index 842b7fd9e2..9ca72318ad 100644
--- a/audio/out/ao_wasapi_utils.c
+++ b/audio/out/ao_wasapi_utils.c
@@ -858,14 +858,19 @@ static LPWSTR select_device(struct mp_log *l, struct device_desc *d)
(wcslen(d->deviceID) + 1) * sizeof(wchar_t));
}
-LPWSTR find_deviceID(struct ao *ao)
+bstr wasapi_get_specified_device_string(struct ao *ao)
{
- LPWSTR deviceID = NULL;
struct wasapi_state *state = ao->priv;
bstr device = bstr_strip(bstr0(state->opt_device));
if (!device.len)
device = bstr_strip(bstr0(ao->device));
+ return device;
+}
+LPWSTR find_deviceID(struct ao *ao)
+{
+ LPWSTR deviceID = NULL;
+ bstr device = wasapi_get_specified_device_string(ao);
MP_DBG(ao, "Find device \'%.*s\'\n", BSTR_P(device));
struct device_desc *d = NULL;