OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2008 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 class FakeAudioSource : public cricket::AudioSource { | 67 class FakeAudioSource : public cricket::AudioSource { |
68 void SetSink(Sink* sink) override {} | 68 void SetSink(Sink* sink) override {} |
69 }; | 69 }; |
70 | 70 |
71 class WebRtcVoiceEngineTestFake : public testing::Test { | 71 class WebRtcVoiceEngineTestFake : public testing::Test { |
72 public: | 72 public: |
73 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} | 73 WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} |
74 | 74 |
75 explicit WebRtcVoiceEngineTestFake(const char* field_trials) | 75 explicit WebRtcVoiceEngineTestFake(const char* field_trials) |
76 : call_(webrtc::Call::Config()), | 76 : call_(webrtc::Call::Config()), |
77 engine_(new FakeVoEWrapper(&voe_)), | 77 engine_(nullptr, new FakeVoEWrapper(&voe_)), |
78 channel_(nullptr), | |
79 override_field_trials_(field_trials) { | 78 override_field_trials_(field_trials) { |
80 send_parameters_.codecs.push_back(kPcmuCodec); | 79 send_parameters_.codecs.push_back(kPcmuCodec); |
81 recv_parameters_.codecs.push_back(kPcmuCodec); | 80 recv_parameters_.codecs.push_back(kPcmuCodec); |
82 } | 81 } |
83 bool SetupEngine() { | 82 bool SetupEngine() { |
84 if (!engine_.Init(rtc::Thread::Current())) { | 83 return engine_.Init(); |
85 return false; | 84 } |
| 85 bool SetupEngineWithChannel() { |
| 86 if (SetupEngine()) { |
| 87 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), |
| 88 cricket::AudioOptions()); |
86 } | 89 } |
87 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
88 cricket::AudioOptions()); | |
89 return (channel_ != nullptr); | 90 return (channel_ != nullptr); |
90 } | 91 } |
91 bool SetupEngineWithRecvStream() { | 92 bool SetupEngineWithRecvStream() { |
92 if (!SetupEngine()) { | 93 if (!SetupEngineWithChannel()) { |
93 return false; | 94 return false; |
94 } | 95 } |
95 return channel_->AddRecvStream( | 96 return channel_->AddRecvStream( |
96 cricket::StreamParams::CreateLegacy(kSsrc1)); | 97 cricket::StreamParams::CreateLegacy(kSsrc1)); |
97 } | 98 } |
98 bool SetupEngineWithSendStream() { | 99 bool SetupEngineWithSendStream() { |
99 if (!SetupEngine()) { | 100 if (!SetupEngineWithChannel()) { |
100 return false; | 101 return false; |
101 } | 102 } |
102 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) { | 103 if (!channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc1))) { |
103 return false; | 104 return false; |
104 } | 105 } |
105 return channel_->SetAudioSend(kSsrc1, true, nullptr, &fake_source_); | 106 return channel_->SetAudioSend(kSsrc1, true, nullptr, &fake_source_); |
106 } | 107 } |
107 void SetupForMultiSendStream() { | 108 void SetupForMultiSendStream() { |
108 EXPECT_TRUE(SetupEngineWithSendStream()); | 109 EXPECT_TRUE(SetupEngineWithSendStream()); |
109 // Remove stream added in Setup. | 110 // Remove stream added in Setup. |
(...skipping 25 matching lines...) Expand all Loading... |
135 | 136 |
136 const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) { | 137 const webrtc::AudioSendStream::Config& GetSendStreamConfig(uint32_t ssrc) { |
137 return GetSendStream(ssrc).GetConfig(); | 138 return GetSendStream(ssrc).GetConfig(); |
138 } | 139 } |
139 | 140 |
140 const webrtc::AudioReceiveStream::Config& GetRecvStreamConfig(uint32_t ssrc) { | 141 const webrtc::AudioReceiveStream::Config& GetRecvStreamConfig(uint32_t ssrc) { |
141 return GetRecvStream(ssrc).GetConfig(); | 142 return GetRecvStream(ssrc).GetConfig(); |
142 } | 143 } |
143 | 144 |
144 void TestInsertDtmf(uint32_t ssrc, bool caller) { | 145 void TestInsertDtmf(uint32_t ssrc, bool caller) { |
145 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 146 EXPECT_TRUE(SetupEngineWithChannel()); |
146 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
147 cricket::AudioOptions()); | |
148 EXPECT_TRUE(channel_ != nullptr); | |
149 if (caller) { | 147 if (caller) { |
150 // If this is a caller, local description will be applied and add the | 148 // If this is a caller, local description will be applied and add the |
151 // send stream. | 149 // send stream. |
152 EXPECT_TRUE(channel_->AddSendStream( | 150 EXPECT_TRUE(channel_->AddSendStream( |
153 cricket::StreamParams::CreateLegacy(kSsrc1))); | 151 cricket::StreamParams::CreateLegacy(kSsrc1))); |
154 } | 152 } |
155 | 153 |
156 // Test we can only InsertDtmf when the other side supports telephone-event. | 154 // Test we can only InsertDtmf when the other side supports telephone-event. |
157 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 155 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
158 channel_->SetSend(true); | 156 channel_->SetSend(true); |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 EXPECT_EQ(info.decoding_plc, stats.decoding_plc); | 392 EXPECT_EQ(info.decoding_plc, stats.decoding_plc); |
395 EXPECT_EQ(info.decoding_cng, stats.decoding_cng); | 393 EXPECT_EQ(info.decoding_cng, stats.decoding_cng); |
396 EXPECT_EQ(info.decoding_plc_cng, stats.decoding_plc_cng); | 394 EXPECT_EQ(info.decoding_plc_cng, stats.decoding_plc_cng); |
397 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); | 395 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); |
398 } | 396 } |
399 | 397 |
400 protected: | 398 protected: |
401 cricket::FakeCall call_; | 399 cricket::FakeCall call_; |
402 cricket::FakeWebRtcVoiceEngine voe_; | 400 cricket::FakeWebRtcVoiceEngine voe_; |
403 cricket::WebRtcVoiceEngine engine_; | 401 cricket::WebRtcVoiceEngine engine_; |
404 cricket::VoiceMediaChannel* channel_; | 402 cricket::VoiceMediaChannel* channel_ = nullptr; |
405 cricket::AudioSendParameters send_parameters_; | 403 cricket::AudioSendParameters send_parameters_; |
406 cricket::AudioRecvParameters recv_parameters_; | 404 cricket::AudioRecvParameters recv_parameters_; |
407 FakeAudioSource fake_source_; | 405 FakeAudioSource fake_source_; |
408 | 406 |
409 private: | 407 private: |
410 webrtc::test::ScopedFieldTrials override_field_trials_; | 408 webrtc::test::ScopedFieldTrials override_field_trials_; |
411 }; | 409 }; |
412 | 410 |
413 // Tests that our stub library "works". | 411 // Tests that our stub library "works". |
414 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { | 412 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { |
415 EXPECT_FALSE(voe_.IsInited()); | 413 EXPECT_FALSE(voe_.IsInited()); |
416 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 414 EXPECT_TRUE(engine_.Init()); |
417 EXPECT_TRUE(voe_.IsInited()); | 415 EXPECT_TRUE(voe_.IsInited()); |
418 engine_.Terminate(); | 416 engine_.Terminate(); |
419 EXPECT_FALSE(voe_.IsInited()); | 417 EXPECT_FALSE(voe_.IsInited()); |
420 } | 418 } |
421 | 419 |
422 // Tests that we can create and destroy a channel. | 420 // Tests that we can create and destroy a channel. |
423 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { | 421 TEST_F(WebRtcVoiceEngineTestFake, CreateChannel) { |
424 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 422 EXPECT_TRUE(SetupEngineWithChannel()); |
425 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
426 cricket::AudioOptions()); | |
427 EXPECT_TRUE(channel_ != nullptr); | |
428 } | 423 } |
429 | 424 |
430 // Tests that the list of supported codecs is created properly and ordered | 425 // Tests that the list of supported codecs is created properly and ordered |
431 // correctly | 426 // correctly |
432 TEST_F(WebRtcVoiceEngineTestFake, CodecPreference) { | 427 TEST_F(WebRtcVoiceEngineTestFake, CodecPreference) { |
| 428 EXPECT_TRUE(SetupEngine()); |
433 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); | 429 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); |
434 ASSERT_FALSE(codecs.empty()); | 430 ASSERT_FALSE(codecs.empty()); |
435 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); | 431 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); |
436 EXPECT_EQ(48000, codecs[0].clockrate); | 432 EXPECT_EQ(48000, codecs[0].clockrate); |
437 EXPECT_EQ(2, codecs[0].channels); | 433 EXPECT_EQ(2, codecs[0].channels); |
438 EXPECT_EQ(64000, codecs[0].bitrate); | 434 EXPECT_EQ(64000, codecs[0].bitrate); |
439 int pref = codecs[0].preference; | 435 int pref = codecs[0].preference; |
440 for (size_t i = 1; i < codecs.size(); ++i) { | 436 for (size_t i = 1; i < codecs.size(); ++i) { |
441 EXPECT_GT(pref, codecs[i].preference); | 437 EXPECT_GT(pref, codecs[i].preference); |
442 pref = codecs[i].preference; | 438 pref = codecs[i].preference; |
443 } | 439 } |
444 } | 440 } |
445 | 441 |
446 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { | 442 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { |
| 443 EXPECT_TRUE(SetupEngine()); |
447 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); | 444 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); |
448 bool opus_found = false; | 445 bool opus_found = false; |
449 for (cricket::AudioCodec codec : codecs) { | 446 for (cricket::AudioCodec codec : codecs) { |
450 if (codec.name == "opus") { | 447 if (codec.name == "opus") { |
451 EXPECT_TRUE(HasTransportCc(codec)); | 448 EXPECT_TRUE(HasTransportCc(codec)); |
452 opus_found = true; | 449 opus_found = true; |
453 } | 450 } |
454 } | 451 } |
455 EXPECT_TRUE(opus_found); | 452 EXPECT_TRUE(opus_found); |
456 } | 453 } |
(...skipping 30 matching lines...) Expand all Loading... |
487 // Find ISAC with an explicit bitrate. | 484 // Find ISAC with an explicit bitrate. |
488 codec = kIsacCodec; | 485 codec = kIsacCodec; |
489 codec.bitrate = 32000; | 486 codec.bitrate = 32000; |
490 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | 487 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); |
491 EXPECT_EQ(codec.id, codec_inst.pltype); | 488 EXPECT_EQ(codec.id, codec_inst.pltype); |
492 EXPECT_EQ(32000, codec_inst.rate); | 489 EXPECT_EQ(32000, codec_inst.rate); |
493 } | 490 } |
494 | 491 |
495 // Test that we set our inbound codecs properly, including changing PT. | 492 // Test that we set our inbound codecs properly, including changing PT. |
496 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 493 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
497 EXPECT_TRUE(SetupEngine()); | 494 EXPECT_TRUE(SetupEngineWithChannel()); |
498 cricket::AudioRecvParameters parameters; | 495 cricket::AudioRecvParameters parameters; |
499 parameters.codecs.push_back(kIsacCodec); | 496 parameters.codecs.push_back(kIsacCodec); |
500 parameters.codecs.push_back(kPcmuCodec); | 497 parameters.codecs.push_back(kPcmuCodec); |
501 parameters.codecs.push_back(kTelephoneEventCodec); | 498 parameters.codecs.push_back(kTelephoneEventCodec); |
502 parameters.codecs[0].id = 106; // collide with existing telephone-event | 499 parameters.codecs[0].id = 106; // collide with existing telephone-event |
503 parameters.codecs[2].id = 126; | 500 parameters.codecs[2].id = 126; |
504 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 501 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
505 EXPECT_TRUE(channel_->AddRecvStream( | 502 EXPECT_TRUE(channel_->AddRecvStream( |
506 cricket::StreamParams::CreateLegacy(kSsrc1))); | 503 cricket::StreamParams::CreateLegacy(kSsrc1))); |
507 int channel_num = voe_.GetLastChannel(); | 504 int channel_num = voe_.GetLastChannel(); |
508 webrtc::CodecInst gcodec; | 505 webrtc::CodecInst gcodec; |
509 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 506 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
510 gcodec.plfreq = 16000; | 507 gcodec.plfreq = 16000; |
511 gcodec.channels = 1; | 508 gcodec.channels = 1; |
512 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 509 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
513 EXPECT_EQ(106, gcodec.pltype); | 510 EXPECT_EQ(106, gcodec.pltype); |
514 EXPECT_STREQ("ISAC", gcodec.plname); | 511 EXPECT_STREQ("ISAC", gcodec.plname); |
515 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); | 512 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); |
516 gcodec.plfreq = 8000; | 513 gcodec.plfreq = 8000; |
517 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 514 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
518 EXPECT_EQ(126, gcodec.pltype); | 515 EXPECT_EQ(126, gcodec.pltype); |
519 EXPECT_STREQ("telephone-event", gcodec.plname); | 516 EXPECT_STREQ("telephone-event", gcodec.plname); |
520 } | 517 } |
521 | 518 |
522 // Test that we fail to set an unknown inbound codec. | 519 // Test that we fail to set an unknown inbound codec. |
523 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) { | 520 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) { |
524 EXPECT_TRUE(SetupEngine()); | 521 EXPECT_TRUE(SetupEngineWithChannel()); |
525 cricket::AudioRecvParameters parameters; | 522 cricket::AudioRecvParameters parameters; |
526 parameters.codecs.push_back(kIsacCodec); | 523 parameters.codecs.push_back(kIsacCodec); |
527 parameters.codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1, 0)); | 524 parameters.codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1, 0)); |
528 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); | 525 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
529 } | 526 } |
530 | 527 |
531 // Test that we fail if we have duplicate types in the inbound list. | 528 // Test that we fail if we have duplicate types in the inbound list. |
532 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsDuplicatePayloadType) { | 529 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsDuplicatePayloadType) { |
533 EXPECT_TRUE(SetupEngine()); | 530 EXPECT_TRUE(SetupEngineWithChannel()); |
534 cricket::AudioRecvParameters parameters; | 531 cricket::AudioRecvParameters parameters; |
535 parameters.codecs.push_back(kIsacCodec); | 532 parameters.codecs.push_back(kIsacCodec); |
536 parameters.codecs.push_back(kCn16000Codec); | 533 parameters.codecs.push_back(kCn16000Codec); |
537 parameters.codecs[1].id = kIsacCodec.id; | 534 parameters.codecs[1].id = kIsacCodec.id; |
538 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); | 535 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
539 } | 536 } |
540 | 537 |
541 // Test that we can decode OPUS without stereo parameters. | 538 // Test that we can decode OPUS without stereo parameters. |
542 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { | 539 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpusNoStereo) { |
543 EXPECT_TRUE(SetupEngine()); | 540 EXPECT_TRUE(SetupEngineWithChannel()); |
544 cricket::AudioRecvParameters parameters; | 541 cricket::AudioRecvParameters parameters; |
545 parameters.codecs.push_back(kIsacCodec); | 542 parameters.codecs.push_back(kIsacCodec); |
546 parameters.codecs.push_back(kPcmuCodec); | 543 parameters.codecs.push_back(kPcmuCodec); |
547 parameters.codecs.push_back(kOpusCodec); | 544 parameters.codecs.push_back(kOpusCodec); |
548 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 545 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
549 EXPECT_TRUE(channel_->AddRecvStream( | 546 EXPECT_TRUE(channel_->AddRecvStream( |
550 cricket::StreamParams::CreateLegacy(kSsrc1))); | 547 cricket::StreamParams::CreateLegacy(kSsrc1))); |
551 int channel_num = voe_.GetLastChannel(); | 548 int channel_num = voe_.GetLastChannel(); |
552 webrtc::CodecInst opus; | 549 webrtc::CodecInst opus; |
553 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 550 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
554 // Even without stereo parameters, recv codecs still specify channels = 2. | 551 // Even without stereo parameters, recv codecs still specify channels = 2. |
555 EXPECT_EQ(2, opus.channels); | 552 EXPECT_EQ(2, opus.channels); |
556 EXPECT_EQ(111, opus.pltype); | 553 EXPECT_EQ(111, opus.pltype); |
557 EXPECT_STREQ("opus", opus.plname); | 554 EXPECT_STREQ("opus", opus.plname); |
558 opus.pltype = 0; | 555 opus.pltype = 0; |
559 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); | 556 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, opus)); |
560 EXPECT_EQ(111, opus.pltype); | 557 EXPECT_EQ(111, opus.pltype); |
561 } | 558 } |
562 | 559 |
563 // Test that we can decode OPUS with stereo = 0. | 560 // Test that we can decode OPUS with stereo = 0. |
564 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { | 561 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus0Stereo) { |
565 EXPECT_TRUE(SetupEngine()); | 562 EXPECT_TRUE(SetupEngineWithChannel()); |
566 cricket::AudioRecvParameters parameters; | 563 cricket::AudioRecvParameters parameters; |
567 parameters.codecs.push_back(kIsacCodec); | 564 parameters.codecs.push_back(kIsacCodec); |
568 parameters.codecs.push_back(kPcmuCodec); | 565 parameters.codecs.push_back(kPcmuCodec); |
569 parameters.codecs.push_back(kOpusCodec); | 566 parameters.codecs.push_back(kOpusCodec); |
570 parameters.codecs[2].params["stereo"] = "0"; | 567 parameters.codecs[2].params["stereo"] = "0"; |
571 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 568 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
572 EXPECT_TRUE(channel_->AddRecvStream( | 569 EXPECT_TRUE(channel_->AddRecvStream( |
573 cricket::StreamParams::CreateLegacy(kSsrc1))); | 570 cricket::StreamParams::CreateLegacy(kSsrc1))); |
574 int channel_num2 = voe_.GetLastChannel(); | 571 int channel_num2 = voe_.GetLastChannel(); |
575 webrtc::CodecInst opus; | 572 webrtc::CodecInst opus; |
576 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 573 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
577 // Even when stereo is off, recv codecs still specify channels = 2. | 574 // Even when stereo is off, recv codecs still specify channels = 2. |
578 EXPECT_EQ(2, opus.channels); | 575 EXPECT_EQ(2, opus.channels); |
579 EXPECT_EQ(111, opus.pltype); | 576 EXPECT_EQ(111, opus.pltype); |
580 EXPECT_STREQ("opus", opus.plname); | 577 EXPECT_STREQ("opus", opus.plname); |
581 opus.pltype = 0; | 578 opus.pltype = 0; |
582 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 579 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
583 EXPECT_EQ(111, opus.pltype); | 580 EXPECT_EQ(111, opus.pltype); |
584 } | 581 } |
585 | 582 |
586 // Test that we can decode OPUS with stereo = 1. | 583 // Test that we can decode OPUS with stereo = 1. |
587 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { | 584 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithOpus1Stereo) { |
588 EXPECT_TRUE(SetupEngine()); | 585 EXPECT_TRUE(SetupEngineWithChannel()); |
589 cricket::AudioRecvParameters parameters; | 586 cricket::AudioRecvParameters parameters; |
590 parameters.codecs.push_back(kIsacCodec); | 587 parameters.codecs.push_back(kIsacCodec); |
591 parameters.codecs.push_back(kPcmuCodec); | 588 parameters.codecs.push_back(kPcmuCodec); |
592 parameters.codecs.push_back(kOpusCodec); | 589 parameters.codecs.push_back(kOpusCodec); |
593 parameters.codecs[2].params["stereo"] = "1"; | 590 parameters.codecs[2].params["stereo"] = "1"; |
594 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 591 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
595 EXPECT_TRUE(channel_->AddRecvStream( | 592 EXPECT_TRUE(channel_->AddRecvStream( |
596 cricket::StreamParams::CreateLegacy(kSsrc1))); | 593 cricket::StreamParams::CreateLegacy(kSsrc1))); |
597 int channel_num2 = voe_.GetLastChannel(); | 594 int channel_num2 = voe_.GetLastChannel(); |
598 webrtc::CodecInst opus; | 595 webrtc::CodecInst opus; |
599 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); | 596 cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &opus); |
600 EXPECT_EQ(2, opus.channels); | 597 EXPECT_EQ(2, opus.channels); |
601 EXPECT_EQ(111, opus.pltype); | 598 EXPECT_EQ(111, opus.pltype); |
602 EXPECT_STREQ("opus", opus.plname); | 599 EXPECT_STREQ("opus", opus.plname); |
603 opus.pltype = 0; | 600 opus.pltype = 0; |
604 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 601 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
605 EXPECT_EQ(111, opus.pltype); | 602 EXPECT_EQ(111, opus.pltype); |
606 } | 603 } |
607 | 604 |
608 // Test that changes to recv codecs are applied to all streams. | 605 // Test that changes to recv codecs are applied to all streams. |
609 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { | 606 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
610 EXPECT_TRUE(SetupEngine()); | 607 EXPECT_TRUE(SetupEngineWithChannel()); |
611 cricket::AudioRecvParameters parameters; | 608 cricket::AudioRecvParameters parameters; |
612 parameters.codecs.push_back(kIsacCodec); | 609 parameters.codecs.push_back(kIsacCodec); |
613 parameters.codecs.push_back(kPcmuCodec); | 610 parameters.codecs.push_back(kPcmuCodec); |
614 parameters.codecs.push_back(kTelephoneEventCodec); | 611 parameters.codecs.push_back(kTelephoneEventCodec); |
615 parameters.codecs[0].id = 106; // collide with existing telephone-event | 612 parameters.codecs[0].id = 106; // collide with existing telephone-event |
616 parameters.codecs[2].id = 126; | 613 parameters.codecs[2].id = 126; |
617 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 614 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
618 EXPECT_TRUE(channel_->AddRecvStream( | 615 EXPECT_TRUE(channel_->AddRecvStream( |
619 cricket::StreamParams::CreateLegacy(kSsrc1))); | 616 cricket::StreamParams::CreateLegacy(kSsrc1))); |
620 int channel_num2 = voe_.GetLastChannel(); | 617 int channel_num2 = voe_.GetLastChannel(); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 TestSendBandwidth(kPcmuCodec, 0, true, 64000); | 723 TestSendBandwidth(kPcmuCodec, 0, true, 64000); |
727 TestSendBandwidth(kPcmuCodec, 1, false, 64000); | 724 TestSendBandwidth(kPcmuCodec, 1, false, 64000); |
728 TestSendBandwidth(kPcmuCodec, 128000, true, 64000); | 725 TestSendBandwidth(kPcmuCodec, 128000, true, 64000); |
729 TestSendBandwidth(kPcmuCodec, 32000, false, 64000); | 726 TestSendBandwidth(kPcmuCodec, 32000, false, 64000); |
730 TestSendBandwidth(kPcmuCodec, 64000, true, 64000); | 727 TestSendBandwidth(kPcmuCodec, 64000, true, 64000); |
731 TestSendBandwidth(kPcmuCodec, 63999, false, 64000); | 728 TestSendBandwidth(kPcmuCodec, 63999, false, 64000); |
732 TestSendBandwidth(kPcmuCodec, 64001, true, 64000); | 729 TestSendBandwidth(kPcmuCodec, 64001, true, 64000); |
733 } | 730 } |
734 | 731 |
735 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { | 732 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCallee) { |
736 EXPECT_TRUE(SetupEngine()); | 733 EXPECT_TRUE(SetupEngineWithChannel()); |
737 const int kDesiredBitrate = 128000; | 734 const int kDesiredBitrate = 128000; |
738 cricket::AudioSendParameters parameters; | 735 cricket::AudioSendParameters parameters; |
739 parameters.codecs = engine_.codecs(); | 736 parameters.codecs = engine_.codecs(); |
740 parameters.max_bandwidth_bps = kDesiredBitrate; | 737 parameters.max_bandwidth_bps = kDesiredBitrate; |
741 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 738 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
742 | 739 |
743 EXPECT_TRUE(channel_->AddSendStream( | 740 EXPECT_TRUE(channel_->AddSendStream( |
744 cricket::StreamParams::CreateLegacy(kSsrc1))); | 741 cricket::StreamParams::CreateLegacy(kSsrc1))); |
745 | 742 |
746 int channel_num = voe_.GetLastChannel(); | 743 int channel_num = voe_.GetLastChannel(); |
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1292 cricket::AudioSendParameters parameters; | 1289 cricket::AudioSendParameters parameters; |
1293 parameters.codecs.push_back(kOpusCodec); | 1290 parameters.codecs.push_back(kOpusCodec); |
1294 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1291 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1295 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); | 1292 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); |
1296 parameters.codecs[0].params["useinbandfec"] = "1"; | 1293 parameters.codecs[0].params["useinbandfec"] = "1"; |
1297 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1294 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1298 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); | 1295 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); |
1299 } | 1296 } |
1300 | 1297 |
1301 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | 1298 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
1302 EXPECT_TRUE(SetupEngine()); | 1299 EXPECT_TRUE(SetupEngineWithChannel()); |
1303 cricket::AudioSendParameters send_parameters; | 1300 cricket::AudioSendParameters send_parameters; |
1304 send_parameters.codecs.push_back(kOpusCodec); | 1301 send_parameters.codecs.push_back(kOpusCodec); |
1305 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | 1302 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
1306 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); | 1303 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); |
1307 | 1304 |
1308 cricket::AudioRecvParameters recv_parameters; | 1305 cricket::AudioRecvParameters recv_parameters; |
1309 recv_parameters.codecs.push_back(kIsacCodec); | 1306 recv_parameters.codecs.push_back(kIsacCodec); |
1310 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | 1307 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
1311 EXPECT_TRUE( | 1308 EXPECT_TRUE( |
1312 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | 1309 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1723 EXPECT_STREQ("ISAC", gcodec.plname); | 1720 EXPECT_STREQ("ISAC", gcodec.plname); |
1724 EXPECT_TRUE(voe_.GetVAD(channel_num)); | 1721 EXPECT_TRUE(voe_.GetVAD(channel_num)); |
1725 EXPECT_FALSE(voe_.GetRED(channel_num)); | 1722 EXPECT_FALSE(voe_.GetRED(channel_num)); |
1726 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); | 1723 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); |
1727 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); | 1724 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); |
1728 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1725 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1729 } | 1726 } |
1730 | 1727 |
1731 // Test that we set VAD and DTMF types correctly as callee. | 1728 // Test that we set VAD and DTMF types correctly as callee. |
1732 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 1729 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
1733 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 1730 EXPECT_TRUE(SetupEngineWithChannel()); |
1734 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
1735 cricket::AudioOptions()); | |
1736 EXPECT_TRUE(channel_ != nullptr); | |
1737 | |
1738 cricket::AudioSendParameters parameters; | 1731 cricket::AudioSendParameters parameters; |
1739 parameters.codecs.push_back(kIsacCodec); | 1732 parameters.codecs.push_back(kIsacCodec); |
1740 parameters.codecs.push_back(kPcmuCodec); | 1733 parameters.codecs.push_back(kPcmuCodec); |
1741 // TODO(juberti): cn 32000 | 1734 // TODO(juberti): cn 32000 |
1742 parameters.codecs.push_back(kCn16000Codec); | 1735 parameters.codecs.push_back(kCn16000Codec); |
1743 parameters.codecs.push_back(kCn8000Codec); | 1736 parameters.codecs.push_back(kCn8000Codec); |
1744 parameters.codecs.push_back(kTelephoneEventCodec); | 1737 parameters.codecs.push_back(kTelephoneEventCodec); |
1745 parameters.codecs.push_back(kRedCodec); | 1738 parameters.codecs.push_back(kRedCodec); |
1746 parameters.codecs[0].id = 96; | 1739 parameters.codecs[0].id = 96; |
1747 parameters.codecs[2].id = 97; // wideband CN | 1740 parameters.codecs[2].id = 97; // wideband CN |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1841 webrtc::CodecInst gcodec; | 1834 webrtc::CodecInst gcodec; |
1842 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); | 1835 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); |
1843 EXPECT_EQ(96, gcodec.pltype); | 1836 EXPECT_EQ(96, gcodec.pltype); |
1844 EXPECT_STREQ("ISAC", gcodec.plname); | 1837 EXPECT_STREQ("ISAC", gcodec.plname); |
1845 EXPECT_TRUE(voe_.GetRED(channel_num)); | 1838 EXPECT_TRUE(voe_.GetRED(channel_num)); |
1846 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); | 1839 EXPECT_EQ(127, voe_.GetSendREDPayloadType(channel_num)); |
1847 } | 1840 } |
1848 | 1841 |
1849 // Test that we set up RED correctly as callee. | 1842 // Test that we set up RED correctly as callee. |
1850 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCallee) { | 1843 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsREDAsCallee) { |
1851 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 1844 EXPECT_TRUE(SetupEngineWithChannel()); |
1852 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
1853 cricket::AudioOptions()); | |
1854 EXPECT_TRUE(channel_ != nullptr); | |
1855 | |
1856 cricket::AudioSendParameters parameters; | 1845 cricket::AudioSendParameters parameters; |
1857 parameters.codecs.push_back(kRedCodec); | 1846 parameters.codecs.push_back(kRedCodec); |
1858 parameters.codecs.push_back(kIsacCodec); | 1847 parameters.codecs.push_back(kIsacCodec); |
1859 parameters.codecs.push_back(kPcmuCodec); | 1848 parameters.codecs.push_back(kPcmuCodec); |
1860 parameters.codecs[0].id = 127; | 1849 parameters.codecs[0].id = 127; |
1861 parameters.codecs[0].params[""] = "96/96"; | 1850 parameters.codecs[0].params[""] = "96/96"; |
1862 parameters.codecs[1].id = 96; | 1851 parameters.codecs[1].id = 96; |
1863 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1852 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1864 EXPECT_TRUE(channel_->AddSendStream( | 1853 EXPECT_TRUE(channel_->AddSendStream( |
1865 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1854 cricket::StreamParams::CreateLegacy(kSsrc1))); |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2382 EXPECT_TRUE(SetupEngineWithSendStream()); | 2371 EXPECT_TRUE(SetupEngineWithSendStream()); |
2383 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); | 2372 EXPECT_TRUE(call_.GetAudioSendStream(kSsrc1)); |
2384 EXPECT_TRUE(channel_->AddRecvStream( | 2373 EXPECT_TRUE(channel_->AddRecvStream( |
2385 cricket::StreamParams::CreateLegacy(kSsrc2))); | 2374 cricket::StreamParams::CreateLegacy(kSsrc2))); |
2386 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); | 2375 EXPECT_EQ(kSsrc1, GetRecvStreamConfig(kSsrc2).rtp.local_ssrc); |
2387 } | 2376 } |
2388 | 2377 |
2389 // Test that the local SSRC is the same on sending and receiving channels if the | 2378 // Test that the local SSRC is the same on sending and receiving channels if the |
2390 // receive channel is created before the send channel. | 2379 // receive channel is created before the send channel. |
2391 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { | 2380 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcAfterCreatingReceiveChannel) { |
2392 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 2381 EXPECT_TRUE(SetupEngineWithChannel()); |
2393 channel_ = engine_.CreateChannel(&call_, cricket::MediaConfig(), | |
2394 cricket::AudioOptions()); | |
2395 | |
2396 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2382 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2397 int receive_channel_num = voe_.GetLastChannel(); | 2383 int receive_channel_num = voe_.GetLastChannel(); |
2398 EXPECT_TRUE(channel_->AddSendStream( | 2384 EXPECT_TRUE(channel_->AddSendStream( |
2399 cricket::StreamParams::CreateLegacy(1234))); | 2385 cricket::StreamParams::CreateLegacy(1234))); |
2400 | 2386 |
2401 EXPECT_TRUE(call_.GetAudioSendStream(1234)); | 2387 EXPECT_TRUE(call_.GetAudioSendStream(1234)); |
2402 EXPECT_EQ(1234U, voe_.GetLocalSSRC(receive_channel_num)); | 2388 EXPECT_EQ(1234U, voe_.GetLocalSSRC(receive_channel_num)); |
2403 } | 2389 } |
2404 | 2390 |
2405 // Test that we can properly receive packets. | 2391 // Test that we can properly receive packets. |
2406 TEST_F(WebRtcVoiceEngineTestFake, Recv) { | 2392 TEST_F(WebRtcVoiceEngineTestFake, Recv) { |
2407 EXPECT_TRUE(SetupEngine()); | 2393 EXPECT_TRUE(SetupEngineWithChannel()); |
2408 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2394 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2409 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2395 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2410 int channel_num = voe_.GetLastChannel(); | 2396 int channel_num = voe_.GetLastChannel(); |
2411 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, sizeof(kPcmuFrame))); | 2397 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, sizeof(kPcmuFrame))); |
2412 } | 2398 } |
2413 | 2399 |
2414 // Test that we can properly receive packets on multiple streams. | 2400 // Test that we can properly receive packets on multiple streams. |
2415 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { | 2401 TEST_F(WebRtcVoiceEngineTestFake, RecvWithMultipleStreams) { |
2416 EXPECT_TRUE(SetupEngine()); | 2402 EXPECT_TRUE(SetupEngineWithChannel()); |
2417 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2403 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2418 int channel_num1 = voe_.GetLastChannel(); | 2404 int channel_num1 = voe_.GetLastChannel(); |
2419 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); | 2405 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); |
2420 int channel_num2 = voe_.GetLastChannel(); | 2406 int channel_num2 = voe_.GetLastChannel(); |
2421 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); | 2407 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(3))); |
2422 int channel_num3 = voe_.GetLastChannel(); | 2408 int channel_num3 = voe_.GetLastChannel(); |
2423 // Create packets with the right SSRCs. | 2409 // Create packets with the right SSRCs. |
2424 char packets[4][sizeof(kPcmuFrame)]; | 2410 char packets[4][sizeof(kPcmuFrame)]; |
2425 for (size_t i = 0; i < arraysize(packets); ++i) { | 2411 for (size_t i = 0; i < arraysize(packets); ++i) { |
2426 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); | 2412 memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame)); |
(...skipping 24 matching lines...) Expand all Loading... |
2451 EXPECT_TRUE(voe_.CheckPacket(channel_num3, packets[3], sizeof(packets[3]))); | 2437 EXPECT_TRUE(voe_.CheckPacket(channel_num3, packets[3], sizeof(packets[3]))); |
2452 | 2438 |
2453 EXPECT_TRUE(channel_->RemoveRecvStream(3)); | 2439 EXPECT_TRUE(channel_->RemoveRecvStream(3)); |
2454 EXPECT_TRUE(channel_->RemoveRecvStream(2)); | 2440 EXPECT_TRUE(channel_->RemoveRecvStream(2)); |
2455 EXPECT_TRUE(channel_->RemoveRecvStream(1)); | 2441 EXPECT_TRUE(channel_->RemoveRecvStream(1)); |
2456 } | 2442 } |
2457 | 2443 |
2458 // Test that receiving on an unsignalled stream works (default channel will be | 2444 // Test that receiving on an unsignalled stream works (default channel will be |
2459 // created). | 2445 // created). |
2460 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { | 2446 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalled) { |
2461 EXPECT_TRUE(SetupEngine()); | 2447 EXPECT_TRUE(SetupEngineWithChannel()); |
2462 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2448 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2463 int channel_num = voe_.GetLastChannel(); | 2449 int channel_num = voe_.GetLastChannel(); |
2464 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, sizeof(kPcmuFrame))); | 2450 EXPECT_TRUE(voe_.CheckPacket(channel_num, kPcmuFrame, sizeof(kPcmuFrame))); |
2465 } | 2451 } |
2466 | 2452 |
2467 // Test that receiving on an unsignalled stream works (default channel will be | 2453 // Test that receiving on an unsignalled stream works (default channel will be |
2468 // created), and that packets will be forwarded to the default channel | 2454 // created), and that packets will be forwarded to the default channel |
2469 // regardless of their SSRCs. | 2455 // regardless of their SSRCs. |
2470 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) { | 2456 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledWithSsrcSwitch) { |
2471 EXPECT_TRUE(SetupEngine()); | 2457 EXPECT_TRUE(SetupEngineWithChannel()); |
2472 char packet[sizeof(kPcmuFrame)]; | 2458 char packet[sizeof(kPcmuFrame)]; |
2473 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2459 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2474 | 2460 |
2475 // Note that the first unknown SSRC cannot be 0, because we only support | 2461 // Note that the first unknown SSRC cannot be 0, because we only support |
2476 // creating receive streams for SSRC!=0. | 2462 // creating receive streams for SSRC!=0. |
2477 DeliverPacket(packet, sizeof(packet)); | 2463 DeliverPacket(packet, sizeof(packet)); |
2478 int channel_num = voe_.GetLastChannel(); | 2464 int channel_num = voe_.GetLastChannel(); |
2479 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); | 2465 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); |
2480 // Once we have the default channel, SSRC==0 will be ok. | 2466 // Once we have the default channel, SSRC==0 will be ok. |
2481 for (uint32_t ssrc = 0; ssrc < 10; ++ssrc) { | 2467 for (uint32_t ssrc = 0; ssrc < 10; ++ssrc) { |
2482 rtc::SetBE32(&packet[8], ssrc); | 2468 rtc::SetBE32(&packet[8], ssrc); |
2483 DeliverPacket(packet, sizeof(packet)); | 2469 DeliverPacket(packet, sizeof(packet)); |
2484 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); | 2470 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); |
2485 } | 2471 } |
2486 } | 2472 } |
2487 | 2473 |
2488 // Test that a default channel is created even after a signalled stream has been | 2474 // Test that a default channel is created even after a signalled stream has been |
2489 // added, and that this stream will get any packets for unknown SSRCs. | 2475 // added, and that this stream will get any packets for unknown SSRCs. |
2490 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { | 2476 TEST_F(WebRtcVoiceEngineTestFake, RecvUnsignalledAfterSignalled) { |
2491 EXPECT_TRUE(SetupEngine()); | 2477 EXPECT_TRUE(SetupEngineWithChannel()); |
2492 char packet[sizeof(kPcmuFrame)]; | 2478 char packet[sizeof(kPcmuFrame)]; |
2493 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); | 2479 memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame)); |
2494 | 2480 |
2495 // Add a known stream, send packet and verify we got it. | 2481 // Add a known stream, send packet and verify we got it. |
2496 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2482 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2497 int signalled_channel_num = voe_.GetLastChannel(); | 2483 int signalled_channel_num = voe_.GetLastChannel(); |
2498 DeliverPacket(packet, sizeof(packet)); | 2484 DeliverPacket(packet, sizeof(packet)); |
2499 EXPECT_TRUE(voe_.CheckPacket(signalled_channel_num, packet, sizeof(packet))); | 2485 EXPECT_TRUE(voe_.CheckPacket(signalled_channel_num, packet, sizeof(packet))); |
2500 | 2486 |
2501 // Note that the first unknown SSRC cannot be 0, because we only support | 2487 // Note that the first unknown SSRC cannot be 0, because we only support |
2502 // creating receive streams for SSRC!=0. | 2488 // creating receive streams for SSRC!=0. |
2503 rtc::SetBE32(&packet[8], 7011); | 2489 rtc::SetBE32(&packet[8], 7011); |
2504 DeliverPacket(packet, sizeof(packet)); | 2490 DeliverPacket(packet, sizeof(packet)); |
2505 int channel_num = voe_.GetLastChannel(); | 2491 int channel_num = voe_.GetLastChannel(); |
2506 EXPECT_NE(channel_num, signalled_channel_num); | 2492 EXPECT_NE(channel_num, signalled_channel_num); |
2507 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); | 2493 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); |
2508 // Once we have the default channel, SSRC==0 will be ok. | 2494 // Once we have the default channel, SSRC==0 will be ok. |
2509 for (uint32_t ssrc = 0; ssrc < 20; ssrc += 2) { | 2495 for (uint32_t ssrc = 0; ssrc < 20; ssrc += 2) { |
2510 rtc::SetBE32(&packet[8], ssrc); | 2496 rtc::SetBE32(&packet[8], ssrc); |
2511 DeliverPacket(packet, sizeof(packet)); | 2497 DeliverPacket(packet, sizeof(packet)); |
2512 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); | 2498 EXPECT_TRUE(voe_.CheckPacket(channel_num, packet, sizeof(packet))); |
2513 } | 2499 } |
2514 } | 2500 } |
2515 | 2501 |
2516 // Test that we properly handle failures to add a receive stream. | 2502 // Test that we properly handle failures to add a receive stream. |
2517 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamFail) { | 2503 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamFail) { |
2518 EXPECT_TRUE(SetupEngine()); | 2504 EXPECT_TRUE(SetupEngineWithChannel()); |
2519 voe_.set_fail_create_channel(true); | 2505 voe_.set_fail_create_channel(true); |
2520 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); | 2506 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); |
2521 } | 2507 } |
2522 | 2508 |
2523 // Test that we properly handle failures to add a send stream. | 2509 // Test that we properly handle failures to add a send stream. |
2524 TEST_F(WebRtcVoiceEngineTestFake, AddSendStreamFail) { | 2510 TEST_F(WebRtcVoiceEngineTestFake, AddSendStreamFail) { |
2525 EXPECT_TRUE(SetupEngine()); | 2511 EXPECT_TRUE(SetupEngineWithChannel()); |
2526 voe_.set_fail_create_channel(true); | 2512 voe_.set_fail_create_channel(true); |
2527 EXPECT_FALSE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); | 2513 EXPECT_FALSE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2))); |
2528 } | 2514 } |
2529 | 2515 |
2530 // Test that AddRecvStream creates new stream. | 2516 // Test that AddRecvStream creates new stream. |
2531 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream) { | 2517 TEST_F(WebRtcVoiceEngineTestFake, AddRecvStream) { |
2532 EXPECT_TRUE(SetupEngineWithRecvStream()); | 2518 EXPECT_TRUE(SetupEngineWithRecvStream()); |
2533 int channel_num = voe_.GetLastChannel(); | 2519 int channel_num = voe_.GetLastChannel(); |
2534 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2520 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2535 EXPECT_NE(channel_num, voe_.GetLastChannel()); | 2521 EXPECT_NE(channel_num, voe_.GetLastChannel()); |
(...skipping 29 matching lines...) Expand all Loading... |
2565 channel_ = NULL; | 2551 channel_ = NULL; |
2566 EXPECT_EQ(0, voe_.GetNumChannels()); | 2552 EXPECT_EQ(0, voe_.GetNumChannels()); |
2567 } | 2553 } |
2568 | 2554 |
2569 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) { | 2555 TEST_F(WebRtcVoiceEngineTestFake, TestAddRecvStreamFailWithZeroSsrc) { |
2570 EXPECT_TRUE(SetupEngineWithSendStream()); | 2556 EXPECT_TRUE(SetupEngineWithSendStream()); |
2571 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(0))); | 2557 EXPECT_FALSE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(0))); |
2572 } | 2558 } |
2573 | 2559 |
2574 TEST_F(WebRtcVoiceEngineTestFake, TestNoLeakingWhenAddRecvStreamFail) { | 2560 TEST_F(WebRtcVoiceEngineTestFake, TestNoLeakingWhenAddRecvStreamFail) { |
2575 EXPECT_TRUE(SetupEngine()); | 2561 EXPECT_TRUE(SetupEngineWithChannel()); |
2576 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 2562 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
2577 // Manually delete channel to simulate a failure. | 2563 // Manually delete channel to simulate a failure. |
2578 int channel = voe_.GetLastChannel(); | 2564 int channel = voe_.GetLastChannel(); |
2579 EXPECT_EQ(0, voe_.DeleteChannel(channel)); | 2565 EXPECT_EQ(0, voe_.DeleteChannel(channel)); |
2580 // Add recv stream 2 should work. | 2566 // Add recv stream 2 should work. |
2581 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); | 2567 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2))); |
2582 int new_channel = voe_.GetLastChannel(); | 2568 int new_channel = voe_.GetLastChannel(); |
2583 EXPECT_NE(channel, new_channel); | 2569 EXPECT_NE(channel, new_channel); |
2584 // The last created channel is deleted too. | 2570 // The last created channel is deleted too. |
2585 EXPECT_EQ(0, voe_.DeleteChannel(new_channel)); | 2571 EXPECT_EQ(0, voe_.DeleteChannel(new_channel)); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2799 EXPECT_TRUE(typing_detection_enabled); | 2785 EXPECT_TRUE(typing_detection_enabled); |
2800 EXPECT_FALSE(stereo_swapping_enabled); | 2786 EXPECT_FALSE(stereo_swapping_enabled); |
2801 } | 2787 } |
2802 | 2788 |
2803 TEST_F(WebRtcVoiceEngineTestFake, InitDoesNotOverwriteDefaultAgcConfig) { | 2789 TEST_F(WebRtcVoiceEngineTestFake, InitDoesNotOverwriteDefaultAgcConfig) { |
2804 webrtc::AgcConfig set_config = {0}; | 2790 webrtc::AgcConfig set_config = {0}; |
2805 set_config.targetLeveldBOv = 3; | 2791 set_config.targetLeveldBOv = 3; |
2806 set_config.digitalCompressionGaindB = 9; | 2792 set_config.digitalCompressionGaindB = 9; |
2807 set_config.limiterEnable = true; | 2793 set_config.limiterEnable = true; |
2808 EXPECT_EQ(0, voe_.SetAgcConfig(set_config)); | 2794 EXPECT_EQ(0, voe_.SetAgcConfig(set_config)); |
2809 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 2795 EXPECT_TRUE(SetupEngine()); |
2810 | 2796 |
2811 webrtc::AgcConfig config = {0}; | 2797 webrtc::AgcConfig config = {0}; |
2812 EXPECT_EQ(0, voe_.GetAgcConfig(config)); | 2798 EXPECT_EQ(0, voe_.GetAgcConfig(config)); |
2813 EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv); | 2799 EXPECT_EQ(set_config.targetLeveldBOv, config.targetLeveldBOv); |
2814 EXPECT_EQ(set_config.digitalCompressionGaindB, | 2800 EXPECT_EQ(set_config.digitalCompressionGaindB, |
2815 config.digitalCompressionGaindB); | 2801 config.digitalCompressionGaindB); |
2816 EXPECT_EQ(set_config.limiterEnable, config.limiterEnable); | 2802 EXPECT_EQ(set_config.limiterEnable, config.limiterEnable); |
2817 } | 2803 } |
2818 | 2804 |
2819 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) { | 2805 TEST_F(WebRtcVoiceEngineTestFake, SetOptionOverridesViaChannels) { |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2938 config.enable_dscp = false; | 2924 config.enable_dscp = false; |
2939 channel.reset(engine_.CreateChannel(&call_, config, cricket::AudioOptions())); | 2925 channel.reset(engine_.CreateChannel(&call_, config, cricket::AudioOptions())); |
2940 channel->SetInterface(&network_interface); | 2926 channel->SetInterface(&network_interface); |
2941 // Default value when DSCP is disabled should be DSCP_DEFAULT. | 2927 // Default value when DSCP is disabled should be DSCP_DEFAULT. |
2942 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); | 2928 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface.dscp()); |
2943 | 2929 |
2944 channel->SetInterface(nullptr); | 2930 channel->SetInterface(nullptr); |
2945 } | 2931 } |
2946 | 2932 |
2947 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { | 2933 TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelId) { |
2948 EXPECT_TRUE(SetupEngine()); | 2934 EXPECT_TRUE(SetupEngineWithChannel()); |
2949 cricket::WebRtcVoiceMediaChannel* media_channel = | 2935 cricket::WebRtcVoiceMediaChannel* media_channel = |
2950 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 2936 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
2951 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); | 2937 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(0)); |
2952 EXPECT_TRUE(channel_->AddRecvStream( | 2938 EXPECT_TRUE(channel_->AddRecvStream( |
2953 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2939 cricket::StreamParams::CreateLegacy(kSsrc1))); |
2954 int channel_id = voe_.GetLastChannel(); | 2940 int channel_id = voe_.GetLastChannel(); |
2955 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc1)); | 2941 EXPECT_EQ(channel_id, media_channel->GetReceiveChannelId(kSsrc1)); |
2956 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); | 2942 EXPECT_EQ(-1, media_channel->GetReceiveChannelId(kSsrc2)); |
2957 EXPECT_TRUE(channel_->AddRecvStream( | 2943 EXPECT_TRUE(channel_->AddRecvStream( |
2958 cricket::StreamParams::CreateLegacy(kSsrc2))); | 2944 cricket::StreamParams::CreateLegacy(kSsrc2))); |
2959 int channel_id2 = voe_.GetLastChannel(); | 2945 int channel_id2 = voe_.GetLastChannel(); |
2960 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); | 2946 EXPECT_EQ(channel_id2, media_channel->GetReceiveChannelId(kSsrc2)); |
2961 } | 2947 } |
2962 | 2948 |
2963 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { | 2949 TEST_F(WebRtcVoiceEngineTestFake, TestGetSendChannelId) { |
2964 EXPECT_TRUE(SetupEngine()); | 2950 EXPECT_TRUE(SetupEngineWithChannel()); |
2965 cricket::WebRtcVoiceMediaChannel* media_channel = | 2951 cricket::WebRtcVoiceMediaChannel* media_channel = |
2966 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 2952 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
2967 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); | 2953 EXPECT_EQ(-1, media_channel->GetSendChannelId(0)); |
2968 EXPECT_TRUE(channel_->AddSendStream( | 2954 EXPECT_TRUE(channel_->AddSendStream( |
2969 cricket::StreamParams::CreateLegacy(kSsrc1))); | 2955 cricket::StreamParams::CreateLegacy(kSsrc1))); |
2970 int channel_id = voe_.GetLastChannel(); | 2956 int channel_id = voe_.GetLastChannel(); |
2971 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc1)); | 2957 EXPECT_EQ(channel_id, media_channel->GetSendChannelId(kSsrc1)); |
2972 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); | 2958 EXPECT_EQ(-1, media_channel->GetSendChannelId(kSsrc2)); |
2973 EXPECT_TRUE(channel_->AddSendStream( | 2959 EXPECT_TRUE(channel_->AddSendStream( |
2974 cricket::StreamParams::CreateLegacy(kSsrc2))); | 2960 cricket::StreamParams::CreateLegacy(kSsrc2))); |
2975 int channel_id2 = voe_.GetLastChannel(); | 2961 int channel_id2 = voe_.GetLastChannel(); |
2976 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); | 2962 EXPECT_EQ(channel_id2, media_channel->GetSendChannelId(kSsrc2)); |
2977 } | 2963 } |
2978 | 2964 |
2979 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { | 2965 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolume) { |
2980 EXPECT_TRUE(SetupEngine()); | 2966 EXPECT_TRUE(SetupEngineWithChannel()); |
2981 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); | 2967 EXPECT_FALSE(channel_->SetOutputVolume(kSsrc2, 0.5)); |
2982 cricket::StreamParams stream; | 2968 cricket::StreamParams stream; |
2983 stream.ssrcs.push_back(kSsrc2); | 2969 stream.ssrcs.push_back(kSsrc2); |
2984 EXPECT_TRUE(channel_->AddRecvStream(stream)); | 2970 EXPECT_TRUE(channel_->AddRecvStream(stream)); |
2985 int channel_id = voe_.GetLastChannel(); | 2971 int channel_id = voe_.GetLastChannel(); |
2986 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); | 2972 EXPECT_TRUE(channel_->SetOutputVolume(kSsrc2, 3)); |
2987 float scale = 0; | 2973 float scale = 0; |
2988 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); | 2974 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); |
2989 EXPECT_DOUBLE_EQ(3, scale); | 2975 EXPECT_DOUBLE_EQ(3, scale); |
2990 } | 2976 } |
2991 | 2977 |
2992 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { | 2978 TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeDefaultRecvStream) { |
2993 EXPECT_TRUE(SetupEngine()); | 2979 EXPECT_TRUE(SetupEngineWithChannel()); |
2994 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); | 2980 EXPECT_TRUE(channel_->SetOutputVolume(0, 2)); |
2995 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 2981 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
2996 int channel_id = voe_.GetLastChannel(); | 2982 int channel_id = voe_.GetLastChannel(); |
2997 float scale = 0; | 2983 float scale = 0; |
2998 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); | 2984 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); |
2999 EXPECT_DOUBLE_EQ(2, scale); | 2985 EXPECT_DOUBLE_EQ(2, scale); |
3000 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); | 2986 EXPECT_TRUE(channel_->SetOutputVolume(0, 3)); |
3001 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); | 2987 EXPECT_EQ(0, voe_.GetChannelOutputVolumeScaling(channel_id, scale)); |
3002 EXPECT_DOUBLE_EQ(3, scale); | 2988 EXPECT_DOUBLE_EQ(3, scale); |
3003 } | 2989 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3141 // default channel can be associated. However, the default is not deletable. | 3127 // default channel can be associated. However, the default is not deletable. |
3142 // So we force the |recv_ch| to associate with a non-default channel. | 3128 // So we force the |recv_ch| to associate with a non-default channel. |
3143 EXPECT_EQ(0, voe_.AssociateSendChannel(recv_ch, send_ch)); | 3129 EXPECT_EQ(0, voe_.AssociateSendChannel(recv_ch, send_ch)); |
3144 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), send_ch); | 3130 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), send_ch); |
3145 | 3131 |
3146 EXPECT_TRUE(channel_->RemoveSendStream(2)); | 3132 EXPECT_TRUE(channel_->RemoveSendStream(2)); |
3147 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1); | 3133 EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1); |
3148 } | 3134 } |
3149 | 3135 |
3150 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { | 3136 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSink) { |
3151 EXPECT_TRUE(SetupEngine()); | 3137 EXPECT_TRUE(SetupEngineWithChannel()); |
3152 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3138 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3153 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3139 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
3154 | 3140 |
3155 // Setting the sink before a recv stream exists should do nothing. | 3141 // Setting the sink before a recv stream exists should do nothing. |
3156 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); | 3142 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_1)); |
3157 EXPECT_TRUE( | 3143 EXPECT_TRUE( |
3158 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | 3144 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); |
3159 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3145 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
3160 | 3146 |
3161 // Now try actually setting the sink. | 3147 // Now try actually setting the sink. |
3162 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); | 3148 channel_->SetRawAudioSink(kSsrc1, std::move(fake_sink_2)); |
3163 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); | 3149 EXPECT_NE(nullptr, GetRecvStream(kSsrc1).sink()); |
3164 | 3150 |
3165 // Now try resetting it. | 3151 // Now try resetting it. |
3166 channel_->SetRawAudioSink(kSsrc1, nullptr); | 3152 channel_->SetRawAudioSink(kSsrc1, nullptr); |
3167 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); | 3153 EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink()); |
3168 } | 3154 } |
3169 | 3155 |
3170 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { | 3156 TEST_F(WebRtcVoiceEngineTestFake, SetRawAudioSinkDefaultRecvStream) { |
3171 EXPECT_TRUE(SetupEngine()); | 3157 EXPECT_TRUE(SetupEngineWithChannel()); |
3172 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); | 3158 std::unique_ptr<FakeAudioSink> fake_sink_1(new FakeAudioSink()); |
3173 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); | 3159 std::unique_ptr<FakeAudioSink> fake_sink_2(new FakeAudioSink()); |
3174 | 3160 |
3175 // Should be able to set a default sink even when no stream exists. | 3161 // Should be able to set a default sink even when no stream exists. |
3176 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); | 3162 channel_->SetRawAudioSink(0, std::move(fake_sink_1)); |
3177 | 3163 |
3178 // Create default channel and ensure it's assigned the default sink. | 3164 // Create default channel and ensure it's assigned the default sink. |
3179 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3165 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3180 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3166 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
3181 | 3167 |
3182 // Try resetting the default sink. | 3168 // Try resetting the default sink. |
3183 channel_->SetRawAudioSink(0, nullptr); | 3169 channel_->SetRawAudioSink(0, nullptr); |
3184 EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); | 3170 EXPECT_EQ(nullptr, GetRecvStream(0x01).sink()); |
3185 | 3171 |
3186 // Try setting the default sink while the default stream exists. | 3172 // Try setting the default sink while the default stream exists. |
3187 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); | 3173 channel_->SetRawAudioSink(0, std::move(fake_sink_2)); |
3188 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3174 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
3189 | 3175 |
3190 // If we remove and add a default stream, it should get the same sink. | 3176 // If we remove and add a default stream, it should get the same sink. |
3191 EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); | 3177 EXPECT_TRUE(channel_->RemoveRecvStream(0x01)); |
3192 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); | 3178 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); |
3193 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); | 3179 EXPECT_NE(nullptr, GetRecvStream(0x01).sink()); |
3194 } | 3180 } |
3195 | 3181 |
3196 // Test that, just like the video channel, the voice channel communicates the | 3182 // Test that, just like the video channel, the voice channel communicates the |
3197 // network state to the call. | 3183 // network state to the call. |
3198 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { | 3184 TEST_F(WebRtcVoiceEngineTestFake, OnReadyToSendSignalsNetworkState) { |
3199 EXPECT_TRUE(SetupEngine()); | 3185 EXPECT_TRUE(SetupEngineWithChannel()); |
3200 | 3186 |
3201 EXPECT_EQ(webrtc::kNetworkUp, | 3187 EXPECT_EQ(webrtc::kNetworkUp, |
3202 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3188 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3203 EXPECT_EQ(webrtc::kNetworkUp, | 3189 EXPECT_EQ(webrtc::kNetworkUp, |
3204 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3190 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3205 | 3191 |
3206 channel_->OnReadyToSend(false); | 3192 channel_->OnReadyToSend(false); |
3207 EXPECT_EQ(webrtc::kNetworkDown, | 3193 EXPECT_EQ(webrtc::kNetworkDown, |
3208 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3194 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3209 EXPECT_EQ(webrtc::kNetworkUp, | 3195 EXPECT_EQ(webrtc::kNetworkUp, |
3210 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3196 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3211 | 3197 |
3212 channel_->OnReadyToSend(true); | 3198 channel_->OnReadyToSend(true); |
3213 EXPECT_EQ(webrtc::kNetworkUp, | 3199 EXPECT_EQ(webrtc::kNetworkUp, |
3214 call_.GetNetworkState(webrtc::MediaType::AUDIO)); | 3200 call_.GetNetworkState(webrtc::MediaType::AUDIO)); |
3215 EXPECT_EQ(webrtc::kNetworkUp, | 3201 EXPECT_EQ(webrtc::kNetworkUp, |
3216 call_.GetNetworkState(webrtc::MediaType::VIDEO)); | 3202 call_.GetNetworkState(webrtc::MediaType::VIDEO)); |
3217 } | 3203 } |
3218 | 3204 |
3219 // Tests that the library initializes and shuts down properly. | 3205 // Tests that the library initializes and shuts down properly. |
3220 TEST(WebRtcVoiceEngineTest, StartupShutdown) { | 3206 TEST(WebRtcVoiceEngineTest, StartupShutdown) { |
3221 cricket::WebRtcVoiceEngine engine; | 3207 cricket::WebRtcVoiceEngine engine(nullptr); |
3222 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3208 EXPECT_TRUE(engine.Init()); |
3223 std::unique_ptr<webrtc::Call> call( | 3209 std::unique_ptr<webrtc::Call> call( |
3224 webrtc::Call::Create(webrtc::Call::Config())); | 3210 webrtc::Call::Create(webrtc::Call::Config())); |
3225 cricket::VoiceMediaChannel* channel = engine.CreateChannel( | 3211 cricket::VoiceMediaChannel* channel = engine.CreateChannel( |
3226 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); | 3212 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); |
3227 EXPECT_TRUE(channel != nullptr); | 3213 EXPECT_TRUE(channel != nullptr); |
3228 delete channel; | 3214 delete channel; |
3229 engine.Terminate(); | 3215 engine.Terminate(); |
3230 | 3216 |
3231 // Reinit to catch regression where VoiceEngineObserver reference is lost | 3217 // Reinit to catch regression where VoiceEngineObserver reference is lost |
3232 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3218 EXPECT_TRUE(engine.Init()); |
3233 engine.Terminate(); | 3219 engine.Terminate(); |
3234 } | 3220 } |
3235 | 3221 |
3236 // Tests that the library is configured with the codecs we want. | 3222 // Tests that the library is configured with the codecs we want. |
3237 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { | 3223 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { |
3238 // Check codecs by name. | 3224 // Check codecs by name. |
3239 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3225 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3240 cricket::AudioCodec(96, "OPUS", 48000, 0, 2, 0), nullptr)); | 3226 cricket::AudioCodec(96, "OPUS", 48000, 0, 2, 0), nullptr)); |
3241 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3227 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3242 cricket::AudioCodec(96, "ISAC", 16000, 0, 1, 0), nullptr)); | 3228 cricket::AudioCodec(96, "ISAC", 16000, 0, 1, 0), nullptr)); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3281 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3267 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3282 cricket::AudioCodec(88, "", 0, 0, 1, 0), nullptr)); | 3268 cricket::AudioCodec(88, "", 0, 0, 1, 0), nullptr)); |
3283 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3269 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3284 cricket::AudioCodec(0, "", 0, 0, 2, 0), nullptr)); | 3270 cricket::AudioCodec(0, "", 0, 0, 2, 0), nullptr)); |
3285 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3271 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3286 cricket::AudioCodec(0, "", 5000, 0, 1, 0), nullptr)); | 3272 cricket::AudioCodec(0, "", 5000, 0, 1, 0), nullptr)); |
3287 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3273 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3288 cricket::AudioCodec(0, "", 0, 5000, 1, 0), nullptr)); | 3274 cricket::AudioCodec(0, "", 0, 5000, 1, 0), nullptr)); |
3289 | 3275 |
3290 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. | 3276 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. |
3291 cricket::WebRtcVoiceEngine engine; | 3277 cricket::WebRtcVoiceEngine engine(nullptr); |
3292 for (std::vector<cricket::AudioCodec>::const_iterator it = | 3278 for (std::vector<cricket::AudioCodec>::const_iterator it = |
3293 engine.codecs().begin(); it != engine.codecs().end(); ++it) { | 3279 engine.codecs().begin(); it != engine.codecs().end(); ++it) { |
3294 if (it->name == "CN" && it->clockrate == 16000) { | 3280 if (it->name == "CN" && it->clockrate == 16000) { |
3295 EXPECT_EQ(105, it->id); | 3281 EXPECT_EQ(105, it->id); |
3296 } else if (it->name == "CN" && it->clockrate == 32000) { | 3282 } else if (it->name == "CN" && it->clockrate == 32000) { |
3297 EXPECT_EQ(106, it->id); | 3283 EXPECT_EQ(106, it->id); |
3298 } else if (it->name == "ISAC" && it->clockrate == 16000) { | 3284 } else if (it->name == "ISAC" && it->clockrate == 16000) { |
3299 EXPECT_EQ(103, it->id); | 3285 EXPECT_EQ(103, it->id); |
3300 } else if (it->name == "ISAC" && it->clockrate == 32000) { | 3286 } else if (it->name == "ISAC" && it->clockrate == 32000) { |
3301 EXPECT_EQ(104, it->id); | 3287 EXPECT_EQ(104, it->id); |
(...skipping 11 matching lines...) Expand all Loading... |
3313 EXPECT_EQ("60", it->params.find("maxptime")->second); | 3299 EXPECT_EQ("60", it->params.find("maxptime")->second); |
3314 ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end()); | 3300 ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end()); |
3315 EXPECT_EQ("1", it->params.find("useinbandfec")->second); | 3301 EXPECT_EQ("1", it->params.find("useinbandfec")->second); |
3316 } | 3302 } |
3317 } | 3303 } |
3318 engine.Terminate(); | 3304 engine.Terminate(); |
3319 } | 3305 } |
3320 | 3306 |
3321 // Tests that VoE supports at least 32 channels | 3307 // Tests that VoE supports at least 32 channels |
3322 TEST(WebRtcVoiceEngineTest, Has32Channels) { | 3308 TEST(WebRtcVoiceEngineTest, Has32Channels) { |
3323 cricket::WebRtcVoiceEngine engine; | 3309 cricket::WebRtcVoiceEngine engine(nullptr); |
3324 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3310 EXPECT_TRUE(engine.Init()); |
3325 std::unique_ptr<webrtc::Call> call( | 3311 std::unique_ptr<webrtc::Call> call( |
3326 webrtc::Call::Create(webrtc::Call::Config())); | 3312 webrtc::Call::Create(webrtc::Call::Config())); |
3327 | 3313 |
3328 cricket::VoiceMediaChannel* channels[32]; | 3314 cricket::VoiceMediaChannel* channels[32]; |
3329 int num_channels = 0; | 3315 int num_channels = 0; |
3330 while (num_channels < arraysize(channels)) { | 3316 while (num_channels < arraysize(channels)) { |
3331 cricket::VoiceMediaChannel* channel = engine.CreateChannel( | 3317 cricket::VoiceMediaChannel* channel = engine.CreateChannel( |
3332 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); | 3318 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); |
3333 if (!channel) | 3319 if (!channel) |
3334 break; | 3320 break; |
3335 channels[num_channels++] = channel; | 3321 channels[num_channels++] = channel; |
3336 } | 3322 } |
3337 | 3323 |
3338 int expected = arraysize(channels); | 3324 int expected = arraysize(channels); |
3339 EXPECT_EQ(expected, num_channels); | 3325 EXPECT_EQ(expected, num_channels); |
3340 | 3326 |
3341 while (num_channels > 0) { | 3327 while (num_channels > 0) { |
3342 delete channels[--num_channels]; | 3328 delete channels[--num_channels]; |
3343 } | 3329 } |
3344 engine.Terminate(); | 3330 engine.Terminate(); |
3345 } | 3331 } |
3346 | 3332 |
3347 // Test that we set our preferred codecs properly. | 3333 // Test that we set our preferred codecs properly. |
3348 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) { | 3334 TEST(WebRtcVoiceEngineTest, SetRecvCodecs) { |
3349 cricket::WebRtcVoiceEngine engine; | 3335 cricket::WebRtcVoiceEngine engine(nullptr); |
3350 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3336 EXPECT_TRUE(engine.Init()); |
3351 std::unique_ptr<webrtc::Call> call( | 3337 std::unique_ptr<webrtc::Call> call( |
3352 webrtc::Call::Create(webrtc::Call::Config())); | 3338 webrtc::Call::Create(webrtc::Call::Config())); |
3353 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), | 3339 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), |
3354 cricket::AudioOptions(), call.get()); | 3340 cricket::AudioOptions(), call.get()); |
3355 cricket::AudioRecvParameters parameters; | 3341 cricket::AudioRecvParameters parameters; |
3356 parameters.codecs = engine.codecs(); | 3342 parameters.codecs = engine.codecs(); |
3357 EXPECT_TRUE(channel.SetRecvParameters(parameters)); | 3343 EXPECT_TRUE(channel.SetRecvParameters(parameters)); |
3358 } | 3344 } |
OLD | NEW |