Index: media/audio/audio_input_device_unittest.cc |
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc |
index 0917b7915597c9f82a5ecae4407e29a1a4f278b9..470dbab6123a20e81bf905696e62e3c91e312769 100644 |
--- a/media/audio/audio_input_device_unittest.cc |
+++ b/media/audio/audio_input_device_unittest.cc |
@@ -7,10 +7,12 @@ |
#include "base/win/scoped_com_initializer.h" |
#include "media/audio/audio_manager.h" |
#include "media/audio/audio_manager_base.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
#if defined(OS_WIN) |
#include "media/audio/win/audio_manager_win.h" |
+#include "media/audio/win/wavein_input_win.h" |
#endif |
-#include "testing/gtest/include/gtest/gtest.h" |
using base::win::ScopedCOMInitializer; |
using media::AudioDeviceNames; |
@@ -41,6 +43,19 @@ class AudioInputDeviceTest |
AudioManagerWin* amw = static_cast<AudioManagerWin*>(audio_manager_.get()); |
amw->SetEnumerationType(AudioManagerWin::kWaveEnumeration); |
} |
+ |
+ std::string GetDeviceIdFromPCMWaveInAudioInputStream( |
+ const std::string& device_id) { |
+ AudioManagerWin* amw = static_cast<AudioManagerWin*>(audio_manager_.get()); |
+ AudioParameters parameters( |
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
+ AudioParameters::kAudioCDSampleRate, 16, |
+ 1024); |
+ scoped_ptr<PCMWaveInAudioInputStream> stream( |
+ static_cast<PCMWaveInAudioInputStream*>( |
+ amw->CreatePCMWaveInAudioInputStream(parameters, device_id))); |
+ return stream.get() ? stream->device_id_ : std::string(); |
+ } |
#endif |
// Helper method which verifies that the device list starts with a valid |
@@ -114,4 +129,45 @@ TEST_F(AudioInputDeviceTest, EnumerateDevicesWinWave) { |
CheckDeviceNames(device_names); |
} |
+TEST_F(AudioInputDeviceTest, WinXPDeviceIdUnchanged) { |
+ AudioDeviceNames xp_device_names; |
+ SetWaveEnumeration(); |
+ audio_manager_->GetAudioInputDeviceNames(&xp_device_names); |
+ CheckDeviceNames(xp_device_names); |
+ |
+ // Device ID should remain unchanged, including the default device ID. |
+ for (AudioDeviceNames::iterator i = xp_device_names.begin(); |
+ i != xp_device_names.end(); ++i) { |
+ EXPECT_EQ(i->unique_id, |
+ GetDeviceIdFromPCMWaveInAudioInputStream(i->unique_id)); |
+ } |
+} |
+ |
+TEST_F(AudioInputDeviceTest, ConvertToWinXPDeviceId) { |
+ if (!SetMMDeviceEnumeration()) { |
+ // Usage of MMDevice will fail on XP and lower. |
+ LOG(WARNING) << "MM device enumeration is not supported."; |
+ return; |
+ } |
+ |
+ AudioDeviceNames device_names; |
+ audio_manager_->GetAudioInputDeviceNames(&device_names); |
+ CheckDeviceNames(device_names); |
+ |
+ for (AudioDeviceNames::iterator i = device_names.begin(); |
+ i != device_names.end(); ++i) { |
+ std::string converted_id = |
+ GetDeviceIdFromPCMWaveInAudioInputStream(i->unique_id); |
+ if (i == device_names.begin()) { |
+ // The first in the list is the default device ID, which should not be |
+ // changed when passed to PCMWaveInAudioInputStream. |
+ EXPECT_EQ(i->unique_id, converted_id); |
+ } else { |
+ // MMDevice-style device IDs should be converted to WaveIn-style device |
+ // IDs. |
+ EXPECT_NE(i->unique_id, converted_id); |
+ } |
+ } |
+} |
+ |
#endif |