Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 41 const char* GetFilename(const char* filename) { | 41 const char* GetFilename(const char* filename) { |
| 42 std::string full_path_filename = webrtc::test::OutputPath() + filename; | 42 std::string full_path_filename = webrtc::test::OutputPath() + filename; |
| 43 return full_path_filename.c_str(); | 43 return full_path_filename.c_str(); |
| 44 } | 44 } |
| 45 #endif | 45 #endif |
| 46 | 46 |
| 47 using namespace webrtc; | 47 using namespace webrtc; |
| 48 | 48 |
| 49 class AudioEventObserverAPI: public AudioDeviceObserver { | 49 class AudioEventObserverAPI: public AudioDeviceObserver { |
| 50 public: | 50 public: |
| 51 AudioEventObserverAPI(AudioDeviceModule* audioDevice) | 51 AudioEventObserverAPI( |
| 52 const rtc::scoped_refptr<AudioDeviceModule>& audioDevice) | |
| 52 : error_(kRecordingError), | 53 : error_(kRecordingError), |
| 53 warning_(kRecordingWarning), | 54 warning_(kRecordingWarning), |
| 54 audio_device_(audioDevice) { | 55 audio_device_(audioDevice) {} |
| 55 } | |
| 56 | 56 |
| 57 ~AudioEventObserverAPI() {} | 57 ~AudioEventObserverAPI() {} |
| 58 | 58 |
| 59 virtual void OnErrorIsReported(const ErrorCode error) { | 59 virtual void OnErrorIsReported(const ErrorCode error) { |
| 60 TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n\n", error); | 60 TEST_LOG("\n[*** ERROR ***] => OnErrorIsReported(%d)\n\n", error); |
| 61 error_ = error; | 61 error_ = error; |
| 62 } | 62 } |
| 63 | 63 |
| 64 virtual void OnWarningIsReported(const WarningCode warning) { | 64 virtual void OnWarningIsReported(const WarningCode warning) { |
| 65 TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n\n", warning); | 65 TEST_LOG("\n[*** WARNING ***] => OnWarningIsReported(%d)\n\n", warning); |
| 66 warning_ = warning; | 66 warning_ = warning; |
| 67 EXPECT_EQ(0, audio_device_->StopRecording()); | 67 EXPECT_EQ(0, audio_device_->StopRecording()); |
| 68 EXPECT_EQ(0, audio_device_->StopPlayout()); | 68 EXPECT_EQ(0, audio_device_->StopPlayout()); |
| 69 } | 69 } |
| 70 | 70 |
| 71 public: | 71 public: |
| 72 ErrorCode error_; | 72 ErrorCode error_; |
| 73 WarningCode warning_; | 73 WarningCode warning_; |
| 74 private: | 74 private: |
| 75 AudioDeviceModule* audio_device_; | 75 rtc::scoped_refptr<AudioDeviceModule> audio_device_; |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 class AudioTransportAPI: public AudioTransport { | 78 class AudioTransportAPI: public AudioTransport { |
| 79 public: | 79 public: |
| 80 AudioTransportAPI(AudioDeviceModule* audioDevice) | 80 AudioTransportAPI(const rtc::scoped_refptr<AudioDeviceModule>& audioDevice) |
| 81 : rec_count_(0), | 81 : rec_count_(0), |
| 82 play_count_(0) { | 82 play_count_(0) { |
| 83 } | 83 } |
| 84 | 84 |
| 85 ~AudioTransportAPI() {} | 85 ~AudioTransportAPI() {} |
| 86 | 86 |
| 87 int32_t RecordedDataIsAvailable(const void* audioSamples, | 87 int32_t RecordedDataIsAvailable(const void* audioSamples, |
| 88 const size_t nSamples, | 88 const size_t nSamples, |
| 89 const size_t nBytesPerSample, | 89 const size_t nBytesPerSample, |
| 90 const size_t nChannels, | 90 const size_t nChannels, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 154 const int32_t kId = 444; | 154 const int32_t kId = 444; |
| 155 | 155 |
| 156 #if defined(_WIN32) | 156 #if defined(_WIN32) |
| 157 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 157 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 158 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); | 158 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); |
| 159 #if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) | 159 #if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) |
| 160 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is defined!\n\n"); | 160 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is defined!\n\n"); |
| 161 // create default implementation (=Core Audio) instance | 161 // create default implementation (=Core Audio) instance |
| 162 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 162 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 163 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); | 163 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); |
| 164 audio_device_->AddRef(); | 164 audio_device_.release(); |
|
tommi
2016/03/17 09:15:12
ehm, yeah you'd think that .release() calls Releas
pbos-webrtc
2016/03/17 15:04:00
done (as = nullptr)
| |
| 165 EXPECT_EQ(0, audio_device_->Release()); | |
| 166 // create non-default (=Wave Audio) instance | 165 // create non-default (=Wave Audio) instance |
| 167 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 166 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 168 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); | 167 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); |
| 169 audio_device_->AddRef(); | 168 audio_device_.release(); |
| 170 EXPECT_EQ(0, audio_device_->Release()); | |
| 171 // explicitly specify usage of Core Audio (same as default) | 169 // explicitly specify usage of Core Audio (same as default) |
| 172 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 170 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 173 kId, AudioDeviceModule::kWindowsCoreAudio)) != NULL); | 171 kId, AudioDeviceModule::kWindowsCoreAudio)) != NULL); |
| 174 #else | 172 #else |
| 175 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is *not* defined!\n"); | 173 TEST_LOG("WEBRTC_WINDOWS_CORE_AUDIO_BUILD is *not* defined!\n"); |
| 176 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 174 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 177 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); | 175 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); |
| 178 // create default implementation (=Wave Audio) instance | 176 // create default implementation (=Wave Audio) instance |
| 179 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 177 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 180 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); | 178 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); |
| 181 audio_device_->AddRef(); | 179 audio_device_.release(); |
| 182 EXPECT_EQ(0, audio_device_->Release()); | |
| 183 // explicitly specify usage of Wave Audio (same as default) | 180 // explicitly specify usage of Wave Audio (same as default) |
| 184 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 181 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 185 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); | 182 kId, AudioDeviceModule::kWindowsWaveAudio)) != NULL); |
| 186 #endif | 183 #endif |
| 187 #endif | 184 #endif |
| 188 | 185 |
| 189 #if defined(ANDROID) | 186 #if defined(ANDROID) |
| 190 // Fails tests | 187 // Fails tests |
| 191 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 188 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 192 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); | 189 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); |
| 193 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 190 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 194 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); | 191 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); |
| 195 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 192 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 196 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); | 193 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); |
| 197 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 194 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 198 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); | 195 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); |
| 199 // Create default implementation instance | 196 // Create default implementation instance |
| 200 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 197 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 201 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); | 198 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); |
| 202 #elif defined(WEBRTC_LINUX) | 199 #elif defined(WEBRTC_LINUX) |
| 203 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 200 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 204 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); | 201 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); |
| 205 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 202 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 206 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); | 203 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); |
| 207 // create default implementation instance | 204 // create default implementation instance |
| 208 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 205 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 209 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); | 206 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); |
| 210 audio_device_->AddRef(); | |
| 211 EXPECT_EQ(0, audio_device_->Terminate()); | 207 EXPECT_EQ(0, audio_device_->Terminate()); |
| 212 EXPECT_EQ(0, audio_device_->Release()); | 208 audio_device_.release(); |
| 213 // explicitly specify usage of Pulse Audio (same as default) | 209 // explicitly specify usage of Pulse Audio (same as default) |
| 214 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 210 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 215 kId, AudioDeviceModule::kLinuxPulseAudio)) != NULL); | 211 kId, AudioDeviceModule::kLinuxPulseAudio)) != NULL); |
| 216 #endif | 212 #endif |
| 217 | 213 |
| 218 #if defined(WEBRTC_MAC) | 214 #if defined(WEBRTC_MAC) |
| 219 // Fails tests | 215 // Fails tests |
| 220 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 216 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 221 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); | 217 kId, AudioDeviceModule::kWindowsWaveAudio)) == NULL); |
| 222 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 218 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 223 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); | 219 kId, AudioDeviceModule::kWindowsCoreAudio)) == NULL); |
| 224 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 220 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 225 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); | 221 kId, AudioDeviceModule::kLinuxAlsaAudio)) == NULL); |
| 226 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 222 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 227 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); | 223 kId, AudioDeviceModule::kLinuxPulseAudio)) == NULL); |
| 228 // Create default implementation instance | 224 // Create default implementation instance |
| 229 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( | 225 EXPECT_TRUE((audio_device_ = AudioDeviceModuleImpl::Create( |
| 230 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); | 226 kId, AudioDeviceModule::kPlatformDefaultAudio)) != NULL); |
| 231 #endif | 227 #endif |
| 232 | 228 |
| 233 if (audio_device_ == NULL) { | 229 if (audio_device_ == NULL) { |
| 234 FAIL() << "Failed creating audio device object!"; | 230 FAIL() << "Failed creating audio device object!"; |
| 235 } | 231 } |
| 236 | 232 |
| 237 // The ADM is reference counted. | |
| 238 audio_device_->AddRef(); | |
| 239 | |
| 240 process_thread_->RegisterModule(audio_device_); | 233 process_thread_->RegisterModule(audio_device_); |
| 241 | 234 |
| 242 AudioDeviceModule::AudioLayer audio_layer = | 235 AudioDeviceModule::AudioLayer audio_layer = |
| 243 AudioDeviceModule::kPlatformDefaultAudio; | 236 AudioDeviceModule::kPlatformDefaultAudio; |
| 244 EXPECT_EQ(0, audio_device_->ActiveAudioLayer(&audio_layer)); | 237 EXPECT_EQ(0, audio_device_->ActiveAudioLayer(&audio_layer)); |
| 245 if (audio_layer == AudioDeviceModule::kLinuxAlsaAudio) { | 238 if (audio_layer == AudioDeviceModule::kLinuxAlsaAudio) { |
| 246 linux_alsa_ = true; | 239 linux_alsa_ = true; |
| 247 } | 240 } |
| 248 } | 241 } |
| 249 | 242 |
| 250 static void TearDownTestCase() { | 243 static void TearDownTestCase() { |
| 251 if (process_thread_) { | 244 if (process_thread_) { |
| 252 process_thread_->DeRegisterModule(audio_device_); | 245 process_thread_->DeRegisterModule(audio_device_); |
| 253 process_thread_->Stop(); | 246 process_thread_->Stop(); |
| 254 process_thread_.reset(); | 247 process_thread_.reset(); |
| 255 } | 248 } |
| 256 if (event_observer_) { | 249 if (event_observer_) { |
| 257 delete event_observer_; | 250 delete event_observer_; |
| 258 event_observer_ = NULL; | 251 event_observer_ = NULL; |
| 259 } | 252 } |
| 260 if (audio_transport_) { | 253 if (audio_transport_) { |
| 261 delete audio_transport_; | 254 delete audio_transport_; |
| 262 audio_transport_ = NULL; | 255 audio_transport_ = NULL; |
| 263 } | 256 } |
| 264 if (audio_device_) { | 257 audio_device_.release(); |
| 265 EXPECT_EQ(0, audio_device_->Release()); | |
| 266 } | |
| 267 PRINT_TEST_RESULTS; | 258 PRINT_TEST_RESULTS; |
| 268 } | 259 } |
| 269 | 260 |
| 270 void SetUp() { | 261 void SetUp() { |
| 271 if (linux_alsa_) { | 262 if (linux_alsa_) { |
| 272 FAIL() << "API Test is not available on ALSA on Linux!"; | 263 FAIL() << "API Test is not available on ALSA on Linux!"; |
| 273 } | 264 } |
| 274 EXPECT_EQ(0, audio_device_->Init()); | 265 EXPECT_EQ(0, audio_device_->Init()); |
| 275 EXPECT_TRUE(audio_device_->Initialized()); | 266 EXPECT_TRUE(audio_device_->Initialized()); |
| 276 } | 267 } |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 297 | 288 |
| 298 void CheckInitialRecordingStates() { | 289 void CheckInitialRecordingStates() { |
| 299 EXPECT_FALSE(audio_device_->RecordingIsInitialized()); | 290 EXPECT_FALSE(audio_device_->RecordingIsInitialized()); |
| 300 EXPECT_FALSE(audio_device_->Recording()); | 291 EXPECT_FALSE(audio_device_->Recording()); |
| 301 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); | 292 EXPECT_FALSE(audio_device_->MicrophoneIsInitialized()); |
| 302 } | 293 } |
| 303 | 294 |
| 304 // TODO(henrika): Get rid of globals. | 295 // TODO(henrika): Get rid of globals. |
| 305 static bool linux_alsa_; | 296 static bool linux_alsa_; |
| 306 static std::unique_ptr<ProcessThread> process_thread_; | 297 static std::unique_ptr<ProcessThread> process_thread_; |
| 307 static AudioDeviceModule* audio_device_; | 298 static rtc::scoped_refptr<AudioDeviceModule> audio_device_; |
| 308 static AudioTransportAPI* audio_transport_; | 299 static AudioTransportAPI* audio_transport_; |
| 309 static AudioEventObserverAPI* event_observer_; | 300 static AudioEventObserverAPI* event_observer_; |
| 310 }; | 301 }; |
| 311 | 302 |
| 312 // Must be initialized like this to handle static SetUpTestCase() above. | 303 // Must be initialized like this to handle static SetUpTestCase() above. |
| 313 bool AudioDeviceAPITest::linux_alsa_ = false; | 304 bool AudioDeviceAPITest::linux_alsa_ = false; |
| 314 std::unique_ptr<ProcessThread> AudioDeviceAPITest::process_thread_; | 305 std::unique_ptr<ProcessThread> AudioDeviceAPITest::process_thread_; |
| 315 AudioDeviceModule* AudioDeviceAPITest::audio_device_ = NULL; | 306 rtc::scoped_refptr<AudioDeviceModule> AudioDeviceAPITest::audio_device_; |
| 316 AudioTransportAPI* AudioDeviceAPITest::audio_transport_ = NULL; | 307 AudioTransportAPI* AudioDeviceAPITest::audio_transport_ = NULL; |
| 317 AudioEventObserverAPI* AudioDeviceAPITest::event_observer_ = NULL; | 308 AudioEventObserverAPI* AudioDeviceAPITest::event_observer_ = NULL; |
| 318 | 309 |
| 319 TEST_F(AudioDeviceAPITest, RegisterEventObserver) { | 310 TEST_F(AudioDeviceAPITest, RegisterEventObserver) { |
| 320 event_observer_ = new AudioEventObserverAPI(audio_device_); | 311 event_observer_ = new AudioEventObserverAPI(audio_device_); |
| 321 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); | 312 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); |
| 322 EXPECT_EQ(0, audio_device_->RegisterEventObserver(event_observer_)); | 313 EXPECT_EQ(0, audio_device_->RegisterEventObserver(event_observer_)); |
| 323 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); | 314 EXPECT_EQ(0, audio_device_->RegisterEventObserver(NULL)); |
| 324 } | 315 } |
| 325 | 316 |
| (...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1807 // TODO(kjellander): Fix so these tests pass on Mac. | 1798 // TODO(kjellander): Fix so these tests pass on Mac. |
| 1808 #if !defined(WEBRTC_MAC) | 1799 #if !defined(WEBRTC_MAC) |
| 1809 EXPECT_EQ(0, audio_device_->InitPlayout()); | 1800 EXPECT_EQ(0, audio_device_->InitPlayout()); |
| 1810 EXPECT_EQ(0, audio_device_->StartPlayout()); | 1801 EXPECT_EQ(0, audio_device_->StartPlayout()); |
| 1811 #endif | 1802 #endif |
| 1812 | 1803 |
| 1813 EXPECT_EQ(-1, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); | 1804 EXPECT_EQ(-1, audio_device_->GetLoudspeakerStatus(&loudspeakerOn)); |
| 1814 #endif | 1805 #endif |
| 1815 EXPECT_EQ(0, audio_device_->StopPlayout()); | 1806 EXPECT_EQ(0, audio_device_->StopPlayout()); |
| 1816 } | 1807 } |
| OLD | NEW |