Chromium Code Reviews| 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/renderer/media/webrtc_audio_renderer.h" | |
| 9 #include "content/test/webrtc_audio_device_test.h" | 10 #include "content/test/webrtc_audio_device_test.h" |
| 10 #include "media/audio/audio_manager.h" | 11 #include "media/audio/audio_manager.h" |
| 11 #include "media/audio/audio_util.h" | 12 #include "media/audio/audio_util.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
| 13 #include "third_party/webrtc/voice_engine/include/voe_audio_processing.h" | 14 #include "third_party/webrtc/voice_engine/include/voe_audio_processing.h" |
| 14 #include "third_party/webrtc/voice_engine/include/voe_base.h" | 15 #include "third_party/webrtc/voice_engine/include/voe_base.h" |
| 15 #include "third_party/webrtc/voice_engine/include/voe_external_media.h" | 16 #include "third_party/webrtc/voice_engine/include/voe_external_media.h" |
| 16 #include "third_party/webrtc/voice_engine/include/voe_file.h" | 17 #include "third_party/webrtc/voice_engine/include/voe_file.h" |
| 17 #include "third_party/webrtc/voice_engine/include/voe_network.h" | 18 #include "third_party/webrtc/voice_engine/include/voe_network.h" |
| 18 | 19 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 216 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates), | 217 EXPECT_FALSE(FindElementInArray(valid_rates, arraysize(valid_rates), |
| 217 invalid_rates[i])); | 218 invalid_rates[i])); |
| 218 } | 219 } |
| 219 } | 220 } |
| 220 | 221 |
| 221 // Basic test that instantiates and initializes an instance of | 222 // Basic test that instantiates and initializes an instance of |
| 222 // WebRtcAudioDeviceImpl. | 223 // WebRtcAudioDeviceImpl. |
| 223 TEST_F(WebRTCAudioDeviceTest, Construct) { | 224 TEST_F(WebRTCAudioDeviceTest, Construct) { |
| 224 AudioUtilNoHardware audio_util(48000, 48000, media::CHANNEL_LAYOUT_MONO); | 225 AudioUtilNoHardware audio_util(48000, 48000, media::CHANNEL_LAYOUT_MONO); |
| 225 SetAudioUtilCallback(&audio_util); | 226 SetAudioUtilCallback(&audio_util); |
| 227 | |
| 226 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 228 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| 227 new WebRtcAudioDeviceImpl()); | 229 new WebRtcAudioDeviceImpl()); |
| 228 | |
| 229 webrtc_audio_device->SetSessionId(1); | 230 webrtc_audio_device->SetSessionId(1); |
| 230 | 231 |
| 231 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 232 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
| 232 ASSERT_TRUE(engine.valid()); | 233 ASSERT_TRUE(engine.valid()); |
| 233 | 234 |
| 234 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 235 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 235 int err = base->Init(webrtc_audio_device); | 236 int err = base->Init(webrtc_audio_device); |
| 236 EXPECT_EQ(0, err); | 237 EXPECT_EQ(0, err); |
| 237 EXPECT_EQ(0, base->Terminate()); | 238 EXPECT_EQ(0, base->Terminate()); |
| 238 } | 239 } |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 257 | 258 |
| 258 EXPECT_CALL(media_observer(), | 259 EXPECT_CALL(media_observer(), |
| 259 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 260 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); |
| 260 EXPECT_CALL(media_observer(), | 261 EXPECT_CALL(media_observer(), |
| 261 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 262 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
| 262 EXPECT_CALL(media_observer(), | 263 EXPECT_CALL(media_observer(), |
| 263 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 264 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
| 264 EXPECT_CALL(media_observer(), | 265 EXPECT_CALL(media_observer(), |
| 265 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 266 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
| 266 | 267 |
| 268 scoped_refptr<WebRtcAudioRenderer> renderer = new WebRtcAudioRenderer(); | |
|
scherkus (not reviewing)
2012/10/25 17:47:39
remove extra space after =
no longer working on chromium
2012/10/26 09:35:29
Done.
| |
| 267 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 269 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| 268 new WebRtcAudioDeviceImpl()); | 270 new WebRtcAudioDeviceImpl()); |
| 269 webrtc_audio_device->SetSessionId(1); | 271 webrtc_audio_device->SetSessionId(1); |
| 272 EXPECT_TRUE(webrtc_audio_device->SetRenderer(renderer)); | |
| 273 | |
| 270 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 274 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
| 271 ASSERT_TRUE(engine.valid()); | 275 ASSERT_TRUE(engine.valid()); |
| 272 | 276 |
| 273 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 277 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 274 ASSERT_TRUE(base.valid()); | 278 ASSERT_TRUE(base.valid()); |
| 275 int err = base->Init(webrtc_audio_device); | 279 int err = base->Init(webrtc_audio_device); |
| 276 ASSERT_EQ(0, err); | 280 ASSERT_EQ(0, err); |
| 277 | 281 |
| 278 int ch = base->CreateChannel(); | 282 int ch = base->CreateChannel(); |
| 279 EXPECT_NE(-1, ch); | 283 EXPECT_NE(-1, ch); |
| 280 | 284 |
| 281 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); | 285 ScopedWebRTCPtr<webrtc::VoEExternalMedia> external_media(engine.get()); |
| 282 ASSERT_TRUE(external_media.valid()); | 286 ASSERT_TRUE(external_media.valid()); |
| 283 | 287 |
| 284 base::WaitableEvent event(false, false); | 288 base::WaitableEvent event(false, false); |
| 285 scoped_ptr<WebRTCMediaProcessImpl> media_process( | 289 scoped_ptr<WebRTCMediaProcessImpl> media_process( |
| 286 new WebRTCMediaProcessImpl(&event)); | 290 new WebRTCMediaProcessImpl(&event)); |
| 287 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( | 291 EXPECT_EQ(0, external_media->RegisterExternalMediaProcessing( |
| 288 ch, webrtc::kPlaybackPerChannel, *media_process.get())); | 292 ch, webrtc::kPlaybackPerChannel, *media_process.get())); |
| 289 | 293 |
| 290 EXPECT_EQ(0, base->StartPlayout(ch)); | 294 EXPECT_EQ(0, base->StartPlayout(ch)); |
| 295 renderer->Play(); | |
| 291 | 296 |
| 292 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); | 297 EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); |
| 293 WaitForIOThreadCompletion(); | 298 WaitForIOThreadCompletion(); |
| 294 | 299 |
| 295 EXPECT_TRUE(webrtc_audio_device->playing()); | 300 EXPECT_TRUE(webrtc_audio_device->playing()); |
| 296 EXPECT_FALSE(webrtc_audio_device->recording()); | 301 EXPECT_FALSE(webrtc_audio_device->recording()); |
| 297 EXPECT_EQ(ch, media_process->channel_id()); | 302 EXPECT_EQ(ch, media_process->channel_id()); |
| 298 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); | 303 EXPECT_EQ(webrtc::kPlaybackPerChannel, media_process->type()); |
| 299 EXPECT_EQ(80, media_process->packet_size()); | 304 EXPECT_EQ(80, media_process->packet_size()); |
| 300 EXPECT_EQ(8000, media_process->sample_rate()); | 305 EXPECT_EQ(8000, media_process->sample_rate()); |
| 301 | 306 |
| 302 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( | 307 EXPECT_EQ(0, external_media->DeRegisterExternalMediaProcessing( |
| 303 ch, webrtc::kPlaybackPerChannel)); | 308 ch, webrtc::kPlaybackPerChannel)); |
| 304 EXPECT_EQ(0, base->StopPlayout(ch)); | 309 EXPECT_EQ(0, base->StopPlayout(ch)); |
| 310 renderer->Stop(); | |
| 305 | 311 |
| 306 EXPECT_EQ(0, base->DeleteChannel(ch)); | 312 EXPECT_EQ(0, base->DeleteChannel(ch)); |
| 307 EXPECT_EQ(0, base->Terminate()); | 313 EXPECT_EQ(0, base->Terminate()); |
| 308 } | 314 } |
| 309 | 315 |
| 310 // Verify that a call to webrtc::VoEBase::StartRecording() starts audio input | 316 // Verify that a call to webrtc::VoEBase::StartRecording() starts audio input |
| 311 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will | 317 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will |
| 312 // be utilized to implement the actual audio path. The test registers a | 318 // be utilized to implement the actual audio path. The test registers a |
| 313 // webrtc::VoEExternalMedia implementation to hijack the input audio and | 319 // webrtc::VoEExternalMedia implementation to hijack the input audio and |
| 314 // verify that streaming starts correctly. An external transport implementation | 320 // verify that streaming starts correctly. An external transport implementation |
| 315 // is also required to ensure that "sending" can start without actually trying | 321 // is also required to ensure that "sending" can start without actually trying |
| 316 // to send encoded packets to the network. Our main interest here is to ensure | 322 // to send encoded packets to the network. Our main interest here is to ensure |
| 317 // that the audio capturing starts as it should. | 323 // that the audio capturing starts as it should. |
| 318 // Disabled when running headless since the bots don't have the required config. | 324 // Disabled when running headless since the bots don't have the required config. |
| 319 TEST_F(WebRTCAudioDeviceTest, StartRecording) { | 325 TEST_F(WebRTCAudioDeviceTest, StartRecording) { |
| 320 if (!has_input_devices_ || !has_output_devices_) { | 326 if (!has_input_devices_ || !has_output_devices_) { |
| 321 LOG(WARNING) << "Missing audio devices."; | 327 LOG(WARNING) << "Missing audio devices."; |
| 322 return; | 328 return; |
| 323 } | 329 } |
| 324 | 330 |
| 325 AudioUtil audio_util; | 331 AudioUtil audio_util; |
| 326 SetAudioUtilCallback(&audio_util); | 332 SetAudioUtilCallback(&audio_util); |
| 327 | 333 |
| 328 if (!HardwareSampleRatesAreValid()) | 334 if (!HardwareSampleRatesAreValid()) |
| 329 return; | 335 return; |
| 330 | 336 |
| 331 // TODO(tommi): extend MediaObserver and MockMediaObserver with support | 337 // TODO(tommi): extend MediaObserver and MockMediaObserver with support |
| 332 // for new interfaces, like OnSetAudioStreamRecording(). When done, add | 338 // for new interfaces, like OnSetAudioStreamRecording(). When done, add |
| 333 // EXPECT_CALL() macros here. | 339 // EXPECT_CALL() macros here. |
| 334 | |
| 335 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 340 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| 336 new WebRtcAudioDeviceImpl()); | 341 new WebRtcAudioDeviceImpl()); |
| 337 webrtc_audio_device->SetSessionId(1); | 342 webrtc_audio_device->SetSessionId(1); |
| 343 | |
|
scherkus (not reviewing)
2012/10/25 17:47:39
remove extra blank line
no longer working on chromium
2012/10/26 09:35:29
Done.
| |
| 344 | |
| 338 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 345 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
| 339 ASSERT_TRUE(engine.valid()); | 346 ASSERT_TRUE(engine.valid()); |
| 340 | 347 |
| 341 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 348 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 342 ASSERT_TRUE(base.valid()); | 349 ASSERT_TRUE(base.valid()); |
| 343 int err = base->Init(webrtc_audio_device); | 350 int err = base->Init(webrtc_audio_device); |
| 344 ASSERT_EQ(0, err); | 351 ASSERT_EQ(0, err); |
| 345 | 352 |
| 346 int ch = base->CreateChannel(); | 353 int ch = base->CreateChannel(); |
| 347 EXPECT_NE(-1, ch); | 354 EXPECT_NE(-1, ch); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 401 | 408 |
| 402 EXPECT_CALL(media_observer(), | 409 EXPECT_CALL(media_observer(), |
| 403 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); | 410 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); |
| 404 EXPECT_CALL(media_observer(), | 411 EXPECT_CALL(media_observer(), |
| 405 OnSetAudioStreamPlaying(_, 1, true)).Times(1); | 412 OnSetAudioStreamPlaying(_, 1, true)).Times(1); |
| 406 EXPECT_CALL(media_observer(), | 413 EXPECT_CALL(media_observer(), |
| 407 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); | 414 OnSetAudioStreamStatus(_, 1, StrEq("closed"))).Times(1); |
| 408 EXPECT_CALL(media_observer(), | 415 EXPECT_CALL(media_observer(), |
| 409 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 416 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
| 410 | 417 |
| 418 scoped_refptr<WebRtcAudioRenderer> renderer = new WebRtcAudioRenderer(); | |
| 419 | |
| 411 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 420 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| 412 new WebRtcAudioDeviceImpl()); | 421 new WebRtcAudioDeviceImpl()); |
| 413 webrtc_audio_device->SetSessionId(1); | 422 webrtc_audio_device->SetSessionId(1); |
| 423 EXPECT_TRUE(webrtc_audio_device->SetRenderer(renderer)); | |
| 414 | 424 |
| 415 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 425 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
| 416 ASSERT_TRUE(engine.valid()); | 426 ASSERT_TRUE(engine.valid()); |
| 417 | 427 |
| 418 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 428 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 419 ASSERT_TRUE(base.valid()); | 429 ASSERT_TRUE(base.valid()); |
| 420 int err = base->Init(webrtc_audio_device); | 430 int err = base->Init(webrtc_audio_device); |
| 421 ASSERT_EQ(0, err); | 431 ASSERT_EQ(0, err); |
| 422 | 432 |
| 423 int ch = base->CreateChannel(); | 433 int ch = base->CreateChannel(); |
| 424 EXPECT_NE(-1, ch); | 434 EXPECT_NE(-1, ch); |
| 425 EXPECT_EQ(0, base->StartPlayout(ch)); | 435 EXPECT_EQ(0, base->StartPlayout(ch)); |
| 436 renderer->Play(); | |
| 426 | 437 |
| 427 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); | 438 ScopedWebRTCPtr<webrtc::VoEFile> file(engine.get()); |
| 428 ASSERT_TRUE(file.valid()); | 439 ASSERT_TRUE(file.valid()); |
| 429 int duration = 0; | 440 int duration = 0; |
| 430 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, | 441 EXPECT_EQ(0, file->GetFileDuration(file_path.c_str(), duration, |
| 431 webrtc::kFileFormatPcm16kHzFile)); | 442 webrtc::kFileFormatPcm16kHzFile)); |
| 432 EXPECT_NE(0, duration); | 443 EXPECT_NE(0, duration); |
| 433 | 444 |
| 434 EXPECT_EQ(0, file->StartPlayingFileLocally(ch, file_path.c_str(), false, | 445 EXPECT_EQ(0, file->StartPlayingFileLocally(ch, file_path.c_str(), false, |
| 435 webrtc::kFileFormatPcm16kHzFile)); | 446 webrtc::kFileFormatPcm16kHzFile)); |
| 436 | 447 |
| 437 // Play 2 seconds worth of audio and then quit. | 448 // Play 2 seconds worth of audio and then quit. |
| 438 message_loop_.PostDelayedTask(FROM_HERE, | 449 message_loop_.PostDelayedTask(FROM_HERE, |
| 439 MessageLoop::QuitClosure(), | 450 MessageLoop::QuitClosure(), |
| 440 base::TimeDelta::FromSeconds(2)); | 451 base::TimeDelta::FromSeconds(2)); |
| 441 message_loop_.Run(); | 452 message_loop_.Run(); |
| 442 | 453 |
| 443 | 454 |
|
scherkus (not reviewing)
2012/10/25 17:47:39
remove extra blank line
no longer working on chromium
2012/10/26 09:35:29
Done.
| |
| 455 renderer->Stop(); | |
| 444 EXPECT_EQ(0, base->StopSend(ch)); | 456 EXPECT_EQ(0, base->StopSend(ch)); |
| 445 EXPECT_EQ(0, base->StopPlayout(ch)); | 457 EXPECT_EQ(0, base->StopPlayout(ch)); |
| 446 EXPECT_EQ(0, base->DeleteChannel(ch)); | 458 EXPECT_EQ(0, base->DeleteChannel(ch)); |
| 447 EXPECT_EQ(0, base->Terminate()); | 459 EXPECT_EQ(0, base->Terminate()); |
| 448 } | 460 } |
| 449 | 461 |
| 450 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback. | 462 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback. |
| 451 // An external transport implementation is utilized to feed back RTP packets | 463 // An external transport implementation is utilized to feed back RTP packets |
| 452 // which are recorded, encoded, packetized into RTP packets and finally | 464 // which are recorded, encoded, packetized into RTP packets and finally |
| 453 // "transmitted". The RTP packets are then fed back into the VoiceEngine | 465 // "transmitted". The RTP packets are then fed back into the VoiceEngine |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 469 | 481 |
| 470 EXPECT_CALL(media_observer(), | 482 EXPECT_CALL(media_observer(), |
| 471 OnSetAudioStreamStatus(_, 1, StrEq("created"))); | 483 OnSetAudioStreamStatus(_, 1, StrEq("created"))); |
| 472 EXPECT_CALL(media_observer(), | 484 EXPECT_CALL(media_observer(), |
| 473 OnSetAudioStreamPlaying(_, 1, true)); | 485 OnSetAudioStreamPlaying(_, 1, true)); |
| 474 EXPECT_CALL(media_observer(), | 486 EXPECT_CALL(media_observer(), |
| 475 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); | 487 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); |
| 476 EXPECT_CALL(media_observer(), | 488 EXPECT_CALL(media_observer(), |
| 477 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); | 489 OnDeleteAudioStream(_, 1)).Times(AnyNumber()); |
| 478 | 490 |
| 491 scoped_refptr<WebRtcAudioRenderer> renderer = new WebRtcAudioRenderer(); | |
| 492 | |
| 479 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 493 scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| 480 new WebRtcAudioDeviceImpl()); | 494 new WebRtcAudioDeviceImpl()); |
| 481 webrtc_audio_device->SetSessionId(1); | 495 webrtc_audio_device->SetSessionId(1); |
| 496 EXPECT_TRUE(webrtc_audio_device->SetRenderer(renderer)); | |
| 497 | |
| 482 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); | 498 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); |
| 483 ASSERT_TRUE(engine.valid()); | 499 ASSERT_TRUE(engine.valid()); |
| 484 | 500 |
| 485 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); | 501 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); |
| 486 ASSERT_TRUE(base.valid()); | 502 ASSERT_TRUE(base.valid()); |
| 487 int err = base->Init(webrtc_audio_device); | 503 int err = base->Init(webrtc_audio_device); |
| 488 ASSERT_EQ(0, err); | 504 ASSERT_EQ(0, err); |
| 489 | 505 |
| 490 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); | 506 ScopedWebRTCPtr<webrtc::VoEAudioProcessing> audio_processing(engine.get()); |
| 491 ASSERT_TRUE(audio_processing.valid()); | 507 ASSERT_TRUE(audio_processing.valid()); |
| 492 bool enabled = false; | 508 bool enabled = false; |
| 493 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; | 509 webrtc::AgcModes agc_mode = webrtc::kAgcDefault; |
| 494 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); | 510 EXPECT_EQ(0, audio_processing->GetAgcStatus(enabled, agc_mode)); |
| 495 EXPECT_TRUE(enabled); | 511 EXPECT_TRUE(enabled); |
| 496 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog); | 512 EXPECT_EQ(agc_mode, webrtc::kAgcAdaptiveAnalog); |
| 497 | 513 |
| 498 int ch = base->CreateChannel(); | 514 int ch = base->CreateChannel(); |
| 499 EXPECT_NE(-1, ch); | 515 EXPECT_NE(-1, ch); |
| 500 | 516 |
| 501 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); | 517 ScopedWebRTCPtr<webrtc::VoENetwork> network(engine.get()); |
| 502 ASSERT_TRUE(network.valid()); | 518 ASSERT_TRUE(network.valid()); |
| 503 scoped_ptr<WebRTCTransportImpl> transport( | 519 scoped_ptr<WebRTCTransportImpl> transport( |
| 504 new WebRTCTransportImpl(network.get())); | 520 new WebRTCTransportImpl(network.get())); |
| 505 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); | 521 EXPECT_EQ(0, network->RegisterExternalTransport(ch, *transport.get())); |
| 506 EXPECT_EQ(0, base->StartPlayout(ch)); | 522 EXPECT_EQ(0, base->StartPlayout(ch)); |
| 507 EXPECT_EQ(0, base->StartSend(ch)); | 523 EXPECT_EQ(0, base->StartSend(ch)); |
| 524 renderer->Play(); | |
| 508 | 525 |
| 509 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; | 526 LOG(INFO) << ">> You should now be able to hear yourself in loopback..."; |
| 510 message_loop_.PostDelayedTask(FROM_HERE, | 527 message_loop_.PostDelayedTask(FROM_HERE, |
| 511 MessageLoop::QuitClosure(), | 528 MessageLoop::QuitClosure(), |
| 512 base::TimeDelta::FromSeconds(2)); | 529 base::TimeDelta::FromSeconds(2)); |
| 513 message_loop_.Run(); | 530 message_loop_.Run(); |
| 514 | 531 |
| 532 renderer->Stop(); | |
| 515 EXPECT_EQ(0, base->StopSend(ch)); | 533 EXPECT_EQ(0, base->StopSend(ch)); |
| 516 EXPECT_EQ(0, base->StopPlayout(ch)); | 534 EXPECT_EQ(0, base->StopPlayout(ch)); |
| 517 | 535 |
| 518 EXPECT_EQ(0, base->DeleteChannel(ch)); | 536 EXPECT_EQ(0, base->DeleteChannel(ch)); |
| 519 EXPECT_EQ(0, base->Terminate()); | 537 EXPECT_EQ(0, base->Terminate()); |
| 520 } | 538 } |
| 521 | 539 |
| 522 } // namespace content | 540 } // namespace content |
| OLD | NEW |