- /* Get audio device according to policy */
- var_Create (aout, "audio-device", VLC_VAR_STRING|VLC_VAR_HASCHOICE);
-
- IMMDeviceEnumerator *devs;
- hr = CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL,
- &IID_IMMDeviceEnumerator, (void **)&devs);
- if (FAILED(hr))
- {
- msg_Dbg(aout, "cannot create device enumerator (error 0x%lx)", hr);
- goto error;
- }
-
- // Without configuration item, the variable must be created explicitly.
- var_Create (aout, "wasapi-audio-device", VLC_VAR_STRING);
- LPWSTR devid = var_InheritWide (aout, "wasapi-audio-device");
- var_Destroy (aout, "wasapi-audio-device");
-
- IMMDevice *dev = NULL;
- if (devid != NULL)
- {
- msg_Dbg (aout, "using selected device %ls", devid);
- hr = IMMDeviceEnumerator_GetDevice (devs, devid, &dev);
- if (FAILED(hr))
- msg_Warn(aout, "cannot get audio endpoint (error 0x%lx)", hr);
- free (devid);
- }
- if (dev == NULL)
- {
- msg_Dbg (aout, "using default device");
- hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(devs, eRender,
- eConsole, &dev);
- }
-
- GetDevices(VLC_OBJECT(aout), devs);
- IMMDeviceEnumerator_Release(devs);
- if (FAILED(hr))
- {
- msg_Err(aout, "cannot get audio endpoint (error 0x%lx)", hr);
- goto error;
- }
-
- hr = IMMDevice_GetId(dev, &devid);
- if (SUCCEEDED(hr))
- {
- msg_Dbg(aout, "using device %ls", devid);
- var_SetWide (aout, "audio-device", devid);
- CoTaskMemFree(devid);
- }
-
- hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_ALL, NULL,
- (void **)&sys->client);
- IMMDevice_Release(dev);