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_ = nullptr; |
tommi
2016/03/17 15:10:56
nit: since you went with this approach, you might
pbos-webrtc
2016/03/21 10:04:31
Added back Release() and == 0 checks.
| |
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_ = nullptr; |
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_ = nullptr; |
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_ = nullptr; |
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_ = nullptr; |
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 |