vlc | branch: master | Thomas Guillem <tho...@gllm.fr> | Fri Feb 9 13:29:29 2018 +0100| [a715eaa04c611de267022964c59566779539d6e6] | committer: Thomas Guillem
mmdevice: fix opening of invalid device CD 6f95511a-91a2-45de-bd43-735bf52a2185 And check sys->dev locked since it can be written from the MMSession thread. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a715eaa04c611de267022964c59566779539d6e6 --- modules/audio_output/mmdevice.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c index 40c03ee18f..2e3fdb30ab 100644 --- a/modules/audio_output/mmdevice.c +++ b/modules/audio_output/mmdevice.c @@ -1081,9 +1081,6 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) { aout_sys_t *sys = aout->sys; - if (sys->dev == NULL) - return -1; - const bool b_spdif = AOUT_FMT_SPDIF(fmt); const bool b_hdmi = AOUT_FMT_HDMI(fmt); if (b_spdif || b_hdmi) @@ -1111,6 +1108,14 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) EnterMTA(); EnterCriticalSection(&sys->lock); + + if (sys->dev == NULL) + { + LeaveCriticalSection(&sys->lock); + LeaveMTA(); + return -1; + } + for (;;) { char *modlist = var_InheritString(aout, "mmdevice-backend"); @@ -1146,25 +1151,28 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) break; } - IPropertyStore *props; - HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props); - if (SUCCEEDED(hr)) + if (sys->module != NULL) { - PROPVARIANT v; - PropVariantInit(&v); - hr = IPropertyStore_GetValue(props, &PKEY_AudioEndpoint_FormFactor, &v); + IPropertyStore *props; + HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props); if (SUCCEEDED(hr)) { - switch (v.uintVal) + PROPVARIANT v; + PropVariantInit(&v); + hr = IPropertyStore_GetValue(props, &PKEY_AudioEndpoint_FormFactor, &v); + if (SUCCEEDED(hr)) { - case Headphones: - case Headset: - aout->current_sink_info.headphones = true; - break; + switch (v.uintVal) + { + case Headphones: + case Headset: + aout->current_sink_info.headphones = true; + break; + } + PropVariantClear(&v); } - PropVariantClear(&v); + IPropertyStore_Release(props); } - IPropertyStore_Release(props); } LeaveCriticalSection(&sys->lock); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits