[vlc-devel] [PATCH 1/7] mmdevice: add "Default" device
Thomas Guillem
thomas at gllm.fr
Tue Feb 27 11:41:05 CET 2018
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
More information about the vlc-devel
mailing list