[vlc-devel] [PATCH 3/7] mmdevice: split DeviceHotplugReport()
Thomas Guillem
thomas at gllm.fr
Tue Feb 27 11:41:07 CET 2018
Add DeviceGetFriendlyName() that can be used to fetch the friendly name.
---
modules/audio_output/mmdevice.c | 45 +++++++++++++++++++++++++++--------------
1 file changed, 30 insertions(+), 15 deletions(-)
diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c
index 525f16ff6a..cc5bbf0eec 100644
--- a/modules/audio_output/mmdevice.c
+++ b/modules/audio_output/mmdevice.c
@@ -470,42 +470,57 @@ static const struct IAudioVolumeDuckNotificationVtbl vlc_AudioVolumeDuckNotifica
/*** Audio devices ***/
/** Gets the user-readable device name */
-static int DeviceHotplugReport(audio_output_t *aout, LPCWSTR wid,
- IMMDevice *dev)
+static int DeviceGetFriendlyName(LPCWSTR wid, IMMDevice *dev, char **id, char **name)
{
IPropertyStore *props;
- char *name;
PROPVARIANT v;
HRESULT hr;
- char *id = FromWide(wid);
+ *id = FromWide(wid);
if (unlikely(id == NULL))
- return VLC_ENOMEM;
+ return VLC_EGENERIC;
hr = IMMDevice_OpenPropertyStore(dev, STGM_READ, &props);
if (FAILED(hr))
- {
- free(id);
- return VLC_EGENERIC;
- }
+ goto fallback;
PropVariantInit(&v);
hr = IPropertyStore_GetValue(props, &PKEY_Device_FriendlyName, &v);
if (SUCCEEDED(hr))
{
- name = FromWide(v.pwszVal);
+ *name = FromWide(v.pwszVal);
PropVariantClear(&v);
}
else
- name = id;
+ {
+ IPropertyStore_Release(props);
+ goto fallback;
+ }
IPropertyStore_Release(props);
- aout_HotplugReport(aout, id, name);
- free(id);
- if (id != name)
- free(name);
return VLC_SUCCESS;
+fallback:
+
+ *name = strdup(*id);
+ if (!*name)
+ {
+ free(*id);
+ return VLC_EGENERIC;
+ }
+ return VLC_SUCCESS;
+}
+
+static int DeviceHotplugReport(audio_output_t *aout, LPCWSTR wid,
+ IMMDevice *dev)
+{
+ char *id, *name;
+ int ret = DeviceGetFriendlyName(wid, dev, &id, &name);
+ if (ret == VLC_SUCCESS)
+ aout_HotplugReport(aout, id, name);
+ free(id);
+ free(name);
+ return ret;
}
/** Checks that a device is an output device */
--
2.11.0
More information about the vlc-devel
mailing list