Index: media/audio/win/audio_manager_win.cc |
diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc |
index c09fb46284d6d8f4d1126816bf87d3dc6a9bee2e..9742fc9d66b780fd30a6e6e34a7218665250f2ef 100644 |
--- a/media/audio/win/audio_manager_win.cc |
+++ b/media/audio/win/audio_manager_win.cc |
@@ -129,23 +129,21 @@ static int NumberOfWaveOutBuffers() { |
} |
AudioManagerWin::AudioManagerWin(AudioLogFactory* audio_log_factory) |
- : AudioManagerBase(audio_log_factory), |
- // |CoreAudioUtil::IsSupported()| uses static variables to avoid doing |
- // multiple initializations. This is however not thread safe. |
- // So, here we call it explicitly before we kick off the audio thread |
- // or do any other work. |
- enumeration_type_(CoreAudioUtil::IsSupported() ? |
tommi (sloooow) - chröme
2015/04/20 18:23:38
Is it safe to remove this call? The comment expla
DaleCurtis
2015/04/20 18:54:07
I've moved video capture enumeration back to the a
DaleCurtis
2015/04/20 23:06:10
Hmm, things are worse than I thought here, TrayAud
|
- kMMDeviceEnumeration : kWaveEnumeration) { |
+ : AudioManagerBase(audio_log_factory), enumeration_type_(kNoEnumeration) { |
SetMaxOutputStreamsAllowed(kMaxOutputStreams); |
// WARNING: This is executed on the UI loop, do not add any code here which |
// loads libraries or attempts to call out into the OS. Instead add such code |
// to the InitializeOnAudioThread() method below. |
+ // |
+ // WARNING: Do not make any calls to CoreAudioUtil within the constructor, it |
+ // will attempt to perform COM initialization. |
// Task must be posted last to avoid races from handing out "this" to the |
// audio thread. |
- GetTaskRunner()->PostTask(FROM_HERE, base::Bind( |
- &AudioManagerWin::InitializeOnAudioThread, base::Unretained(this))); |
+ GetTaskRunner()->PostTask( |
+ FROM_HERE, base::Bind(&AudioManagerWin::InitializeOnAudioThread, |
+ base::Unretained(this))); |
} |
AudioManagerWin::~AudioManagerWin() { |
@@ -166,6 +164,8 @@ bool AudioManagerWin::HasAudioInputDevices() { |
void AudioManagerWin::InitializeOnAudioThread() { |
DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
+ enumeration_type_ = |
+ CoreAudioUtil::IsSupported() ? kMMDeviceEnumeration : kWaveEnumeration; |
if (core_audio_supported()) { |
// AudioDeviceListenerWin must be initialized on a COM thread and should |
@@ -517,7 +517,7 @@ AudioInputStream* AudioManagerWin::CreatePCMWaveInAudioInputStream( |
const std::string& device_id) { |
std::string xp_device_id = device_id; |
if (device_id != AudioManagerBase::kDefaultDeviceId && |
- enumeration_type_ == kMMDeviceEnumeration) { |
+ enumeration_type() == kMMDeviceEnumeration) { |
xp_device_id = ConvertToWinXPInputDeviceId(device_id); |
if (xp_device_id.empty()) { |
DLOG(ERROR) << "Cannot find a waveIn device which matches the device ID " |