| 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 <MMDeviceAPI.h> | 5 #include <MMDeviceAPI.h> |
| 6 #include <mmsystem.h> | 6 #include <mmsystem.h> |
| 7 #include <objbase.h> |
| 7 #include <Functiondiscoverykeys_devpkey.h> // MMDeviceAPI.h must come first | 8 #include <Functiondiscoverykeys_devpkey.h> // MMDeviceAPI.h must come first |
| 8 #include <stddef.h> | 9 #include <stddef.h> |
| 9 | 10 |
| 10 #include "base/logging.h" | 11 #include "base/logging.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/win/scoped_co_mem.h" | 13 #include "base/win/scoped_co_mem.h" |
| 13 #include "base/win/scoped_comptr.h" | 14 #include "base/win/scoped_comptr.h" |
| 14 #include "base/win/scoped_propvariant.h" | 15 #include "base/win/scoped_propvariant.h" |
| 15 #include "media/audio/win/audio_manager_win.h" | 16 #include "media/audio/win/audio_manager_win.h" |
| 16 | 17 |
| 17 using base::win::ScopedComPtr; | 18 using base::win::ScopedComPtr; |
| 18 using base::win::ScopedCoMem; | 19 using base::win::ScopedCoMem; |
| 19 | 20 |
| 20 // Taken from Mmddk.h. | 21 // Taken from Mmddk.h. |
| 21 #define DRV_RESERVED 0x0800 | 22 #define DRV_RESERVED 0x0800 |
| 22 #define DRV_QUERYFUNCTIONINSTANCEID (DRV_RESERVED + 17) | 23 #define DRV_QUERYFUNCTIONINSTANCEID (DRV_RESERVED + 17) |
| 23 #define DRV_QUERYFUNCTIONINSTANCEIDSIZE (DRV_RESERVED + 18) | 24 #define DRV_QUERYFUNCTIONINSTANCEIDSIZE (DRV_RESERVED + 18) |
| 24 | 25 |
| 25 namespace media { | 26 namespace media { |
| 26 | 27 |
| 27 static bool GetDeviceNamesWinImpl(EDataFlow data_flow, | 28 static bool GetDeviceNamesWinImpl(EDataFlow data_flow, |
| 28 AudioDeviceNames* device_names) { | 29 AudioDeviceNames* device_names) { |
| 29 // It is assumed that this method is called from a COM thread, i.e., | 30 // It is assumed that this method is called from a COM thread, i.e., |
| 30 // CoInitializeEx() is not called here again to avoid STA/MTA conflicts. | 31 // CoInitializeEx() is not called here again to avoid STA/MTA conflicts. |
| 31 ScopedComPtr<IMMDeviceEnumerator> enumerator; | 32 ScopedComPtr<IMMDeviceEnumerator> enumerator; |
| 32 HRESULT hr = enumerator.CreateInstance(__uuidof(MMDeviceEnumerator), NULL, | 33 HRESULT hr = |
| 33 CLSCTX_INPROC_SERVER); | 34 ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, |
| 35 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&enumerator)); |
| 34 DCHECK_NE(CO_E_NOTINITIALIZED, hr); | 36 DCHECK_NE(CO_E_NOTINITIALIZED, hr); |
| 35 if (FAILED(hr)) { | 37 if (FAILED(hr)) { |
| 36 LOG(WARNING) << "Failed to create IMMDeviceEnumerator: " << std::hex << hr; | 38 LOG(WARNING) << "Failed to create IMMDeviceEnumerator: " << std::hex << hr; |
| 37 return false; | 39 return false; |
| 38 } | 40 } |
| 39 | 41 |
| 40 // Generate a collection of active audio endpoint devices. | 42 // Generate a collection of active audio endpoint devices. |
| 41 // This method will succeed even if all devices are disabled. | 43 // This method will succeed even if all devices are disabled. |
| 42 ScopedComPtr<IMMDeviceCollection> collection; | 44 ScopedComPtr<IMMDeviceCollection> collection; |
| 43 hr = enumerator->EnumAudioEndpoints(data_flow, DEVICE_STATE_ACTIVE, | 45 hr = enumerator->EnumAudioEndpoints(data_flow, DEVICE_STATE_ACTIVE, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 return GetDeviceNamesWinXPImpl<waveInGetNumDevs, WAVEINCAPSW, | 149 return GetDeviceNamesWinXPImpl<waveInGetNumDevs, WAVEINCAPSW, |
| 148 waveInGetDevCapsW>(device_names); | 150 waveInGetDevCapsW>(device_names); |
| 149 } | 151 } |
| 150 | 152 |
| 151 bool GetOutputDeviceNamesWinXP(AudioDeviceNames* device_names) { | 153 bool GetOutputDeviceNamesWinXP(AudioDeviceNames* device_names) { |
| 152 return GetDeviceNamesWinXPImpl<waveOutGetNumDevs, WAVEOUTCAPSW, | 154 return GetDeviceNamesWinXPImpl<waveOutGetNumDevs, WAVEOUTCAPSW, |
| 153 waveOutGetDevCapsW>(device_names); | 155 waveOutGetDevCapsW>(device_names); |
| 154 } | 156 } |
| 155 | 157 |
| 156 } // namespace media | 158 } // namespace media |
| OLD | NEW |