| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/memory/scoped_ptr.h" |
| 6 #include "media/audio/audio_io.h" | 7 #include "media/audio/audio_io.h" |
| 7 #include "media/audio/audio_manager.h" | 8 #include "media/audio/audio_manager.h" |
| 8 #include "media/audio/simple_sources.h" | 9 #include "media/audio/simple_sources.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 12 |
| 12 using ::testing::_; | 13 using ::testing::_; |
| 13 using ::testing::AnyNumber; | 14 using ::testing::AnyNumber; |
| 14 using ::testing::DoAll; | 15 using ::testing::DoAll; |
| 15 using ::testing::Field; | 16 using ::testing::Field; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 40 uint16 buffer[samples] = { 0xffff }; | 41 uint16 buffer[samples] = { 0xffff }; |
| 41 source.OnMoreData(NULL, reinterpret_cast<uint8*>(buffer), sizeof(buffer), | 42 source.OnMoreData(NULL, reinterpret_cast<uint8*>(buffer), sizeof(buffer), |
| 42 AudioBuffersState(0, 0)); | 43 AudioBuffersState(0, 0)); |
| 43 EXPECT_EQ(0, buffer[0]); | 44 EXPECT_EQ(0, buffer[0]); |
| 44 EXPECT_EQ(5126, buffer[1]); | 45 EXPECT_EQ(5126, buffer[1]); |
| 45 } | 46 } |
| 46 | 47 |
| 47 // =========================================================================== | 48 // =========================================================================== |
| 48 // Validation of AudioParameters::AUDIO_PCM_LINEAR | 49 // Validation of AudioParameters::AUDIO_PCM_LINEAR |
| 49 // | 50 // |
| 50 // Unlike windows, the tests can reliably detect the existense of real | 51 // Unlike windows, the tests can reliably detect the existence of real |
| 51 // audio devices on the bots thus no need for 'headless' detection. | 52 // audio devices on the bots thus no need for 'headless' detection. |
| 52 | 53 |
| 53 // Test that can it be created and closed. | 54 // Test that can it be created and closed. |
| 54 TEST(MacAudioTest, PCMWaveStreamGetAndClose) { | 55 TEST(MacAudioTest, PCMWaveStreamGetAndClose) { |
| 55 AudioManager* audio_man = AudioManager::GetAudioManager(); | 56 scoped_refptr<AudioManager> audio_man(AudioManager::Create()); |
| 56 ASSERT_TRUE(NULL != audio_man); | |
| 57 if (!audio_man->HasAudioOutputDevices()) | 57 if (!audio_man->HasAudioOutputDevices()) |
| 58 return; | 58 return; |
| 59 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 59 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
| 60 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, | 60 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
| 61 8000, 16, 1024)); | 61 8000, 16, 1024)); |
| 62 ASSERT_TRUE(NULL != oas); | 62 ASSERT_TRUE(NULL != oas); |
| 63 oas->Close(); | 63 oas->Close(); |
| 64 } | 64 } |
| 65 | 65 |
| 66 // Test that it can be opened and closed. | 66 // Test that it can be opened and closed. |
| 67 TEST(MacAudioTest, PCMWaveStreamOpenAndClose) { | 67 TEST(MacAudioTest, PCMWaveStreamOpenAndClose) { |
| 68 AudioManager* audio_man = AudioManager::GetAudioManager(); | 68 scoped_refptr<AudioManager> audio_man(AudioManager::Create()); |
| 69 ASSERT_TRUE(NULL != audio_man); | |
| 70 if (!audio_man->HasAudioOutputDevices()) | 69 if (!audio_man->HasAudioOutputDevices()) |
| 71 return; | 70 return; |
| 72 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 71 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
| 73 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, | 72 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
| 74 8000, 16, 1024)); | 73 8000, 16, 1024)); |
| 75 ASSERT_TRUE(NULL != oas); | 74 ASSERT_TRUE(NULL != oas); |
| 76 EXPECT_TRUE(oas->Open()); | 75 EXPECT_TRUE(oas->Open()); |
| 77 oas->Close(); | 76 oas->Close(); |
| 78 } | 77 } |
| 79 | 78 |
| 80 // This test produces actual audio for 1.5 seconds on the default wave device at | 79 // This test produces actual audio for 1.5 seconds on the default wave device at |
| 81 // 44.1K s/sec. Parameters have been chosen carefully so you should not hear | 80 // 44.1K s/sec. Parameters have been chosen carefully so you should not hear |
| 82 // pops or noises while the sound is playing. The sound must also be identical | 81 // pops or noises while the sound is playing. The sound must also be identical |
| 83 // to the sound of PCMWaveStreamPlay200HzTone22KssMono test. | 82 // to the sound of PCMWaveStreamPlay200HzTone22KssMono test. |
| 84 TEST(MacAudioTest, PCMWaveStreamPlay200HzTone44KssMono) { | 83 TEST(MacAudioTest, PCMWaveStreamPlay200HzTone44KssMono) { |
| 85 AudioManager* audio_man = AudioManager::GetAudioManager(); | 84 scoped_refptr<AudioManager> audio_man(AudioManager::Create()); |
| 86 ASSERT_TRUE(NULL != audio_man); | |
| 87 if (!audio_man->HasAudioOutputDevices()) | 85 if (!audio_man->HasAudioOutputDevices()) |
| 88 return; | 86 return; |
| 89 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; | 87 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
| 90 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 88 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
| 91 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, | 89 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
| 92 AudioParameters::kAudioCDSampleRate, 16, frames_100_ms)); | 90 AudioParameters::kAudioCDSampleRate, 16, frames_100_ms)); |
| 93 ASSERT_TRUE(NULL != oas); | 91 ASSERT_TRUE(NULL != oas); |
| 94 EXPECT_TRUE(oas->Open()); | 92 EXPECT_TRUE(oas->Open()); |
| 95 | 93 |
| 96 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, | 94 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, |
| 97 200.0, AudioParameters::kAudioCDSampleRate); | 95 200.0, AudioParameters::kAudioCDSampleRate); |
| 98 oas->SetVolume(0.5); | 96 oas->SetVolume(0.5); |
| 99 oas->Start(&source); | 97 oas->Start(&source); |
| 100 usleep(500000); | 98 usleep(500000); |
| 101 | 99 |
| 102 // Test that the volume is within the set limits. | 100 // Test that the volume is within the set limits. |
| 103 double volume = 0.0; | 101 double volume = 0.0; |
| 104 oas->GetVolume(&volume); | 102 oas->GetVolume(&volume); |
| 105 EXPECT_LT(volume, 0.51); | 103 EXPECT_LT(volume, 0.51); |
| 106 EXPECT_GT(volume, 0.49); | 104 EXPECT_GT(volume, 0.49); |
| 107 oas->Stop(); | 105 oas->Stop(); |
| 108 oas->Close(); | 106 oas->Close(); |
| 109 } | 107 } |
| 110 | 108 |
| 111 // This test produces actual audio for 1.5 seconds on the default wave device at | 109 // This test produces actual audio for 1.5 seconds on the default wave device at |
| 112 // 22K s/sec. Parameters have been chosen carefully so you should not hear pops | 110 // 22K s/sec. Parameters have been chosen carefully so you should not hear pops |
| 113 // or noises while the sound is playing. The sound must also be identical to the | 111 // or noises while the sound is playing. The sound must also be identical to the |
| 114 // sound of PCMWaveStreamPlay200HzTone44KssMono test. | 112 // sound of PCMWaveStreamPlay200HzTone44KssMono test. |
| 115 TEST(MacAudioTest, PCMWaveStreamPlay200HzTone22KssMono) { | 113 TEST(MacAudioTest, PCMWaveStreamPlay200HzTone22KssMono) { |
| 116 AudioManager* audio_man = AudioManager::GetAudioManager(); | 114 scoped_refptr<AudioManager> audio_man(AudioManager::Create()); |
| 117 ASSERT_TRUE(NULL != audio_man); | |
| 118 if (!audio_man->HasAudioOutputDevices()) | 115 if (!audio_man->HasAudioOutputDevices()) |
| 119 return; | 116 return; |
| 120 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; | 117 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
| 121 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 118 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
| 122 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, | 119 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
| 123 AudioParameters::kAudioCDSampleRate / 2, 16, | 120 AudioParameters::kAudioCDSampleRate / 2, 16, |
| 124 frames_100_ms)); | 121 frames_100_ms)); |
| 125 ASSERT_TRUE(NULL != oas); | 122 ASSERT_TRUE(NULL != oas); |
| 126 | 123 |
| 127 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, | 124 SineWaveAudioSource source(SineWaveAudioSource::FORMAT_16BIT_LINEAR_PCM, 1, |
| 128 200.0, AudioParameters::kAudioCDSampleRate/2); | 125 200.0, AudioParameters::kAudioCDSampleRate/2); |
| 129 EXPECT_TRUE(oas->Open()); | 126 EXPECT_TRUE(oas->Open()); |
| 130 oas->Start(&source); | 127 oas->Start(&source); |
| 131 usleep(1500000); | 128 usleep(1500000); |
| 132 oas->Stop(); | 129 oas->Stop(); |
| 133 oas->Close(); | 130 oas->Close(); |
| 134 } | 131 } |
| 135 | 132 |
| 136 // Custom action to clear a memory buffer. | 133 // Custom action to clear a memory buffer. |
| 137 static void ClearBuffer(AudioOutputStream* stream, uint8* dest, | 134 static void ClearBuffer(AudioOutputStream* stream, uint8* dest, |
| 138 uint32 max_size, AudioBuffersState buffers_state) { | 135 uint32 max_size, AudioBuffersState buffers_state) { |
| 139 memset(dest, 0, max_size); | 136 memset(dest, 0, max_size); |
| 140 } | 137 } |
| 141 | 138 |
| 142 TEST(MacAudioTest, PCMWaveStreamPendingBytes) { | 139 TEST(MacAudioTest, PCMWaveStreamPendingBytes) { |
| 143 AudioManager* audio_man = AudioManager::GetAudioManager(); | 140 scoped_refptr<AudioManager> audio_man(AudioManager::Create()); |
| 144 ASSERT_TRUE(NULL != audio_man); | |
| 145 if (!audio_man->HasAudioOutputDevices()) | 141 if (!audio_man->HasAudioOutputDevices()) |
| 146 return; | 142 return; |
| 147 | 143 |
| 148 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; | 144 uint32 frames_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
| 149 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 145 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
| 150 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, | 146 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
| 151 AudioParameters::kAudioCDSampleRate, 16, frames_100_ms)); | 147 AudioParameters::kAudioCDSampleRate, 16, frames_100_ms)); |
| 152 ASSERT_TRUE(NULL != oas); | 148 ASSERT_TRUE(NULL != oas); |
| 153 | 149 |
| 154 NiceMock<MockAudioSource> source; | 150 NiceMock<MockAudioSource> source; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 174 .WillOnce(Return(0)); | 170 .WillOnce(Return(0)); |
| 175 EXPECT_CALL(source, OnMoreData(oas, NotNull(), bytes_100_ms, _)) | 171 EXPECT_CALL(source, OnMoreData(oas, NotNull(), bytes_100_ms, _)) |
| 176 .Times(AnyNumber()) | 172 .Times(AnyNumber()) |
| 177 .WillRepeatedly(Return(0)); | 173 .WillRepeatedly(Return(0)); |
| 178 | 174 |
| 179 oas->Start(&source); | 175 oas->Start(&source); |
| 180 usleep(500000); | 176 usleep(500000); |
| 181 oas->Stop(); | 177 oas->Stop(); |
| 182 oas->Close(); | 178 oas->Close(); |
| 183 } | 179 } |
| OLD | NEW |