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

Rémi Denis-Courmont remi at remlab.net
Tue Feb 27 14:03:25 CET 2018


Le 27 février 2018 14:57:45 GMT+02:00, "Hugo Beauzée-Luyssen" <hugo at beauzee.fr> a écrit :
>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
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

Default is necessary in configuration, if only because a default value is needed. In run-time Audio menu, it's counter-intuitive, if the platform itself does not exhibit such an option.

Oh sure, it means the user cannot explicitly switch between the current default device and the abstract default choice. That seems like a rather small loss compared to not seeing what the current device actually is.
-- 
Remi Denis-Courmont


More information about the vlc-devel mailing list