| 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 |