diff options
-rw-r--r-- | media/audio/audio_input_device_unittest.cc | 19 | ||||
-rw-r--r-- | media/audio/mac/audio_manager_mac.cc | 30 |
2 files changed, 22 insertions, 27 deletions
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc index 8b3c3e5..6eb6dfb 100644 --- a/media/audio/audio_input_device_unittest.cc +++ b/media/audio/audio_input_device_unittest.cc @@ -91,6 +91,10 @@ class AudioInputDeviceTest } } + bool CanRunAudioTest() { + return audio_manager_->HasAudioInputDevices(); + } + scoped_ptr<AudioManager> audio_manager_; #if defined(OS_WIN) @@ -101,6 +105,9 @@ class AudioInputDeviceTest // Test that devices can be enumerated. TEST_F(AudioInputDeviceTest, EnumerateDevices) { + if (!CanRunAudioTest()) + return; + AudioDeviceNames device_names; audio_manager_->GetAudioInputDeviceNames(&device_names); CheckDeviceNames(device_names); @@ -114,6 +121,9 @@ TEST_F(AudioInputDeviceTest, EnumerateDevices) { // Override default enumeration API and force usage of Windows MMDevice. // This test will only run on Windows Vista and higher. TEST_F(AudioInputDeviceTest, EnumerateDevicesWinMMDevice) { + if (!CanRunAudioTest()) + return; + AudioDeviceNames device_names; if (!SetMMDeviceEnumeration()) { // Usage of MMDevice will fail on XP and lower. @@ -127,6 +137,9 @@ TEST_F(AudioInputDeviceTest, EnumerateDevicesWinMMDevice) { // Override default enumeration API and force usage of Windows Wave. // This test will run on Windows XP, Windows Vista and Windows 7. TEST_F(AudioInputDeviceTest, EnumerateDevicesWinWave) { + if (!CanRunAudioTest()) + return; + AudioDeviceNames device_names; SetWaveEnumeration(); audio_manager_->GetAudioInputDeviceNames(&device_names); @@ -134,6 +147,9 @@ TEST_F(AudioInputDeviceTest, EnumerateDevicesWinWave) { } TEST_F(AudioInputDeviceTest, WinXPDeviceIdUnchanged) { + if (!CanRunAudioTest()) + return; + AudioDeviceNames xp_device_names; SetWaveEnumeration(); audio_manager_->GetAudioInputDeviceNames(&xp_device_names); @@ -148,6 +164,9 @@ TEST_F(AudioInputDeviceTest, WinXPDeviceIdUnchanged) { } TEST_F(AudioInputDeviceTest, ConvertToWinXPDeviceId) { + if (!CanRunAudioTest()) + return; + if (!SetMMDeviceEnumeration()) { // Usage of MMDevice will fail on XP and lower. LOG(WARNING) << "MM device enumeration is not supported."; diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index edf59930..a056283 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc @@ -120,36 +120,17 @@ static void GetAudioDeviceInfo(bool is_input, // Iterate over all available devices to gather information. for (int i = 0; i < device_count; ++i) { - int channels = 0; // Get the number of input or output channels of the device. property_address.mScope = is_input ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; - property_address.mSelector = kAudioDevicePropertyStreamConfiguration; + property_address.mSelector = kAudioDevicePropertyStreams; + size = 0; result = AudioObjectGetPropertyDataSize(device_ids[i], &property_address, 0, NULL, &size); - if (result) - continue; - - scoped_ptr_malloc<AudioBufferList> - buffer(reinterpret_cast<AudioBufferList*>(malloc(size))); - AudioBufferList* buffer_list = buffer.get(); - result = AudioObjectGetPropertyData(device_ids[i], - &property_address, - 0, - NULL, - &size, - buffer_list); - if (result) - continue; - - for (uint32 j = 0; j < buffer_list->mNumberBuffers; ++j) - channels += buffer_list->mBuffers[j].mNumberChannels; - - // Exclude those devices without the type of channel we are interested in. - if (!channels) + if (result || !size) continue; // Get device UID. @@ -267,11 +248,6 @@ bool AudioManagerMac::HasAudioInputDevices() { void AudioManagerMac::GetAudioInputDeviceNames( media::AudioDeviceNames* device_names) { - // This is needed because AudioObjectGetPropertyDataSize has memory leak - // when there is no soundcard in the machine. - if (!HasAudioInputDevices()) - return; - GetAudioDeviceInfo(true, device_names); if (!device_names->empty()) { // Prepend the default device to the list since we always want it to be |