[vlc-devel] [PATCH 3/7] mmdevice: split DeviceHotplugReport()
Rémi Denis-Courmont
remi at remlab.net
Tue Feb 27 13:55:23 CET 2018
Le 27 février 2018 12:41:07 GMT+02:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>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
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
Splitting the Friendly name lookup is probably OK, but why mix ID conversion in it??
--
Remi Denis-Courmont
More information about the vlc-devel
mailing list