Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: webrtc/media/engine/webrtcvoiceengine_unittest.cc

Issue 1830213002: Remove WVoE::SetAudioDeviceModule() - it is now set in ctor. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: removed Construct() method Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698