OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/environment.h" | 5 #include "base/environment.h" |
6 #include "base/test/test_timeouts.h" | 6 #include "base/test/test_timeouts.h" |
7 #include "content/renderer/media/audio_hardware.h" | 7 #include "content/renderer/media/audio_hardware.h" |
8 #include "content/renderer/media/webrtc_audio_device_impl.h" | 8 #include "content/renderer/media/webrtc_audio_device_impl.h" |
9 #include "content/test/webrtc_audio_device_test.h" | 9 #include "content/test/webrtc_audio_device_test.h" |
10 #include "media/audio/audio_manager.h" | 10 #include "media/audio/audio_manager.h" |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates), | 225 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates), |
226 invalid_rates[i])); | 226 invalid_rates[i])); |
227 } | 227 } |
228 } | 228 } |
229 | 229 |
230 // Basic test that instantiates and initializes an instance of | 230 // Basic test that instantiates and initializes an instance of |
231 // WebRtcAudioDeviceImpl. | 231 // WebRtcAudioDeviceImpl. |
232 TEST_F(WebRTCAudioDeviceTest, Construct) { | 232 TEST_F(WebRTCAudioDeviceTest, Construct) { |
233 AudioUtilNoHardware audio_util(48000, 48000, CHANNEL_LAYOUT_MONO); | 233 AudioUtilNoHardware audio_util(48000, 48000, CHANNEL_LAYOUT_MONO); |
234 SetAudioUtilCallback(&audio_util); | 234 SetAudioUtilCallback(&audio_util); |
235 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( | 235 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
236 new WebRtcAudioDeviceImpl()); | 236 new WebRtcAudioDeviceImpl()); |
237 | 237 |
238 audio_device->SetSessionId(1); | 238 webrtc_audio_device->SetSessionId(1); |
239 | 239 |
240 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 240 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
241 ASSERT_TRUE(engine.valid()); | 241 ASSERT_TRUE(engine.valid()); |
242 | 242 |
243 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 243 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
244 int err = base->Init(audio_device); | 244 int err = base->Init(webrtc_audio_device); |
245 EXPECT_EQ(0, err); | 245 EXPECT_EQ(0, err); |
246 EXPECT_EQ(0, base->Terminate()); | 246 EXPECT_EQ(0, base->Terminate()); |
247 } | 247 } |
248 | 248 |
249 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output | 249 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output |
250 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will | 250 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will |
251 // be utilized to implement the actual audio path. The test registers a | 251 // be utilized to implement the actual audio path. The test registers a |
252 // webrtc::VoEExternalMedia implementation to hijack the output audio and | 252 // webrtc::VoEExternalMedia implementation to hijack the output audio and |
253 // verify that streaming starts correctly. | 253 // verify that streaming starts correctly. |
254 // Disabled when running headless since the bots don't have the required config. | 254 // Disabled when running headless since the bots don't have the required config. |
(...skipping 11 matching lines...) Expand all Loading... |
266 | 266 |
267 EXPECT_CALL(media_observer(), | 267 EXPECT_CALL(media_observer(), |
268 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 268 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); |
269 EXPECT_CALL(media_observer(), | 269 EXPECT_CALL(media_observer(), |
270 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 270 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
271 EXPECT_CALL(media_observer(), | 271 EXPECT_CALL(media_observer(), |
272 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 272 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
273 EXPECT_CALL(media_observer(), | 273 EXPECT_CALL(media_observer(), |
274 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 274 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
275 | 275 |
276 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( | 276 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
277 new WebRtcAudioDeviceImpl()); | 277 new WebRtcAudioDeviceImpl()); |
278 audio_device->SetSessionId(1); | 278 webrtc_audio_device->SetSessionId(1); |
279 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 279 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
280 ASSERT_TRUE(engine.valid()); | 280 ASSERT_TRUE(engine.valid()); |
281 | 281 |
282 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 282 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
283 ASSERT_TRUE(base.valid()); | 283 ASSERT_TRUE(base.valid()); |
284 int err = base->Init(audio_device); | 284 int err = base->Init(webrtc_audio_device); |
285 ASSERT_EQ(0, err); | 285 ASSERT_EQ(0, err); |
286 | 286 |
287 int ch = base->CreateChannel(); | 287 int ch = base->CreateChannel(); |
288 EXPECT_NE(-1, ch); | 288 EXPECT_NE(-1, ch); |
289 | 289 |
290 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); | 290 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); |
291 ASSERT_TRUE(external_media.valid()); | 291 ASSERT_TRUE(external_media.valid()); |
292 | 292 |
293 base::WaitableEvent event(false, false); | 293 base::WaitableEvent event(false, false); |
294 scoped_ptr<WebRTCMediaProcessImpl> media_process( | 294 scoped_ptr<WebRTCMediaProcessImpl> media_process( |
295 new WebRTCMediaProcessImpl(&event)); | 295 new WebRTCMediaProcessImpl(&event)); |
296 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( | 296 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( |
297 ch, webrtc::kPlaybackPerChannel, *media_process.get())); | 297 ch, webrtc::kPlaybackPerChannel, *media_process.get())); |
298 | 298 |
299 EXPECT_EQ(0, base->StartPlayout(ch)); | 299 EXPECT_EQ(0, base->StartPlayout(ch)); |
300 | 300 |
301 EXPECT_TRUE(event.TimedWait( | 301 EXPECT_TRUE(event.TimedWait( |
302 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); | 302 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); |
303 WaitForIOThreadCompletion(); | 303 WaitForIOThreadCompletion(); |
304 | 304 |
305 EXPECT_TRUE(audio_device->playing()); | 305 EXPECT_TRUE(webrtc_audio_device->playing()); |
306 EXPECT_FALSE(audio_device->recording()); | 306 EXPECT_FALSE(webrtc_audio_device->recording()); |
307 EXPECT_EQ(ch, media_process->channel_id()); | 307 EXPECT_EQ(ch, media_process->channel_id()); |
308 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); | 308 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); |
309 EXPECT_EQ(80, media_process->packet_size()); | 309 EXPECT_EQ(80, media_process->packet_size()); |
310 EXPECT_EQ(8000, media_process->sample_rate()); | 310 EXPECT_EQ(8000, media_process->sample_rate()); |
311 | 311 |
312 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( | 312 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( |
313 ch, webrtc::kPlaybackPerChannel)); | 313 ch, webrtc::kPlaybackPerChannel)); |
314 EXPECT_EQ(0, base->StopPlayout(ch)); | 314 EXPECT_EQ(0, base->StopPlayout(ch)); |
315 | 315 |
316 EXPECT_EQ(0, base->DeleteChannel(ch)); | 316 EXPECT_EQ(0, base->DeleteChannel(ch)); |
(...skipping 18 matching lines...) Expand all Loading... |
335 AudioUtil audio_util; | 335 AudioUtil audio_util; |
336 SetAudioUtilCallback(&audio_util); | 336 SetAudioUtilCallback(&audio_util); |
337 | 337 |
338 if (!HardwareSampleRatesAreValid()) | 338 if (!HardwareSampleRatesAreValid()) |
339 return; | 339 return; |
340 | 340 |
341 // TODO(tommi): extend MediaObserver and MockMediaObserver with support | 341 // TODO(tommi): extend MediaObserver and MockMediaObserver with support |
342 // for new interfaces, like OnSetAudioStreamRecording(). When done, add | 342 // for new interfaces, like OnSetAudioStreamRecording(). When done, add |
343 // EXPECT_CALL() macros here. | 343 // EXPECT_CALL() macros here. |
344 | 344 |
345 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( | 345 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
346 new WebRtcAudioDeviceImpl()); | 346 new WebRtcAudioDeviceImpl()); |
347 audio_device->SetSessionId(1); | 347 webrtc_audio_device->SetSessionId(1); |
348 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 348 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
349 ASSERT_TRUE(engine.valid()); | 349 ASSERT_TRUE(engine.valid()); |
350 | 350 |
351 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 351 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
352 ASSERT_TRUE(base.valid()); | 352 ASSERT_TRUE(base.valid()); |
353 int err = base->Init(audio_device); | 353 int err = base->Init(webrtc_audio_device); |
354 ASSERT_EQ(0, err); | 354 ASSERT_EQ(0, err); |
355 | 355 |
356 int ch = base->CreateChannel(); | 356 int ch = base->CreateChannel(); |
357 EXPECT_NE(-1, ch); | 357 EXPECT_NE(-1, ch); |
358 | 358 |
359 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); | 359 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); |
360 ASSERT_TRUE(external_media.valid()); | 360 ASSERT_TRUE(external_media.valid()); |
361 | 361 |
362 base::WaitableEvent event(false, false); | 362 base::WaitableEvent event(false, false); |
363 scoped_ptr<WebRTCMediaProcessImpl> media_process( | 363 scoped_ptr<WebRTCMediaProcessImpl> media_process( |
364 new WebRTCMediaProcessImpl(&event)); | 364 new WebRTCMediaProcessImpl(&event)); |
365 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( | 365 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( |
366 ch, webrtc::kRecordingPerChannel, *media_process.get())); | 366 ch, webrtc::kRecordingPerChannel, *media_process.get())); |
367 | 367 |
368 // We must add an external transport implementation to be able to start | 368 // We must add an external transport implementation to be able to start |
369 // recording without actually sending encoded packets to the network. All | 369 // recording without actually sending encoded packets to the network. All |
370 // we want to do here is to verify that audio capturing starts as it should. | 370 // we want to do here is to verify that audio capturing starts as it should. |
371 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); | 371 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); |
372 scoped_ptr<WebRTCTransportImpl> transport( | 372 scoped_ptr<WebRTCTransportImpl> transport( |
373 new WebRTCTransportImpl(network.get())); | 373 new WebRTCTransportImpl(network.get())); |
374 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); | 374 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); |
375 EXPECT_EQ(0, base->StartSend(ch)); | 375 EXPECT_EQ(0, base->StartSend(ch)); |
376 | 376 |
377 EXPECT_TRUE(event.TimedWait( | 377 EXPECT_TRUE(event.TimedWait( |
378 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); | 378 base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); |
379 WaitForIOThreadCompletion(); | 379 WaitForIOThreadCompletion(); |
380 | 380 |
381 EXPECT_FALSE(audio_device->playing()); | 381 EXPECT_FALSE(webrtc_audio_device->playing()); |
382 EXPECT_TRUE(audio_device->recording()); | 382 EXPECT_TRUE(webrtc_audio_device->recording()); |
383 EXPECT_EQ(ch, media_process->channel_id()); | 383 EXPECT_EQ(ch, media_process->channel_id()); |
384 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); | 384 EXPECT_EQ(webrtc::kRecordingPerChannel, media_process->type()); |
385 EXPECT_EQ(80, media_process->packet_size()); | 385 EXPECT_EQ(80, media_process->packet_size()); |
386 EXPECT_EQ(8000, media_process->sample_rate()); | 386 EXPECT_EQ(8000, media_process->sample_rate()); |
387 | 387 |
388 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( | 388 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( |
389 ch, webrtc::kRecordingPerChannel)); | 389 ch, webrtc::kRecordingPerChannel)); |
390 EXPECT_EQ(0, base->StopSend(ch)); | 390 EXPECT_EQ(0, base->StopSend(ch)); |
391 | 391 |
392 EXPECT_EQ(0, base->DeleteChannel(ch)); | 392 EXPECT_EQ(0, base->DeleteChannel(ch)); |
(...skipping 19 matching lines...) Expand all Loading... |
412 | 412 |
413 EXPECT_CALL(media_observer(), | 413 EXPECT_CALL(media_observer(), |
414 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 414 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); |
415 EXPECT_CALL(media_observer(), | 415 EXPECT_CALL(media_observer(), |
416 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 416 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
417 EXPECT_CALL(media_observer(), | 417 EXPECT_CALL(media_observer(), |
418 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 418 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
419 EXPECT_CALL(media_observer(), | 419 EXPECT_CALL(media_observer(), |
420 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 420 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
421 | 421 |
422 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( | 422 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
423 new WebRtcAudioDeviceImpl()); | 423 new WebRtcAudioDeviceImpl()); |
424 audio_device->SetSessionId(1); | 424 webrtc_audio_device->SetSessionId(1); |
425 | 425 |
426 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 426 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
427 ASSERT_TRUE(engine.valid()); | 427 ASSERT_TRUE(engine.valid()); |
428 | 428 |
429 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 429 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
430 ASSERT_TRUE(base.valid()); | 430 ASSERT_TRUE(base.valid()); |
431 int err = base->Init(audio_device); | 431 int err = base->Init(webrtc_audio_device); |
432 ASSERT_EQ(0, err); | 432 ASSERT_EQ(0, err); |
433 | 433 |
434 int ch = base->CreateChannel(); | 434 int ch = base->CreateChannel(); |
435 EXPECT_NE(-1, ch); | 435 EXPECT_NE(-1, ch); |
436 EXPECT_EQ(0, base->StartPlayout(ch)); | 436 EXPECT_EQ(0, base->StartPlayout(ch)); |
437 | 437 |
438 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); | 438 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); |
439 ASSERT_TRUE(file.valid()); | 439 ASSERT_TRUE(file.valid()); |
440 int duration = 0; | 440 int duration = 0; |
441 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, | 441 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 | 480 |
481 EXPECT_CALL(media_observer(), | 481 EXPECT_CALL(media_observer(), |
482 OnSetAudioStreamStatus(_, 1, StrEq("created"))); | 482 OnSetAudioStreamStatus(_, 1, StrEq("created"))); |
483 EXPECT_CALL(media_observer(), | 483 EXPECT_CALL(media_observer(), |
484 OnSetAudioStreamPlaying(_, 1, true)); | 484 OnSetAudioStreamPlaying(_, 1, true)); |
485 EXPECT_CALL(media_observer(), | 485 EXPECT_CALL(media_observer(), |
486 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); | 486 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); |
487 EXPECT_CALL(media_observer(), | 487 EXPECT_CALL(media_observer(), |
488 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 488 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
489 | 489 |
490 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( | 490 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
491 new WebRtcAudioDeviceImpl()); | 491 new WebRtcAudioDeviceImpl()); |
492 audio_device->SetSessionId(1); | 492 webrtc_audio_device->SetSessionId(1); |
493 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 493 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
494 ASSERT_TRUE(engine.valid()); | 494 ASSERT_TRUE(engine.valid()); |
495 | 495 |
496 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 496 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
497 ASSERT_TRUE(base.valid()); | 497 ASSERT_TRUE(base.valid()); |
498 int err = base->Init(audio_device); | 498 int err = base->Init(webrtc_audio_device); |
499 ASSERT_EQ(0, err); | 499 ASSERT_EQ(0, err); |
500 | 500 |
501 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); | 501 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); |
502 ASSERT_TRUE(audio_processing.valid()); | 502 ASSERT_TRUE(audio_processing.valid()); |
503 bool enabled = false; | 503 bool enabled = false; |
504 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; | 504 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; |
505 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); | 505 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); |
506 EXPECT_TRUE(enabled); | 506 EXPECT_TRUE(enabled); |
507 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog); | 507 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog); |
508 | 508 |
(...skipping 13 matching lines...) Expand all Loading... |
522 MessageLoop::QuitClosure(), | 522 MessageLoop::QuitClosure(), |
523 TestTimeouts::action_timeout()); | 523 TestTimeouts::action_timeout()); |
524 message_loop_.Run(); | 524 message_loop_.Run(); |
525 | 525 |
526 EXPECT_EQ(0, base->StopSend(ch)); | 526 EXPECT_EQ(0, base->StopSend(ch)); |
527 EXPECT_EQ(0, base->StopPlayout(ch)); | 527 EXPECT_EQ(0, base->StopPlayout(ch)); |
528 | 528 |
529 EXPECT_EQ(0, base->DeleteChannel(ch)); | 529 EXPECT_EQ(0, base->DeleteChannel(ch)); |
530 EXPECT_EQ(0, base->Terminate()); | 530 EXPECT_EQ(0, base->Terminate()); |
531 } | 531 } |
OLD | NEW |