| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/audio/win/core_audio_util_win.h" | 5 #include "media/audio/win/core_audio_util_win.h" |
| 6 | 6 |
| 7 #include <devicetopology.h> | 7 #include <devicetopology.h> |
| 8 #include <dxdiag.h> | 8 #include <dxdiag.h> |
| 9 #include <functiondiscoverykeys_devpkey.h> | 9 #include <functiondiscoverykeys_devpkey.h> |
| 10 #include <objbase.h> | 10 #include <objbase.h> |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 base::WideToUTF8(friendly_name_pv.get().pwszVal, | 170 base::WideToUTF8(friendly_name_pv.get().pwszVal, |
| 171 wcslen(friendly_name_pv.get().pwszVal), friendly_name); | 171 wcslen(friendly_name_pv.get().pwszVal), friendly_name); |
| 172 } | 172 } |
| 173 | 173 |
| 174 return hr; | 174 return hr; |
| 175 } | 175 } |
| 176 | 176 |
| 177 static ScopedComPtr<IMMDeviceEnumerator> CreateDeviceEnumeratorInternal( | 177 static ScopedComPtr<IMMDeviceEnumerator> CreateDeviceEnumeratorInternal( |
| 178 bool allow_reinitialize) { | 178 bool allow_reinitialize) { |
| 179 ScopedComPtr<IMMDeviceEnumerator> device_enumerator; | 179 ScopedComPtr<IMMDeviceEnumerator> device_enumerator; |
| 180 HRESULT hr = device_enumerator.CreateInstance(__uuidof(MMDeviceEnumerator), | 180 HRESULT hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, |
| 181 NULL, CLSCTX_INPROC_SERVER); | 181 CLSCTX_INPROC_SERVER, |
| 182 IID_PPV_ARGS(&device_enumerator)); |
| 182 if (hr == CO_E_NOTINITIALIZED && allow_reinitialize) { | 183 if (hr == CO_E_NOTINITIALIZED && allow_reinitialize) { |
| 183 LOG(ERROR) << "CoCreateInstance fails with CO_E_NOTINITIALIZED"; | 184 LOG(ERROR) << "CoCreateInstance fails with CO_E_NOTINITIALIZED"; |
| 184 // We have seen crashes which indicates that this method can in fact | 185 // We have seen crashes which indicates that this method can in fact |
| 185 // fail with CO_E_NOTINITIALIZED in combination with certain 3rd party | 186 // fail with CO_E_NOTINITIALIZED in combination with certain 3rd party |
| 186 // modules. Calling CoInitializeEx is an attempt to resolve the reported | 187 // modules. Calling CoInitializeEx is an attempt to resolve the reported |
| 187 // issues. See http://crbug.com/378465 for details. | 188 // issues. See http://crbug.com/378465 for details. |
| 188 hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); | 189 hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); |
| 189 if (SUCCEEDED(hr)) { | 190 if (SUCCEEDED(hr)) { |
| 190 hr = device_enumerator.CreateInstance(__uuidof(MMDeviceEnumerator), | 191 hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, |
| 191 NULL, CLSCTX_INPROC_SERVER); | 192 CLSCTX_INPROC_SERVER, |
| 193 IID_PPV_ARGS(&device_enumerator)); |
| 192 } | 194 } |
| 193 } | 195 } |
| 194 return device_enumerator; | 196 return device_enumerator; |
| 195 } | 197 } |
| 196 | 198 |
| 197 static bool IsSupportedInternal() { | 199 static bool IsSupportedInternal() { |
| 198 // It is possible to force usage of WaveXxx APIs by using a command line flag. | 200 // It is possible to force usage of WaveXxx APIs by using a command line flag. |
| 199 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); | 201 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
| 200 if (cmd_line->HasSwitch(switches::kForceWaveAudio)) { | 202 if (cmd_line->HasSwitch(switches::kForceWaveAudio)) { |
| 201 DVLOG(1) << "Forcing usage of Windows WaveXxx APIs"; | 203 DVLOG(1) << "Forcing usage of Windows WaveXxx APIs"; |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 870 // explicitly write silence data to the rendering buffer. | 872 // explicitly write silence data to the rendering buffer. |
| 871 DVLOG(2) << "filling up " << num_frames_to_fill << " frames with silence"; | 873 DVLOG(2) << "filling up " << num_frames_to_fill << " frames with silence"; |
| 872 return SUCCEEDED(render_client->ReleaseBuffer(num_frames_to_fill, | 874 return SUCCEEDED(render_client->ReleaseBuffer(num_frames_to_fill, |
| 873 AUDCLNT_BUFFERFLAGS_SILENT)); | 875 AUDCLNT_BUFFERFLAGS_SILENT)); |
| 874 } | 876 } |
| 875 | 877 |
| 876 bool CoreAudioUtil::GetDxDiagDetails(std::string* driver_name, | 878 bool CoreAudioUtil::GetDxDiagDetails(std::string* driver_name, |
| 877 std::string* driver_version) { | 879 std::string* driver_version) { |
| 878 ScopedComPtr<IDxDiagProvider, &IID_IDxDiagProvider> provider; | 880 ScopedComPtr<IDxDiagProvider, &IID_IDxDiagProvider> provider; |
| 879 HRESULT hr = | 881 HRESULT hr = |
| 880 provider.CreateInstance(CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER); | 882 ::CoCreateInstance(CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, |
| 883 IID_IDxDiagProvider, &provider); |
| 881 if (FAILED(hr)) | 884 if (FAILED(hr)) |
| 882 return false; | 885 return false; |
| 883 | 886 |
| 884 DXDIAG_INIT_PARAMS params = {sizeof(params)}; | 887 DXDIAG_INIT_PARAMS params = {sizeof(params)}; |
| 885 params.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; | 888 params.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; |
| 886 params.bAllowWHQLChecks = FALSE; | 889 params.bAllowWHQLChecks = FALSE; |
| 887 params.pReserved = NULL; | 890 params.pReserved = NULL; |
| 888 hr = provider->Initialize(¶ms); | 891 hr = provider->Initialize(¶ms); |
| 889 if (FAILED(hr)) | 892 if (FAILED(hr)) |
| 890 return false; | 893 return false; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 919 | 922 |
| 920 if (variant.type() == VT_BSTR && variant.ptr()->bstrVal) { | 923 if (variant.type() == VT_BSTR && variant.ptr()->bstrVal) { |
| 921 base::WideToUTF8(variant.ptr()->bstrVal, wcslen(variant.ptr()->bstrVal), | 924 base::WideToUTF8(variant.ptr()->bstrVal, wcslen(variant.ptr()->bstrVal), |
| 922 driver_version); | 925 driver_version); |
| 923 } | 926 } |
| 924 | 927 |
| 925 return true; | 928 return true; |
| 926 } | 929 } |
| 927 | 930 |
| 928 } // namespace media | 931 } // namespace media |
| OLD | NEW |