[vlc-devel] [PATCH 1/7] mmdevice: add "Default" device

Hugo Beauzée-Luyssen hugo at beauzee.fr
Tue Feb 27 13:57:45 CET 2018


On Tue, Feb 27, 2018, at 1:51 PM, Rémi Denis-Courmont wrote:
> Le 27 février 2018 12:41:05 GMT+02:00, Thomas Guillem <thomas at gllm.fr> a écrit :
> >Like for DirectSound, add the "Default" virtual device that is selected
> >by
> >default and that follows Windows devices change via external programs
> >(or via
> >the taskbar).
> >
> >Refs #19638
> >---
> > modules/audio_output/mmdevice.c | 27 +++++++++++++++++++--------
> > 1 file changed, 19 insertions(+), 8 deletions(-)
> >
> >diff --git a/modules/audio_output/mmdevice.c
> >b/modules/audio_output/mmdevice.c
> >index 731474848b..48d05ad2d6 100644
> >--- a/modules/audio_output/mmdevice.c
> >+++ b/modules/audio_output/mmdevice.c
> >@@ -71,6 +71,7 @@ static void LeaveMTA(void)
> > }
> > 
> > static wchar_t default_device[1] = L"";
> >+static char default_device_b[1] = "";
> > 
> > struct aout_sys_t
> > {
> >@@ -111,6 +112,8 @@ struct aout_sys_t
> >  * and (trivially) the device and session notifications. */
> > 
> > static int DeviceSelect(audio_output_t *, const char *);
> >+static int DeviceSelectLocked(audio_output_t *t, const char *);
> >+
> > static int vlc_FromHR(audio_output_t *aout, HRESULT hr)
> > {
> >     /* Select the default device (and restart) on unplug */
> >@@ -733,7 +736,7 @@ static int DeviceSelectLocked(audio_output_t *aout,
> >const char *id)
> >     aout_sys_t *sys = aout->sys;
> >     assert(sys->requested_device == NULL);
> > 
> >-    if (id != NULL)
> >+    if (id != NULL && strcmp(id, default_device_b) != 0)
> >     {
> >         sys->requested_device = ToWide(id);
> >         if (unlikely(sys->requested_device == NULL))
> >@@ -835,15 +838,20 @@ static HRESULT MMSession(audio_output_t *aout,
> >IMMDeviceEnumerator *it)
> >     {   /* Report actual device */
> >         LPWSTR wdevid;
> > 
> >-        hr = IMMDevice_GetId(sys->dev, &wdevid);
> >-        if (SUCCEEDED(hr))
> >+        if (sys->acquired_device == default_device)
> >+            aout_DeviceReport(aout, default_device_b);
> >+        else
> >         {
> >-            char *id = FromWide(wdevid);
> >-            CoTaskMemFree(wdevid);
> >-            if (likely(id != NULL))
> >+            hr = IMMDevice_GetId(sys->dev, &wdevid);
> >+            if (SUCCEEDED(hr))
> >             {
> >-                aout_DeviceReport(aout, id);
> >-                free(id);
> >+                char *id = FromWide(wdevid);
> >+                CoTaskMemFree(wdevid);
> >+                if (likely(id != NULL))
> >+                {
> >+                    aout_DeviceReport(aout, id);
> >+                    free(id);
> >+                }
> >             }
> >         }
> >     }
> >@@ -1227,6 +1235,8 @@ static int Open(vlc_object_t *obj)
> >     InitializeConditionVariable(&sys->work);
> >     InitializeConditionVariable(&sys->ready);
> > 
> >+    aout_HotplugReport(aout, default_device_b, _("Default"));
> >+
> >     /* Initialize MMDevice API */
> >     if (TryEnterMTA(aout))
> >         goto error;
> >@@ -1264,6 +1274,7 @@ static int Open(vlc_object_t *obj)
> >     aout->volume_set = VolumeSet;
> >     aout->mute_set = MuteSet;
> >     aout->device_select = DeviceSelect;
> >+
> >     return VLC_SUCCESS;
> > 
> > error:
> >-- 
> >2.11.0
> >
> >_______________________________________________
> >vlc-devel mailing list
> >To unsubscribe or modify your subscription options:
> >https://mailman.videolan.org/listinfo/vlc-devel
> 
> I wouldn't call that "following" external changes. Following external 
> changes ought to involve automatically moving *and* automatically 
> reporting the device change.
> 
> Also, IIRC*, Windows mixer does not show "default" as a target to move a 
> stream to.
> 

It does not, as the device selection list basically represents the default device (to be fair, I don't recall how things are presented on Windows before Win10)

> With that noted, I think it is much better to report the current device 
> in audio menu than to show "Default" there.
> 

I disagree. Having a "Default" virtual device allows you to say "whichever is selected by windows", but also allows you to explicitly pin VLC to a specific device.
Not having a default device means that when windows defaults change, we also change, which I find to be an unintuitive behavior.

> * I don't have access to a Windows Vista or later installation anymore. 
> 


-- 
  Hugo Beauzée-Luyssen
  hugo at beauzee.fr


More information about the vlc-devel mailing list