[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