| Index: media/audio/win/core_audio_util_win.cc
|
| diff --git a/media/audio/win/core_audio_util_win.cc b/media/audio/win/core_audio_util_win.cc
|
| index 51623955be189afc67c19644185c692b80edd06d..71e8d717f62f4ea2fb164167487a5efd35676644 100644
|
| --- a/media/audio/win/core_audio_util_win.cc
|
| +++ b/media/audio/win/core_audio_util_win.cc
|
| @@ -230,6 +230,18 @@ ScopedComPtr<IMMDeviceEnumerator> CoreAudioUtil::CreateDeviceEnumerator() {
|
| ScopedComPtr<IMMDeviceEnumerator> device_enumerator;
|
| HRESULT hr = device_enumerator.CreateInstance(__uuidof(MMDeviceEnumerator),
|
| NULL, CLSCTX_INPROC_SERVER);
|
| + if (hr == CO_E_NOTINITIALIZED) {
|
| + LOG(ERROR) << "CoCreateInstance fails with CO_E_NOTINITIALIZED";
|
| + // We have seen crashes which indicates that this method can in fact
|
| + // fail with CO_E_NOTINITIALIZED in combination with certain 3rd party
|
| + // modules. Calling CoInitializeEx is an attempt to resolve the reported
|
| + // issues. See http://crbug.com/378465 for details.
|
| + hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
| + if (SUCCEEDED(hr)) {
|
| + hr = device_enumerator.CreateInstance(__uuidof(MMDeviceEnumerator),
|
| + NULL, CLSCTX_INPROC_SERVER);
|
| + }
|
| + }
|
| CHECK(SUCCEEDED(hr));
|
| return device_enumerator;
|
| }
|
|
|