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

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

Issue 2705093002: Injectable audio encoders: WebRtcVoiceEngine and company (Closed)
Patch Set: Rebase. Created 3 years, 8 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 23 matching lines...) Expand all
34 using testing::ContainerEq; 34 using testing::ContainerEq;
35 using testing::Return; 35 using testing::Return;
36 using testing::StrictMock; 36 using testing::StrictMock;
37 37
38 namespace { 38 namespace {
39 39
40 constexpr uint32_t kMaxUnsignaledRecvStreams = 1; 40 constexpr uint32_t kMaxUnsignaledRecvStreams = 1;
41 41
42 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); 42 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1);
43 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); 43 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1);
44 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); 44 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 32000, 2);
45 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); 45 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1);
46 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); 46 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1);
47 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); 47 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1);
48 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); 48 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1);
49 const cricket::AudioCodec 49 const cricket::AudioCodec
50 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); 50 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1);
51 const cricket::AudioCodec 51 const cricket::AudioCodec
52 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); 52 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1);
53 53
54 const uint32_t kSsrc0 = 0; 54 const uint32_t kSsrc0 = 0;
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 return channel_->SetRtpSendParameters(ssrc, parameters); 355 return channel_->SetRtpSendParameters(ssrc, parameters);
356 } 356 }
357 357
358 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { 358 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) {
359 cricket::AudioSendParameters send_parameters; 359 cricket::AudioSendParameters send_parameters;
360 send_parameters.codecs.push_back(codec); 360 send_parameters.codecs.push_back(codec);
361 send_parameters.max_bandwidth_bps = bitrate; 361 send_parameters.max_bandwidth_bps = bitrate;
362 SetSendParameters(send_parameters); 362 SetSendParameters(send_parameters);
363 } 363 }
364 364
365 void CheckSendCodec(int32_t ssrc, 365 void CheckSendCodecBitrate(int32_t ssrc,
366 const char expected_name[], 366 const char expected_name[],
367 int expected_channels, 367 int expected_bitrate) {
368 int expected_bitrate) { 368 const auto& spec = GetSendStreamConfig(ssrc).send_codec_spec;
369 const auto& codec = GetSendStreamConfig(ssrc).send_codec_spec.codec_inst; 369 EXPECT_EQ(expected_name, spec->format.name);
370 EXPECT_STREQ(expected_name, codec.plname); 370 EXPECT_EQ(expected_bitrate, spec->target_bitrate_bps);
371 EXPECT_EQ(expected_channels, codec.channels);
372 EXPECT_EQ(expected_bitrate, codec.rate);
373 } 371 }
374 372
375 int GetOpusMaxPlaybackRate(int32_t ssrc) { 373 rtc::Optional<int> GetCodecBitrate(int32_t ssrc) {
376 return GetSendStreamConfig(ssrc).send_codec_spec.opus_max_playback_rate; 374 return GetSendStreamConfig(ssrc).send_codec_spec->target_bitrate_bps;
377 }
378
379 bool GetOpusDtx(int32_t ssrc) {
380 return GetSendStreamConfig(ssrc).send_codec_spec.enable_opus_dtx;
381 }
382
383 bool GetCodecFec(int32_t ssrc) {
384 return GetSendStreamConfig(ssrc).send_codec_spec.enable_codec_fec;
385 }
386
387 int GetCodecBitrate(int32_t ssrc) {
388 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.rate;
389 }
390
391 int GetCodecPacSize(int32_t ssrc) {
392 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.pacsize;
393 } 375 }
394 376
395 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { 377 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) {
396 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; 378 return GetSendStreamConfig(ssrc).audio_network_adaptor_config;
397 } 379 }
398 380
399 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, 381 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec,
400 int global_max, 382 int global_max,
401 int stream_max, 383 int stream_max,
402 bool expected_result, 384 bool expected_result,
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 GetRecvStreamConfig(kSsrcX); 693 GetRecvStreamConfig(kSsrcX);
712 EXPECT_EQ(kSsrcX, config.rtp.remote_ssrc); 694 EXPECT_EQ(kSsrcX, config.rtp.remote_ssrc);
713 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc); 695 EXPECT_EQ(0xFA17FA17, config.rtp.local_ssrc);
714 EXPECT_FALSE(config.rtp.transport_cc); 696 EXPECT_FALSE(config.rtp.transport_cc);
715 EXPECT_EQ(0u, config.rtp.extensions.size()); 697 EXPECT_EQ(0u, config.rtp.extensions.size());
716 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_), 698 EXPECT_EQ(static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_),
717 config.rtcp_send_transport); 699 config.rtcp_send_transport);
718 EXPECT_EQ("", config.sync_group); 700 EXPECT_EQ("", config.sync_group);
719 } 701 }
720 702
721 // Tests that the list of supported codecs is created properly and ordered
ossu 2017/04/25 11:58:11 A similar test is now in place for BuiltinAudioEnc
722 // correctly (such that opus appears first).
723 // TODO(ossu): This test should move into a separate builtin audio codecs
724 // module.
725 TEST_F(WebRtcVoiceEngineTestFake, CodecOrder) {
726 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs();
727 ASSERT_FALSE(codecs.empty());
728 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str());
729 EXPECT_EQ(48000, codecs[0].clockrate);
730 EXPECT_EQ(2, codecs[0].channels);
731 EXPECT_EQ(64000, codecs[0].bitrate);
732 }
733
734 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { 703 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) {
735 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); 704 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs();
736 bool opus_found = false; 705 bool opus_found = false;
737 for (cricket::AudioCodec codec : codecs) { 706 for (cricket::AudioCodec codec : codecs) {
738 if (codec.name == "opus") { 707 if (codec.name == "opus") {
739 EXPECT_TRUE(HasTransportCc(codec)); 708 EXPECT_TRUE(HasTransportCc(codec));
740 opus_found = true; 709 opus_found = true;
741 } 710 }
742 } 711 }
743 EXPECT_TRUE(opus_found); 712 EXPECT_TRUE(opus_found);
744 } 713 }
745 714
746 // Tests that we can find codecs by name or id, and that we interpret the
ossu 2017/04/25 11:58:11 This one just tests ToCodecInst, which is removed.
747 // clockrate and bitrate fields properly.
748 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) {
749 cricket::AudioCodec codec;
750 webrtc::CodecInst codec_inst;
751 // Find PCMU with explicit clockrate and bitrate.
752 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst));
753 // Find ISAC with explicit clockrate and 0 bitrate.
754 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst));
755 // Find telephone-event with explicit clockrate and 0 bitrate.
756 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec1,
757 &codec_inst));
758 // Find telephone-event with explicit clockrate and 0 bitrate.
759 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec2,
760 &codec_inst));
761 // Find ISAC with a different payload id.
762 codec = kIsacCodec;
763 codec.id = 127;
764 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst));
765 EXPECT_EQ(codec.id, codec_inst.pltype);
766 // Find PCMU with a 0 clockrate.
767 codec = kPcmuCodec;
768 codec.clockrate = 0;
769 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst));
770 EXPECT_EQ(codec.id, codec_inst.pltype);
771 EXPECT_EQ(8000, codec_inst.plfreq);
772 // Find PCMU with a 0 bitrate.
773 codec = kPcmuCodec;
774 codec.bitrate = 0;
775 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst));
776 EXPECT_EQ(codec.id, codec_inst.pltype);
777 EXPECT_EQ(64000, codec_inst.rate);
778 // Find ISAC with an explicit bitrate.
779 codec = kIsacCodec;
780 codec.bitrate = 32000;
781 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst));
782 EXPECT_EQ(codec.id, codec_inst.pltype);
783 EXPECT_EQ(32000, codec_inst.rate);
784 }
785
786 // Test that we set our inbound codecs properly, including changing PT. 715 // Test that we set our inbound codecs properly, including changing PT.
787 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { 716 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) {
788 EXPECT_TRUE(SetupChannel()); 717 EXPECT_TRUE(SetupChannel());
789 cricket::AudioRecvParameters parameters; 718 cricket::AudioRecvParameters parameters;
790 parameters.codecs.push_back(kIsacCodec); 719 parameters.codecs.push_back(kIsacCodec);
791 parameters.codecs.push_back(kPcmuCodec); 720 parameters.codecs.push_back(kPcmuCodec);
792 parameters.codecs.push_back(kTelephoneEventCodec1); 721 parameters.codecs.push_back(kTelephoneEventCodec1);
793 parameters.codecs.push_back(kTelephoneEventCodec2); 722 parameters.codecs.push_back(kTelephoneEventCodec2);
794 parameters.codecs[0].id = 106; // collide with existing CN 32k 723 parameters.codecs[0].id = 106; // collide with existing CN 32k
795 parameters.codecs[2].id = 126; 724 parameters.codecs[2].id = 126;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 EXPECT_TRUE(SetupRecvStream()); 856 EXPECT_TRUE(SetupRecvStream());
928 cricket::AudioRecvParameters parameters; 857 cricket::AudioRecvParameters parameters;
929 parameters.codecs.push_back(kIsacCodec); 858 parameters.codecs.push_back(kIsacCodec);
930 parameters.codecs.push_back(kCn16000Codec); 859 parameters.codecs.push_back(kCn16000Codec);
931 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 860 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
932 channel_->SetPlayout(true); 861 channel_->SetPlayout(true);
933 862
934 parameters.codecs.push_back(kOpusCodec); 863 parameters.codecs.push_back(kOpusCodec);
935 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 864 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
936 EXPECT_TRUE(GetRecvStream(kSsrcX).started()); 865 EXPECT_TRUE(GetRecvStream(kSsrcX).started());
937 webrtc::CodecInst gcodec;
938 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kOpusCodec, &gcodec));
939 EXPECT_EQ(kOpusCodec.id, gcodec.pltype);
940 } 866 }
941 867
942 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) { 868 TEST_F(WebRtcVoiceEngineTestFake, SetSendBandwidthAuto) {
943 EXPECT_TRUE(SetupSendStream()); 869 EXPECT_TRUE(SetupSendStream());
944 870
945 // Test that when autobw is enabled, bitrate is kept as the default 871 // Test that when autobw is enabled, bitrate is kept as the default
946 // value. autobw is enabled for the following tests because the target 872 // value. autobw is enabled for the following tests because the target
947 // bitrate is <= 0. 873 // bitrate is <= 0.
948 874
949 // ISAC, default bitrate == 32000. 875 // ISAC, default bitrate == 32000.
950 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000); 876 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000);
951 877
952 // PCMU, default bitrate == 64000. 878 // PCMU, default bitrate == 64000.
953 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000); 879 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000);
954 880
955 // opus, default bitrate == 64000. 881 // opus, default bitrate == 32000 in mono.
956 TestMaxSendBandwidth(kOpusCodec, -1, true, 64000); 882 TestMaxSendBandwidth(kOpusCodec, -1, true, 32000);
957 } 883 }
958 884
959 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { 885 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) {
960 EXPECT_TRUE(SetupSendStream()); 886 EXPECT_TRUE(SetupSendStream());
961 887
962 // Test that the bitrate of a multi-rate codec is always the maximum.
963
964 // ISAC, default bitrate == 32000. 888 // ISAC, default bitrate == 32000.
965 TestMaxSendBandwidth(kIsacCodec, 40000, true, 40000);
966 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000); 889 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000);
967 // Rates above the max (56000) should be capped. 890 // Rates above the max (56000) should be capped.
968 TestMaxSendBandwidth(kIsacCodec, 100000, true, 56000); 891 TestMaxSendBandwidth(kIsacCodec, 100000, true, 32000);
969 892
970 // opus, default bitrate == 64000. 893 // opus, default bitrate == 64000.
971 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000); 894 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000);
972 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000); 895 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000);
973 // Rates above the max (510000) should be capped. 896 // Rates above the max (510000) should be capped.
974 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000); 897 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000);
975 } 898 }
976 899
977 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { 900 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) {
978 EXPECT_TRUE(SetupSendStream()); 901 EXPECT_TRUE(SetupSendStream());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 send_parameters_.max_bandwidth_bps = 128; 944 send_parameters_.max_bandwidth_bps = 128;
1022 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); 945 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
1023 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX)); 946 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX));
1024 } 947 }
1025 948
1026 // Test that the per-stream bitrate limit and the global 949 // Test that the per-stream bitrate limit and the global
1027 // bitrate limit both apply. 950 // bitrate limit both apply.
1028 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { 951 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) {
1029 EXPECT_TRUE(SetupSendStream()); 952 EXPECT_TRUE(SetupSendStream());
1030 953
1031 // opus, default bitrate == 64000. 954 // opus, default bitrate == 32000.
1032 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); 955 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 32000);
1033 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); 956 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000);
1034 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); 957 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000);
1035 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); 958 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000);
1036 959
1037 // CBR codecs allow both maximums to exceed the bitrate. 960 // CBR codecs allow both maximums to exceed the bitrate.
1038 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); 961 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000);
1039 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); 962 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000);
1040 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); 963 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000);
1041 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); 964 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000);
1042 965
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { 1030 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) {
1108 SetupForMultiSendStream(); 1031 SetupForMultiSendStream();
1109 // Create send streams. 1032 // Create send streams.
1110 for (uint32_t ssrc : kSsrcs4) { 1033 for (uint32_t ssrc : kSsrcs4) {
1111 EXPECT_TRUE( 1034 EXPECT_TRUE(
1112 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); 1035 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc)));
1113 } 1036 }
1114 // Configure one stream to be limited by the stream config, another to be 1037 // Configure one stream to be limited by the stream config, another to be
1115 // limited by the global max, and the third one with no per-stream limit 1038 // limited by the global max, and the third one with no per-stream limit
1116 // (still subject to the global limit). 1039 // (still subject to the global limit).
1117 SetGlobalMaxBitrate(kOpusCodec, 64000); 1040 SetGlobalMaxBitrate(kOpusCodec, 32000);
1118 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 48000)); 1041 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 24000));
1119 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 96000)); 1042 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 48000));
1120 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); 1043 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1));
1121 1044
1122 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); 1045 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0]));
1123 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[1])); 1046 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[1]));
1124 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); 1047 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2]));
1125 1048
1126 // Remove the global cap; the streams should switch to their respective 1049 // Remove the global cap; the streams should switch to their respective
1127 // maximums (or remain unchanged if there was no other limit on them.) 1050 // maximums (or remain unchanged if there was no other limit on them.)
1128 SetGlobalMaxBitrate(kOpusCodec, -1); 1051 SetGlobalMaxBitrate(kOpusCodec, -1);
1129 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); 1052 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0]));
1130 EXPECT_EQ(96000, GetCodecBitrate(kSsrcs4[1])); 1053 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[1]));
1131 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); 1054 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2]));
1132 } 1055 }
1133 1056
1134 // Test that GetRtpSendParameters returns the currently configured codecs. 1057 // Test that GetRtpSendParameters returns the currently configured codecs.
1135 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { 1058 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) {
1136 EXPECT_TRUE(SetupSendStream()); 1059 EXPECT_TRUE(SetupSendStream());
1137 cricket::AudioSendParameters parameters; 1060 cricket::AudioSendParameters parameters;
1138 parameters.codecs.push_back(kIsacCodec); 1061 parameters.codecs.push_back(kIsacCodec);
1139 parameters.codecs.push_back(kPcmuCodec); 1062 parameters.codecs.push_back(kPcmuCodec);
1140 SetSendParameters(parameters); 1063 SetSendParameters(parameters);
1141 1064
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 1200
1278 // Test that we apply codecs properly. 1201 // Test that we apply codecs properly.
1279 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { 1202 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) {
1280 EXPECT_TRUE(SetupSendStream()); 1203 EXPECT_TRUE(SetupSendStream());
1281 cricket::AudioSendParameters parameters; 1204 cricket::AudioSendParameters parameters;
1282 parameters.codecs.push_back(kIsacCodec); 1205 parameters.codecs.push_back(kIsacCodec);
1283 parameters.codecs.push_back(kPcmuCodec); 1206 parameters.codecs.push_back(kPcmuCodec);
1284 parameters.codecs.push_back(kCn8000Codec); 1207 parameters.codecs.push_back(kCn8000Codec);
1285 parameters.codecs[0].id = 96; 1208 parameters.codecs[0].id = 96;
1286 parameters.codecs[0].bitrate = 48000; 1209 parameters.codecs[0].bitrate = 48000;
1287 const int initial_num = call_.GetNumCreatedSendStreams();
1288 SetSendParameters(parameters); 1210 SetSendParameters(parameters);
1289 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 1211 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1290 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1212 EXPECT_EQ(96, send_codec_spec.payload_type);
1291 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1213 // EXPECT_EQ(48000, send_codec_spec.codec_inst.rate);
the sun 2017/04/25 11:38:53 Why is this commented out?
ossu 2017/04/25 12:58:38 Oh, I believe I should still test that this gets s
ossu 2017/04/25 17:10:07 Turns out this failed at 48000, since mono ISAC on
1292 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); 1214 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
1293 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1215 EXPECT_NE(send_codec_spec.format.clockrate_hz, 8000);
1294 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 1216 EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
1295 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); 1217 // EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
the sun 2017/04/25 11:38:53 likewise
ossu 2017/04/25 12:58:38 CNG payload frequency is no longer tracked separat
1296 EXPECT_FALSE(channel_->CanInsertDtmf()); 1218 EXPECT_FALSE(channel_->CanInsertDtmf());
1297 } 1219 }
1298 1220
1299 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 1221 // Test that WebRtcVoiceEngine reconfigures, rather than recreates its
1300 // to apply. 1222 // AudioSendStream.
1301 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { 1223 TEST_F(WebRtcVoiceEngineTestFake, DontRecreateSendStream) {
1302 EXPECT_TRUE(SetupSendStream()); 1224 EXPECT_TRUE(SetupSendStream());
1303 cricket::AudioSendParameters parameters; 1225 cricket::AudioSendParameters parameters;
1304 parameters.codecs.push_back(kIsacCodec); 1226 parameters.codecs.push_back(kIsacCodec);
1305 parameters.codecs.push_back(kPcmuCodec); 1227 parameters.codecs.push_back(kPcmuCodec);
1306 parameters.codecs.push_back(kCn8000Codec); 1228 parameters.codecs.push_back(kCn8000Codec);
1307 parameters.codecs[0].id = 96; 1229 parameters.codecs[0].id = 96;
1308 parameters.codecs[0].bitrate = 48000; 1230 parameters.codecs[0].bitrate = 48000;
1309 const int initial_num = call_.GetNumCreatedSendStreams(); 1231 const int initial_num = call_.GetNumCreatedSendStreams();
1310 SetSendParameters(parameters); 1232 SetSendParameters(parameters);
1311 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 1233 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams());
1312 // Calling SetSendCodec again with same codec which is already set. 1234 // Calling SetSendCodec again with same codec which is already set.
1313 // In this case media channel shouldn't send codec to VoE. 1235 // In this case media channel shouldn't send codec to VoE.
1314 SetSendParameters(parameters); 1236 SetSendParameters(parameters);
1315 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); 1237 EXPECT_EQ(initial_num, call_.GetNumCreatedSendStreams());
1316 } 1238 }
1317 1239
1318 // Verify that G722 is set with 16000 samples per second to WebRTC. 1240 // TODO(ossu): Revisit if these tests need to be here, now that these kinds of
ossu 2017/04/25 11:58:11 This one isn't applicable anymore, since we're not
1319 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 1241 // tests should be available in AudioEncoderOpusTest.
1320 EXPECT_TRUE(SetupSendStream());
1321 cricket::AudioSendParameters parameters;
1322 parameters.codecs.push_back(kG722CodecSdp);
1323 SetSendParameters(parameters);
1324 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst;
1325 EXPECT_STREQ("G722", gcodec.plname);
1326 EXPECT_EQ(1, gcodec.channels);
1327 EXPECT_EQ(16000, gcodec.plfreq);
1328 }
1329 1242
1330 // Test that if clockrate is not 48000 for opus, we fail. 1243 // Test that if clockrate is not 48000 for opus, we fail.
1331 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 1244 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
1332 EXPECT_TRUE(SetupSendStream()); 1245 EXPECT_TRUE(SetupSendStream());
1333 cricket::AudioSendParameters parameters; 1246 cricket::AudioSendParameters parameters;
1334 parameters.codecs.push_back(kOpusCodec); 1247 parameters.codecs.push_back(kOpusCodec);
1335 parameters.codecs[0].bitrate = 0; 1248 parameters.codecs[0].bitrate = 0;
1336 parameters.codecs[0].clockrate = 50000; 1249 parameters.codecs[0].clockrate = 50000;
1337 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1250 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1338 } 1251 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { 1296 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) {
1384 EXPECT_TRUE(SetupSendStream()); 1297 EXPECT_TRUE(SetupSendStream());
1385 cricket::AudioSendParameters parameters; 1298 cricket::AudioSendParameters parameters;
1386 parameters.codecs.push_back(kOpusCodec); 1299 parameters.codecs.push_back(kOpusCodec);
1387 parameters.codecs[0].bitrate = 0; 1300 parameters.codecs[0].bitrate = 0;
1388 parameters.codecs[0].channels = 1; 1301 parameters.codecs[0].channels = 1;
1389 parameters.codecs[0].params["stereo"] = "1"; 1302 parameters.codecs[0].params["stereo"] = "1";
1390 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1303 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1391 } 1304 }
1392 1305
1393 // Test that with bitrate=0 and no stereo, 1306 // Test that with bitrate=0 and no stereo, bitrate is 32000.
1394 // channels and bitrate are 1 and 32000.
1395 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 1307 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
1396 EXPECT_TRUE(SetupSendStream()); 1308 EXPECT_TRUE(SetupSendStream());
1397 cricket::AudioSendParameters parameters; 1309 cricket::AudioSendParameters parameters;
1398 parameters.codecs.push_back(kOpusCodec); 1310 parameters.codecs.push_back(kOpusCodec);
1399 parameters.codecs[0].bitrate = 0; 1311 parameters.codecs[0].bitrate = 0;
1400 SetSendParameters(parameters); 1312 SetSendParameters(parameters);
1401 CheckSendCodec(kSsrcX, "opus", 1, 32000); 1313 CheckSendCodecBitrate(kSsrcX, "opus", 32000);
1402 } 1314 }
1403 1315
1404 // Test that with bitrate=0 and stereo=0, 1316 // Test that with bitrate=0 and stereo=0, bitrate is 32000.
1405 // channels and bitrate are 1 and 32000.
1406 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 1317 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
1407 EXPECT_TRUE(SetupSendStream()); 1318 EXPECT_TRUE(SetupSendStream());
1408 cricket::AudioSendParameters parameters; 1319 cricket::AudioSendParameters parameters;
1409 parameters.codecs.push_back(kOpusCodec); 1320 parameters.codecs.push_back(kOpusCodec);
1410 parameters.codecs[0].bitrate = 0; 1321 parameters.codecs[0].bitrate = 0;
1411 parameters.codecs[0].params["stereo"] = "0"; 1322 parameters.codecs[0].params["stereo"] = "0";
1412 SetSendParameters(parameters); 1323 SetSendParameters(parameters);
1413 CheckSendCodec(kSsrcX, "opus", 1, 32000); 1324 CheckSendCodecBitrate(kSsrcX, "opus", 32000);
1414 } 1325 }
1415 1326
1416 // Test that with bitrate=invalid and stereo=0, 1327 // Test that with bitrate=invalid and stereo=0, bitrate is 32000.
1417 // channels and bitrate are 1 and 32000.
1418 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 1328 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
1419 EXPECT_TRUE(SetupSendStream()); 1329 EXPECT_TRUE(SetupSendStream());
1420 cricket::AudioSendParameters parameters; 1330 cricket::AudioSendParameters parameters;
1421 parameters.codecs.push_back(kOpusCodec); 1331 parameters.codecs.push_back(kOpusCodec);
1422 parameters.codecs[0].params["stereo"] = "0"; 1332 parameters.codecs[0].params["stereo"] = "0";
1423 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1333 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1424 parameters.codecs[0].bitrate = 5999; 1334 parameters.codecs[0].bitrate = 5999;
1425 SetSendParameters(parameters); 1335 SetSendParameters(parameters);
1426 CheckSendCodec(kSsrcX, "opus", 1, 6000); 1336 CheckSendCodecBitrate(kSsrcX, "opus", 6000);
1427 1337
1428 parameters.codecs[0].bitrate = 510001; 1338 parameters.codecs[0].bitrate = 510001;
1429 SetSendParameters(parameters); 1339 SetSendParameters(parameters);
1430 CheckSendCodec(kSsrcX, "opus", 1, 510000); 1340 CheckSendCodecBitrate(kSsrcX, "opus", 510000);
1431 } 1341 }
1432 1342
1433 // Test that with bitrate=0 and stereo=1, 1343 // Test that with bitrate=0 and stereo=1, bitrate is 64000.
1434 // channels and bitrate are 2 and 64000.
1435 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 1344 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
1436 EXPECT_TRUE(SetupSendStream()); 1345 EXPECT_TRUE(SetupSendStream());
1437 cricket::AudioSendParameters parameters; 1346 cricket::AudioSendParameters parameters;
1438 parameters.codecs.push_back(kOpusCodec); 1347 parameters.codecs.push_back(kOpusCodec);
1439 parameters.codecs[0].bitrate = 0; 1348 parameters.codecs[0].bitrate = 0;
1440 parameters.codecs[0].params["stereo"] = "1"; 1349 parameters.codecs[0].params["stereo"] = "1";
1441 SetSendParameters(parameters); 1350 SetSendParameters(parameters);
1442 CheckSendCodec(kSsrcX, "opus", 2, 64000); 1351 CheckSendCodecBitrate(kSsrcX, "opus", 64000);
1443 } 1352 }
1444 1353
1445 // Test that with bitrate=invalid and stereo=1, 1354 // Test that with bitrate=invalid and stereo=1, bitrate is 64000.
1446 // channels and bitrate are 2 and 64000.
1447 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 1355 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
1448 EXPECT_TRUE(SetupSendStream()); 1356 EXPECT_TRUE(SetupSendStream());
1449 cricket::AudioSendParameters parameters; 1357 cricket::AudioSendParameters parameters;
1450 parameters.codecs.push_back(kOpusCodec); 1358 parameters.codecs.push_back(kOpusCodec);
1451 parameters.codecs[0].params["stereo"] = "1"; 1359 parameters.codecs[0].params["stereo"] = "1";
1452 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1360 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1453 parameters.codecs[0].bitrate = 5999; 1361 parameters.codecs[0].bitrate = 5999;
1454 SetSendParameters(parameters); 1362 SetSendParameters(parameters);
1455 CheckSendCodec(kSsrcX, "opus", 2, 6000); 1363 CheckSendCodecBitrate(kSsrcX, "opus", 6000);
1456 1364
1457 parameters.codecs[0].bitrate = 510001; 1365 parameters.codecs[0].bitrate = 510001;
1458 SetSendParameters(parameters); 1366 SetSendParameters(parameters);
1459 CheckSendCodec(kSsrcX, "opus", 2, 510000); 1367 CheckSendCodecBitrate(kSsrcX, "opus", 510000);
1460 } 1368 }
1461 1369
1462 // Test that with bitrate=N and stereo unset, 1370 // Test that with bitrate=N and stereo unset, bitrate is N.
1463 // channels and bitrate are 1 and N.
1464 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 1371 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
1465 EXPECT_TRUE(SetupSendStream()); 1372 EXPECT_TRUE(SetupSendStream());
1466 cricket::AudioSendParameters parameters; 1373 cricket::AudioSendParameters parameters;
1467 parameters.codecs.push_back(kOpusCodec); 1374 parameters.codecs.push_back(kOpusCodec);
1468 parameters.codecs[0].bitrate = 96000; 1375 parameters.codecs[0].bitrate = 96000;
1469 SetSendParameters(parameters); 1376 SetSendParameters(parameters);
1470 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1377 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1471 EXPECT_EQ(111, gcodec.pltype); 1378 EXPECT_EQ(111, spec.payload_type);
1472 EXPECT_EQ(96000, gcodec.rate); 1379 EXPECT_EQ(96000, spec.target_bitrate_bps);
1473 EXPECT_STREQ("opus", gcodec.plname); 1380 EXPECT_EQ("opus", spec.format.name);
1474 EXPECT_EQ(1, gcodec.channels); 1381 EXPECT_EQ(2, spec.format.num_channels);
1475 EXPECT_EQ(48000, gcodec.plfreq); 1382 EXPECT_EQ(48000, spec.format.clockrate_hz);
1476 } 1383 }
1477 1384
1478 // Test that with bitrate=N and stereo=0, 1385 // Test that with bitrate=N and stereo=0, bitrate is N.
1479 // channels and bitrate are 1 and N.
1480 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 1386 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
1481 EXPECT_TRUE(SetupSendStream()); 1387 EXPECT_TRUE(SetupSendStream());
1482 cricket::AudioSendParameters parameters; 1388 cricket::AudioSendParameters parameters;
1483 parameters.codecs.push_back(kOpusCodec); 1389 parameters.codecs.push_back(kOpusCodec);
1484 parameters.codecs[0].bitrate = 30000; 1390 parameters.codecs[0].bitrate = 30000;
1485 parameters.codecs[0].params["stereo"] = "0"; 1391 parameters.codecs[0].params["stereo"] = "0";
1486 SetSendParameters(parameters); 1392 SetSendParameters(parameters);
1487 CheckSendCodec(kSsrcX, "opus", 1, 30000); 1393 CheckSendCodecBitrate(kSsrcX, "opus", 30000);
1488 } 1394 }
1489 1395
1490 // Test that with bitrate=N and without any parameters, 1396 // Test that with bitrate=N and without any parameters, bitrate is N.
1491 // channels and bitrate are 1 and N.
1492 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 1397 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
1493 EXPECT_TRUE(SetupSendStream()); 1398 EXPECT_TRUE(SetupSendStream());
1494 cricket::AudioSendParameters parameters; 1399 cricket::AudioSendParameters parameters;
1495 parameters.codecs.push_back(kOpusCodec); 1400 parameters.codecs.push_back(kOpusCodec);
1496 parameters.codecs[0].bitrate = 30000; 1401 parameters.codecs[0].bitrate = 30000;
1497 SetSendParameters(parameters); 1402 SetSendParameters(parameters);
1498 CheckSendCodec(kSsrcX, "opus", 1, 30000); 1403 CheckSendCodecBitrate(kSsrcX, "opus", 30000);
1499 } 1404 }
1500 1405
1501 // Test that with bitrate=N and stereo=1, 1406 // Test that with bitrate=N and stereo=1, bitrate is N.
1502 // channels and bitrate are 2 and N.
1503 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 1407 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
1504 EXPECT_TRUE(SetupSendStream()); 1408 EXPECT_TRUE(SetupSendStream());
1505 cricket::AudioSendParameters parameters; 1409 cricket::AudioSendParameters parameters;
1506 parameters.codecs.push_back(kOpusCodec); 1410 parameters.codecs.push_back(kOpusCodec);
1507 parameters.codecs[0].bitrate = 30000; 1411 parameters.codecs[0].bitrate = 30000;
1508 parameters.codecs[0].params["stereo"] = "1"; 1412 parameters.codecs[0].params["stereo"] = "1";
1509 SetSendParameters(parameters); 1413 SetSendParameters(parameters);
1510 CheckSendCodec(kSsrcX, "opus", 2, 30000); 1414 CheckSendCodecBitrate(kSsrcX, "opus", 30000);
1511 }
1512
1513 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
1514 // Also test that the "maxaveragebitrate" can't be set to values outside the
1515 // range of 6000 and 510000
1516 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
the sun 2017/04/25 11:38:53 Why is this test removed?
ossu 2017/04/25 11:58:11 It has been put in AudioEncoderOpusTest instead, w
1517 EXPECT_TRUE(SetupSendStream());
1518 cricket::AudioSendParameters parameters;
1519 parameters.codecs.push_back(kOpusCodec);
1520 parameters.codecs[0].bitrate = 30000;
1521 // Ignore if less than 6000.
1522 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
1523 SetSendParameters(parameters);
1524 EXPECT_EQ(6000, GetCodecBitrate(kSsrcX));
1525
1526 // Ignore if larger than 510000.
1527 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1528 SetSendParameters(parameters);
1529 EXPECT_EQ(510000, GetCodecBitrate(kSsrcX));
1530
1531 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1532 SetSendParameters(parameters);
1533 EXPECT_EQ(200000, GetCodecBitrate(kSsrcX));
1534 } 1415 }
1535 1416
1536 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { 1417 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) {
1537 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 1418 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
1538 200000); 1419 200000);
1539 } 1420 }
1540 1421
1541 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { 1422 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) {
1542 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); 1423 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
1543 } 1424 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 cricket::kParamValueEmpty)); 1540 cricket::kParamValueEmpty));
1660 SetSendParameters(parameters); 1541 SetSendParameters(parameters);
1661 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms); 1542 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrcX).rtp.nack.rtp_history_ms);
1662 1543
1663 EXPECT_TRUE(AddRecvStream(kSsrcY)); 1544 EXPECT_TRUE(AddRecvStream(kSsrcY));
1664 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms); 1545 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcY).rtp.nack.rtp_history_ms);
1665 EXPECT_TRUE(AddRecvStream(kSsrcZ)); 1546 EXPECT_TRUE(AddRecvStream(kSsrcZ));
1666 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcZ).rtp.nack.rtp_history_ms); 1547 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrcZ).rtp.nack.rtp_history_ms);
1667 } 1548 }
1668 1549
1669 // Test that without useinbandfec, Opus FEC is off.
1670 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
the sun 2017/04/25 11:38:53 Where are these test cases living now?
ossu 2017/04/25 11:58:11 They have been moved to their respective codec imp
1671 EXPECT_TRUE(SetupSendStream());
1672 cricket::AudioSendParameters parameters;
1673 parameters.codecs.push_back(kOpusCodec);
1674 SetSendParameters(parameters);
1675 EXPECT_FALSE(GetCodecFec(kSsrcX));
1676 }
1677
1678 // Test that with useinbandfec=0, Opus FEC is off.
1679 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1680 EXPECT_TRUE(SetupSendStream());
1681 cricket::AudioSendParameters parameters;
1682 parameters.codecs.push_back(kOpusCodec);
1683 parameters.codecs[0].bitrate = 0;
1684 parameters.codecs[0].params["useinbandfec"] = "0";
1685 SetSendParameters(parameters);
1686 CheckSendCodec(kSsrcX, "opus", 1, 32000);
1687 }
1688
1689 // Test that with useinbandfec=1, Opus FEC is on.
1690 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1691 EXPECT_TRUE(SetupSendStream());
1692 cricket::AudioSendParameters parameters;
1693 parameters.codecs.push_back(kOpusCodec);
1694 parameters.codecs[0].bitrate = 0;
1695 parameters.codecs[0].params["useinbandfec"] = "1";
1696 SetSendParameters(parameters);
1697 EXPECT_TRUE(GetCodecFec(kSsrcX));
1698 CheckSendCodec(kSsrcX, "opus", 1, 32000);
1699 }
1700
1701 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1702 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1703 EXPECT_TRUE(SetupSendStream());
1704 cricket::AudioSendParameters parameters;
1705 parameters.codecs.push_back(kOpusCodec);
1706 parameters.codecs[0].bitrate = 0;
1707 parameters.codecs[0].params["stereo"] = "1";
1708 parameters.codecs[0].params["useinbandfec"] = "1";
1709 SetSendParameters(parameters);
1710 EXPECT_TRUE(GetCodecFec(kSsrcX));
1711 CheckSendCodec(kSsrcX, "opus", 2, 64000);
1712 }
1713
1714 // Test that with non-Opus, codec FEC is off.
1715 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1716 EXPECT_TRUE(SetupSendStream());
1717 cricket::AudioSendParameters parameters;
1718 parameters.codecs.push_back(kIsacCodec);
1719 SetSendParameters(parameters);
1720 EXPECT_FALSE(GetCodecFec(kSsrcX));
1721 }
1722
1723 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1724 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1725 EXPECT_TRUE(SetupSendStream());
1726 cricket::AudioSendParameters parameters;
1727 parameters.codecs.push_back(kIsacCodec);
1728 parameters.codecs[0].params["useinbandfec"] = "1";
1729 SetSendParameters(parameters);
1730 EXPECT_FALSE(GetCodecFec(kSsrcX));
1731 }
1732
1733 // Test that Opus FEC status can be changed.
1734 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1735 EXPECT_TRUE(SetupSendStream());
1736 cricket::AudioSendParameters parameters;
1737 parameters.codecs.push_back(kOpusCodec);
1738 SetSendParameters(parameters);
1739 EXPECT_FALSE(GetCodecFec(kSsrcX));
1740
1741 parameters.codecs[0].params["useinbandfec"] = "1";
1742 SetSendParameters(parameters);
1743 EXPECT_TRUE(GetCodecFec(kSsrcX));
1744 }
1745
1746 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { 1550 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) {
1747 EXPECT_TRUE(SetupChannel()); 1551 EXPECT_TRUE(SetupChannel());
1748 cricket::AudioSendParameters send_parameters; 1552 cricket::AudioSendParameters send_parameters;
1749 send_parameters.codecs.push_back(kOpusCodec); 1553 send_parameters.codecs.push_back(kOpusCodec);
1750 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); 1554 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty());
1751 SetSendParameters(send_parameters); 1555 SetSendParameters(send_parameters);
1752 1556
1753 cricket::AudioRecvParameters recv_parameters; 1557 cricket::AudioRecvParameters recv_parameters;
1754 recv_parameters.codecs.push_back(kIsacCodec); 1558 recv_parameters.codecs.push_back(kIsacCodec);
1755 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); 1559 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
1756 EXPECT_TRUE(AddRecvStream(kSsrcX)); 1560 EXPECT_TRUE(AddRecvStream(kSsrcX));
1757 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr); 1561 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr);
1758 EXPECT_FALSE( 1562 EXPECT_FALSE(
1759 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc); 1563 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc);
1760 1564
1761 send_parameters.codecs = engine_->send_codecs(); 1565 send_parameters.codecs = engine_->send_codecs();
1762 SetSendParameters(send_parameters); 1566 SetSendParameters(send_parameters);
1763 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr); 1567 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrcX) != nullptr);
1764 EXPECT_TRUE( 1568 EXPECT_TRUE(
1765 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc); 1569 call_.GetAudioReceiveStream(kSsrcX)->GetConfig().rtp.transport_cc);
1766 } 1570 }
1767 1571
1768 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
ossu 2017/04/25 11:58:11 These have been moved to Opus's own tests.
1769 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1770 EXPECT_TRUE(SetupSendStream());
1771 cricket::AudioSendParameters parameters;
1772 parameters.codecs.push_back(kOpusCodec);
1773 parameters.codecs[0].bitrate = 0;
1774 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1775 SetSendParameters(parameters);
1776 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcX));
1777 EXPECT_EQ(12000, GetCodecBitrate(kSsrcX));
1778
1779 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1780 SetSendParameters(parameters);
1781 EXPECT_EQ(24000, GetCodecBitrate(kSsrcX));
1782 }
1783
1784 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1785 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1786 EXPECT_TRUE(SetupSendStream());
1787 cricket::AudioSendParameters parameters;
1788 parameters.codecs.push_back(kOpusCodec);
1789 parameters.codecs[0].bitrate = 0;
1790 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1791 SetSendParameters(parameters);
1792 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrcX));
1793 EXPECT_EQ(20000, GetCodecBitrate(kSsrcX));
1794
1795 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1796 SetSendParameters(parameters);
1797 EXPECT_EQ(40000, GetCodecBitrate(kSsrcX));
1798 }
1799
1800 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1801 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1802 EXPECT_TRUE(SetupSendStream());
1803 cricket::AudioSendParameters parameters;
1804 parameters.codecs.push_back(kOpusCodec);
1805 parameters.codecs[0].bitrate = 0;
1806 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1807 SetSendParameters(parameters);
1808 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrcX));
1809 EXPECT_EQ(20000, GetCodecBitrate(kSsrcX));
1810
1811 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1812 SetSendParameters(parameters);
1813 EXPECT_EQ(40000, GetCodecBitrate(kSsrcX));
1814 }
1815
1816 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1817 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1818 EXPECT_TRUE(SetupSendStream());
1819 cricket::AudioSendParameters parameters;
1820 parameters.codecs.push_back(kOpusCodec);
1821 parameters.codecs[0].bitrate = 0;
1822 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1823 SetSendParameters(parameters);
1824 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrcX));
1825 EXPECT_EQ(32000, GetCodecBitrate(kSsrcX));
1826
1827 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1828 SetSendParameters(parameters);
1829 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX));
1830 }
1831
1832 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1833 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1834 EXPECT_TRUE(SetupSendStream());
1835 cricket::AudioSendParameters parameters;
1836 parameters.codecs.push_back(kOpusCodec);
1837 parameters.codecs[0].bitrate = 0;
1838 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1839 SetSendParameters(parameters);
1840 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrcX));
1841 EXPECT_EQ(32000, GetCodecBitrate(kSsrcX));
1842
1843 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1844 SetSendParameters(parameters);
1845 EXPECT_EQ(64000, GetCodecBitrate(kSsrcX));
1846 }
1847
1848 // Test Opus that without maxplaybackrate, default playback rate is used.
1849 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1850 EXPECT_TRUE(SetupSendStream());
1851 cricket::AudioSendParameters parameters;
1852 parameters.codecs.push_back(kOpusCodec);
1853 SetSendParameters(parameters);
1854 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrcX));
1855 }
1856
1857 // Test the with non-Opus, maxplaybackrate has no effect.
1858 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1859 EXPECT_TRUE(SetupSendStream());
1860 cricket::AudioSendParameters parameters;
1861 parameters.codecs.push_back(kIsacCodec);
1862 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1863 SetSendParameters(parameters);
1864 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrcX));
1865 }
1866
1867 // Test maxplaybackrate can be set on two streams.
ossu 2017/04/25 11:58:11 I don't think this one is applicable anymore, sinc
1868 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1869 EXPECT_TRUE(SetupSendStream());
1870 cricket::AudioSendParameters parameters;
1871 parameters.codecs.push_back(kOpusCodec);
1872 SetSendParameters(parameters);
1873 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrcX));
1874
1875 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1876 SetSendParameters(parameters);
1877 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcX));
1878
1879 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcY));
1880 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrcY));
1881 }
1882
1883 // Test that with usedtx=0, Opus DTX is off.
1884 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1885 EXPECT_TRUE(SetupSendStream());
1886 cricket::AudioSendParameters parameters;
1887 parameters.codecs.push_back(kOpusCodec);
1888 parameters.codecs[0].params["usedtx"] = "0";
1889 SetSendParameters(parameters);
1890 EXPECT_FALSE(GetOpusDtx(kSsrcX));
1891 }
1892
1893 // Test that with usedtx=1, Opus DTX is on.
1894 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1895 EXPECT_TRUE(SetupSendStream());
1896 cricket::AudioSendParameters parameters;
1897 parameters.codecs.push_back(kOpusCodec);
1898 parameters.codecs[0].params["usedtx"] = "1";
1899 SetSendParameters(parameters);
1900 EXPECT_TRUE(GetOpusDtx(kSsrcX));
1901 }
1902
1903 // Test that usedtx=1 works with stereo Opus.
1904 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1905 EXPECT_TRUE(SetupSendStream());
1906 cricket::AudioSendParameters parameters;
1907 parameters.codecs.push_back(kOpusCodec);
1908 parameters.codecs[0].params["usedtx"] = "1";
1909 parameters.codecs[0].params["stereo"] = "1";
1910 SetSendParameters(parameters);
1911 EXPECT_TRUE(GetOpusDtx(kSsrcX));
1912 }
1913
1914 // Test that usedtx=1 does not work with non Opus.
1915 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1916 EXPECT_TRUE(SetupSendStream());
1917 cricket::AudioSendParameters parameters;
1918 parameters.codecs.push_back(kIsacCodec);
1919 parameters.codecs[0].params["usedtx"] = "1";
1920 SetSendParameters(parameters);
1921 EXPECT_FALSE(GetOpusDtx(kSsrcX));
1922 }
1923
1924 // Test that we can switch back and forth between Opus and ISAC with CN. 1572 // Test that we can switch back and forth between Opus and ISAC with CN.
1925 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1573 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1926 EXPECT_TRUE(SetupSendStream()); 1574 EXPECT_TRUE(SetupSendStream());
1927 1575
1928 cricket::AudioSendParameters opus_parameters; 1576 cricket::AudioSendParameters opus_parameters;
1929 opus_parameters.codecs.push_back(kOpusCodec); 1577 opus_parameters.codecs.push_back(kOpusCodec);
1930 SetSendParameters(opus_parameters); 1578 SetSendParameters(opus_parameters);
1931 { 1579 {
1932 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1580 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1933 EXPECT_EQ(111, gcodec.pltype); 1581 EXPECT_EQ(111, spec.payload_type);
1934 EXPECT_STREQ("opus", gcodec.plname); 1582 EXPECT_STRCASEEQ("opus", spec.format.name.c_str());
1935 } 1583 }
1936 1584
1937 cricket::AudioSendParameters isac_parameters; 1585 cricket::AudioSendParameters isac_parameters;
1938 isac_parameters.codecs.push_back(kIsacCodec); 1586 isac_parameters.codecs.push_back(kIsacCodec);
1939 isac_parameters.codecs.push_back(kCn16000Codec); 1587 isac_parameters.codecs.push_back(kCn16000Codec);
1940 isac_parameters.codecs.push_back(kOpusCodec); 1588 isac_parameters.codecs.push_back(kOpusCodec);
1941 SetSendParameters(isac_parameters); 1589 SetSendParameters(isac_parameters);
1942 { 1590 {
1943 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1591 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1944 EXPECT_EQ(103, gcodec.pltype); 1592 EXPECT_EQ(103, spec.payload_type);
1945 EXPECT_STREQ("ISAC", gcodec.plname); 1593 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str());
1946 } 1594 }
1947 1595
1948 SetSendParameters(opus_parameters); 1596 SetSendParameters(opus_parameters);
1949 { 1597 {
1950 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1598 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1951 EXPECT_EQ(111, gcodec.pltype); 1599 EXPECT_EQ(111, spec.payload_type);
1952 EXPECT_STREQ("opus", gcodec.plname); 1600 EXPECT_STRCASEEQ("opus", spec.format.name.c_str());
1953 } 1601 }
1954 } 1602 }
1955 1603
1956 // Test that we handle various ways of specifying bitrate. 1604 // Test that we handle various ways of specifying bitrate.
1957 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1605 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1958 EXPECT_TRUE(SetupSendStream()); 1606 EXPECT_TRUE(SetupSendStream());
1959 cricket::AudioSendParameters parameters; 1607 cricket::AudioSendParameters parameters;
1960 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 1608 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1961 SetSendParameters(parameters); 1609 SetSendParameters(parameters);
1962 { 1610 {
1963 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1611 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1964 EXPECT_EQ(103, gcodec.pltype); 1612 EXPECT_EQ(103, spec.payload_type);
1965 EXPECT_STREQ("ISAC", gcodec.plname); 1613 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str());
1966 EXPECT_EQ(32000, gcodec.rate); 1614 EXPECT_EQ(32000, spec.target_bitrate_bps);
1967 } 1615 }
1968 1616
1969 parameters.codecs[0].bitrate = 0; // bitrate == default 1617 parameters.codecs[0].bitrate = 0; // bitrate == default
1970 SetSendParameters(parameters); 1618 SetSendParameters(parameters);
1971 { 1619 {
1972 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1620 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1973 EXPECT_EQ(103, gcodec.pltype); 1621 EXPECT_EQ(103, spec.payload_type);
1974 EXPECT_STREQ("ISAC", gcodec.plname); 1622 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str());
1975 EXPECT_EQ(32000, gcodec.rate); 1623 EXPECT_EQ(32000, spec.target_bitrate_bps);
1976 } 1624 }
1977 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 1625 parameters.codecs[0].bitrate = 28000; // bitrate == 28000
1978 SetSendParameters(parameters); 1626 SetSendParameters(parameters);
1979 { 1627 {
1980 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1628 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1981 EXPECT_EQ(103, gcodec.pltype); 1629 EXPECT_EQ(103, spec.payload_type);
1982 EXPECT_STREQ("ISAC", gcodec.plname); 1630 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str());
1983 EXPECT_EQ(28000, gcodec.rate); 1631 EXPECT_EQ(28000, spec.target_bitrate_bps);
1984 } 1632 }
1985 1633
1986 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 1634 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000
1987 SetSendParameters(parameters); 1635 SetSendParameters(parameters);
1988 { 1636 {
1989 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1637 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1990 EXPECT_EQ(0, gcodec.pltype); 1638 EXPECT_EQ(0, spec.payload_type);
1991 EXPECT_STREQ("PCMU", gcodec.plname); 1639 EXPECT_STRCASEEQ("PCMU", spec.format.name.c_str());
1992 EXPECT_EQ(64000, gcodec.rate); 1640 EXPECT_EQ(64000, spec.target_bitrate_bps);
1993 } 1641 }
1994 1642
1995 parameters.codecs[0].bitrate = 0; // bitrate == default 1643 parameters.codecs[0].bitrate = 0; // bitrate == default
1996 SetSendParameters(parameters); 1644 SetSendParameters(parameters);
1997 { 1645 {
1998 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1646 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
1999 EXPECT_EQ(0, gcodec.pltype); 1647 EXPECT_EQ(0, spec.payload_type);
2000 EXPECT_STREQ("PCMU", gcodec.plname); 1648 EXPECT_STREQ("PCMU", spec.format.name.c_str());
2001 EXPECT_EQ(64000, gcodec.rate); 1649 EXPECT_EQ(64000, spec.target_bitrate_bps);
2002 } 1650 }
2003 1651
2004 parameters.codecs[0] = kOpusCodec; 1652 parameters.codecs[0] = kOpusCodec;
2005 parameters.codecs[0].bitrate = 0; // bitrate == default 1653 parameters.codecs[0].bitrate = 0; // bitrate == default
2006 SetSendParameters(parameters); 1654 SetSendParameters(parameters);
2007 { 1655 {
2008 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1656 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2009 EXPECT_EQ(111, gcodec.pltype); 1657 EXPECT_EQ(111, spec.payload_type);
2010 EXPECT_STREQ("opus", gcodec.plname); 1658 EXPECT_STREQ("opus", spec.format.name.c_str());
2011 EXPECT_EQ(32000, gcodec.rate); 1659 EXPECT_EQ(32000, spec.target_bitrate_bps);
2012 } 1660 }
2013 } 1661 }
2014 1662
2015 // Test that we could set packet size specified in kCodecParamPTime.
ossu 2017/04/25 11:58:11 These have been moved to the respective codec test
2016 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
2017 EXPECT_TRUE(SetupSendStream());
2018 cricket::AudioSendParameters parameters;
2019 parameters.codecs.push_back(kOpusCodec);
2020 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
2021 SetSendParameters(parameters);
2022 EXPECT_EQ(1920, GetCodecPacSize(kSsrcX)); // Opus gets 40ms.
2023
2024 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
2025 SetSendParameters(parameters);
2026 EXPECT_EQ(480, GetCodecPacSize(kSsrcX)); // Opus gets 10ms.
2027
2028 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range.
2029 SetSendParameters(parameters);
2030 EXPECT_EQ(2880, GetCodecPacSize(kSsrcX)); // Opus gets 60ms.
2031
2032 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size.
2033 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
2034 SetSendParameters(parameters);
2035 EXPECT_EQ(480, GetCodecPacSize(
2036 kSsrcX)); // Isac gets 30ms as the next smallest value.
2037
2038 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
2039 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
2040 SetSendParameters(parameters);
2041 EXPECT_EQ(640, GetCodecPacSize(
2042 kSsrcX)); // G722 gets 40ms @16kHz as defined in VoE.
2043 }
2044
2045 // Test that we fail if no codecs are specified. 1663 // Test that we fail if no codecs are specified.
2046 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { 1664 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
2047 EXPECT_TRUE(SetupSendStream()); 1665 EXPECT_TRUE(SetupSendStream());
2048 cricket::AudioSendParameters parameters; 1666 cricket::AudioSendParameters parameters;
2049 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1667 EXPECT_FALSE(channel_->SetSendParameters(parameters));
2050 } 1668 }
2051 1669
2052 // Test that we can set send codecs even with telephone-event codec as the first 1670 // Test that we can set send codecs even with telephone-event codec as the first
2053 // one on the list. 1671 // one on the list.
2054 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1672 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
2055 EXPECT_TRUE(SetupSendStream()); 1673 EXPECT_TRUE(SetupSendStream());
2056 cricket::AudioSendParameters parameters; 1674 cricket::AudioSendParameters parameters;
2057 parameters.codecs.push_back(kTelephoneEventCodec1); 1675 parameters.codecs.push_back(kTelephoneEventCodec1);
2058 parameters.codecs.push_back(kIsacCodec); 1676 parameters.codecs.push_back(kIsacCodec);
2059 parameters.codecs.push_back(kPcmuCodec); 1677 parameters.codecs.push_back(kPcmuCodec);
2060 parameters.codecs[0].id = 98; // DTMF 1678 parameters.codecs[0].id = 98; // DTMF
2061 parameters.codecs[1].id = 96; 1679 parameters.codecs[1].id = 96;
2062 SetSendParameters(parameters); 1680 SetSendParameters(parameters);
2063 const auto& gcodec = GetSendStreamConfig(kSsrcX).send_codec_spec.codec_inst; 1681 const auto& spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2064 EXPECT_EQ(96, gcodec.pltype); 1682 EXPECT_EQ(96, spec.payload_type);
2065 EXPECT_STREQ("ISAC", gcodec.plname); 1683 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str());
2066 EXPECT_TRUE(channel_->CanInsertDtmf()); 1684 EXPECT_TRUE(channel_->CanInsertDtmf());
2067 } 1685 }
2068 1686
2069 // Test that payload type range is limited for telephone-event codec. 1687 // Test that payload type range is limited for telephone-event codec.
2070 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { 1688 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) {
2071 EXPECT_TRUE(SetupSendStream()); 1689 EXPECT_TRUE(SetupSendStream());
2072 cricket::AudioSendParameters parameters; 1690 cricket::AudioSendParameters parameters;
2073 parameters.codecs.push_back(kTelephoneEventCodec2); 1691 parameters.codecs.push_back(kTelephoneEventCodec2);
2074 parameters.codecs.push_back(kIsacCodec); 1692 parameters.codecs.push_back(kIsacCodec);
2075 parameters.codecs[0].id = 0; // DTMF 1693 parameters.codecs[0].id = 0; // DTMF
(...skipping 15 matching lines...) Expand all
2091 // one on the list. 1709 // one on the list.
2092 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 1710 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
2093 EXPECT_TRUE(SetupSendStream()); 1711 EXPECT_TRUE(SetupSendStream());
2094 cricket::AudioSendParameters parameters; 1712 cricket::AudioSendParameters parameters;
2095 parameters.codecs.push_back(kCn16000Codec); 1713 parameters.codecs.push_back(kCn16000Codec);
2096 parameters.codecs.push_back(kIsacCodec); 1714 parameters.codecs.push_back(kIsacCodec);
2097 parameters.codecs.push_back(kPcmuCodec); 1715 parameters.codecs.push_back(kPcmuCodec);
2098 parameters.codecs[0].id = 98; // wideband CN 1716 parameters.codecs[0].id = 98; // wideband CN
2099 parameters.codecs[1].id = 96; 1717 parameters.codecs[1].id = 96;
2100 SetSendParameters(parameters); 1718 SetSendParameters(parameters);
2101 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1719 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2102 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1720 EXPECT_EQ(96, send_codec_spec.payload_type);
2103 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1721 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2104 EXPECT_EQ(98, send_codec_spec.cng_payload_type); 1722 EXPECT_EQ(98, send_codec_spec.cng_payload_type);
2105 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); 1723 // EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
the sun 2017/04/25 11:38:53 commented out - why?
ossu 2017/04/25 12:58:38 Forgot to remove it. It's no longer possible to in
2106 } 1724 }
2107 1725
2108 // Test that we set VAD and DTMF types correctly as caller. 1726 // Test that we set VAD and DTMF types correctly as caller.
2109 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 1727 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
2110 EXPECT_TRUE(SetupSendStream()); 1728 EXPECT_TRUE(SetupSendStream());
2111 cricket::AudioSendParameters parameters; 1729 cricket::AudioSendParameters parameters;
2112 parameters.codecs.push_back(kIsacCodec); 1730 parameters.codecs.push_back(kIsacCodec);
2113 parameters.codecs.push_back(kPcmuCodec); 1731 parameters.codecs.push_back(kPcmuCodec);
2114 // TODO(juberti): cn 32000 1732 // TODO(juberti): cn 32000
2115 parameters.codecs.push_back(kCn16000Codec); 1733 parameters.codecs.push_back(kCn16000Codec);
2116 parameters.codecs.push_back(kCn8000Codec); 1734 parameters.codecs.push_back(kCn8000Codec);
2117 parameters.codecs.push_back(kTelephoneEventCodec1); 1735 parameters.codecs.push_back(kTelephoneEventCodec1);
2118 parameters.codecs[0].id = 96; 1736 parameters.codecs[0].id = 96;
2119 parameters.codecs[2].id = 97; // wideband CN 1737 parameters.codecs[2].id = 97; // wideband CN
2120 parameters.codecs[4].id = 98; // DTMF 1738 parameters.codecs[4].id = 98; // DTMF
2121 SetSendParameters(parameters); 1739 SetSendParameters(parameters);
2122 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1740 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2123 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1741 EXPECT_EQ(96, send_codec_spec.payload_type);
2124 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1742 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2125 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 1743 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2126 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2127 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 1744 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2128 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2129 EXPECT_TRUE(channel_->CanInsertDtmf()); 1745 EXPECT_TRUE(channel_->CanInsertDtmf());
2130 } 1746 }
2131 1747
2132 // Test that we set VAD and DTMF types correctly as callee. 1748 // Test that we set VAD and DTMF types correctly as callee.
2133 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { 1749 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) {
2134 EXPECT_TRUE(SetupChannel()); 1750 EXPECT_TRUE(SetupChannel());
2135 cricket::AudioSendParameters parameters; 1751 cricket::AudioSendParameters parameters;
2136 parameters.codecs.push_back(kIsacCodec); 1752 parameters.codecs.push_back(kIsacCodec);
2137 parameters.codecs.push_back(kPcmuCodec); 1753 parameters.codecs.push_back(kPcmuCodec);
2138 // TODO(juberti): cn 32000 1754 // TODO(juberti): cn 32000
2139 parameters.codecs.push_back(kCn16000Codec); 1755 parameters.codecs.push_back(kCn16000Codec);
2140 parameters.codecs.push_back(kCn8000Codec); 1756 parameters.codecs.push_back(kCn8000Codec);
2141 parameters.codecs.push_back(kTelephoneEventCodec2); 1757 parameters.codecs.push_back(kTelephoneEventCodec2);
2142 parameters.codecs[0].id = 96; 1758 parameters.codecs[0].id = 96;
2143 parameters.codecs[2].id = 97; // wideband CN 1759 parameters.codecs[2].id = 97; // wideband CN
2144 parameters.codecs[4].id = 98; // DTMF 1760 parameters.codecs[4].id = 98; // DTMF
2145 SetSendParameters(parameters); 1761 SetSendParameters(parameters);
2146 EXPECT_TRUE(channel_->AddSendStream( 1762 EXPECT_TRUE(channel_->AddSendStream(
2147 cricket::StreamParams::CreateLegacy(kSsrcX))); 1763 cricket::StreamParams::CreateLegacy(kSsrcX)));
2148 1764
2149 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1765 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2150 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1766 EXPECT_EQ(96, send_codec_spec.payload_type);
2151 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1767 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2152 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 1768 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2153 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2154 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 1769 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2155 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2156 EXPECT_TRUE(channel_->CanInsertDtmf()); 1770 EXPECT_TRUE(channel_->CanInsertDtmf());
2157 } 1771 }
2158 1772
2159 // Test that we only apply VAD if we have a CN codec that matches the 1773 // Test that we only apply VAD if we have a CN codec that matches the
2160 // send codec clockrate. 1774 // send codec clockrate.
2161 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 1775 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
2162 EXPECT_TRUE(SetupSendStream()); 1776 EXPECT_TRUE(SetupSendStream());
2163 cricket::AudioSendParameters parameters; 1777 cricket::AudioSendParameters parameters;
2164 // Set ISAC(16K) and CN(16K). VAD should be activated. 1778 // Set ISAC(16K) and CN(16K). VAD should be activated.
2165 parameters.codecs.push_back(kIsacCodec); 1779 parameters.codecs.push_back(kIsacCodec);
2166 parameters.codecs.push_back(kCn16000Codec); 1780 parameters.codecs.push_back(kCn16000Codec);
2167 parameters.codecs[1].id = 97; 1781 parameters.codecs[1].id = 97;
2168 SetSendParameters(parameters); 1782 SetSendParameters(parameters);
2169 { 1783 {
2170 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1784 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2171 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1785 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2172 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 1786 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2173 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2174 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 1787 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2175 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2176 } 1788 }
2177 // Set PCMU(8K) and CN(16K). VAD should not be activated. 1789 // Set PCMU(8K) and CN(16K). VAD should not be activated.
2178 parameters.codecs[0] = kPcmuCodec; 1790 parameters.codecs[0] = kPcmuCodec;
2179 SetSendParameters(parameters); 1791 SetSendParameters(parameters);
2180 { 1792 {
2181 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1793 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2182 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); 1794 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str());
2183 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 1795 EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
2184 } 1796 }
2185 // Set PCMU(8K) and CN(8K). VAD should be activated. 1797 // Set PCMU(8K) and CN(8K). VAD should be activated.
2186 parameters.codecs[1] = kCn8000Codec; 1798 parameters.codecs[1] = kCn8000Codec;
2187 SetSendParameters(parameters); 1799 SetSendParameters(parameters);
2188 { 1800 {
2189 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1801 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2190 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); 1802 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str());
2191 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 1803 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2192 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2193 EXPECT_EQ(13, send_codec_spec.cng_payload_type); 1804 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
2194 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
2195 } 1805 }
2196 // Set ISAC(16K) and CN(8K). VAD should not be activated. 1806 // Set ISAC(16K) and CN(8K). VAD should not be activated.
2197 parameters.codecs[0] = kIsacCodec; 1807 parameters.codecs[0] = kIsacCodec;
2198 SetSendParameters(parameters); 1808 SetSendParameters(parameters);
2199 { 1809 {
2200 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1810 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2201 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1811 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2202 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 1812 EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
2203 } 1813 }
2204 } 1814 }
2205 1815
2206 // Test that we perform case-insensitive matching of codec names. 1816 // Test that we perform case-insensitive matching of codec names.
2207 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 1817 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
2208 EXPECT_TRUE(SetupSendStream()); 1818 EXPECT_TRUE(SetupSendStream());
2209 cricket::AudioSendParameters parameters; 1819 cricket::AudioSendParameters parameters;
2210 parameters.codecs.push_back(kIsacCodec); 1820 parameters.codecs.push_back(kIsacCodec);
2211 parameters.codecs.push_back(kPcmuCodec); 1821 parameters.codecs.push_back(kPcmuCodec);
2212 parameters.codecs.push_back(kCn16000Codec); 1822 parameters.codecs.push_back(kCn16000Codec);
2213 parameters.codecs.push_back(kCn8000Codec); 1823 parameters.codecs.push_back(kCn8000Codec);
2214 parameters.codecs.push_back(kTelephoneEventCodec1); 1824 parameters.codecs.push_back(kTelephoneEventCodec1);
2215 parameters.codecs[0].name = "iSaC"; 1825 parameters.codecs[0].name = "iSaC";
2216 parameters.codecs[0].id = 96; 1826 parameters.codecs[0].id = 96;
2217 parameters.codecs[2].id = 97; // wideband CN 1827 parameters.codecs[2].id = 97; // wideband CN
2218 parameters.codecs[4].id = 98; // DTMF 1828 parameters.codecs[4].id = 98; // DTMF
2219 SetSendParameters(parameters); 1829 SetSendParameters(parameters);
2220 const auto& send_codec_spec = GetSendStreamConfig(kSsrcX).send_codec_spec; 1830 const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
2221 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); 1831 EXPECT_EQ(96, send_codec_spec.payload_type);
2222 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1832 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2223 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); 1833 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2224 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2225 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 1834 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2226 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2227 EXPECT_TRUE(channel_->CanInsertDtmf()); 1835 EXPECT_TRUE(channel_->CanInsertDtmf());
2228 } 1836 }
2229 1837
2230 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { 1838 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake {
2231 public: 1839 public:
2232 WebRtcVoiceEngineWithSendSideBweTest() 1840 WebRtcVoiceEngineWithSendSideBweTest()
2233 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} 1841 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {}
2234 }; 1842 };
2235 1843
2236 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, 1844 TEST_F(WebRtcVoiceEngineWithSendSideBweTest,
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
2374 // Set ISAC(16K) and CN(16K). VAD should be activated. 1982 // Set ISAC(16K) and CN(16K). VAD should be activated.
2375 parameters.codecs.push_back(kIsacCodec); 1983 parameters.codecs.push_back(kIsacCodec);
2376 parameters.codecs.push_back(kCn16000Codec); 1984 parameters.codecs.push_back(kCn16000Codec);
2377 parameters.codecs[1].id = 97; 1985 parameters.codecs[1].id = 97;
2378 SetSendParameters(parameters); 1986 SetSendParameters(parameters);
2379 1987
2380 // Verify ISAC and VAD are corrected configured on all send channels. 1988 // Verify ISAC and VAD are corrected configured on all send channels.
2381 for (uint32_t ssrc : kSsrcs4) { 1989 for (uint32_t ssrc : kSsrcs4) {
2382 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); 1990 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2383 const auto& send_codec_spec = 1991 const auto& send_codec_spec =
2384 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; 1992 *call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2385 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); 1993 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
2386 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); 1994 EXPECT_EQ(1, send_codec_spec.format.num_channels);
2387 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2388 EXPECT_EQ(97, send_codec_spec.cng_payload_type); 1995 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2389 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2390 } 1996 }
2391 1997
2392 // Change to PCMU(8K) and CN(16K). 1998 // Change to PCMU(8K) and CN(16K).
2393 parameters.codecs[0] = kPcmuCodec; 1999 parameters.codecs[0] = kPcmuCodec;
2394 SetSendParameters(parameters); 2000 SetSendParameters(parameters);
2395 for (uint32_t ssrc : kSsrcs4) { 2001 for (uint32_t ssrc : kSsrcs4) {
2396 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); 2002 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2397 const auto& send_codec_spec = 2003 const auto& send_codec_spec =
2398 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; 2004 *call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2399 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); 2005 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str());
2400 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); 2006 EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
2401 } 2007 }
2402 } 2008 }
2403 2009
2404 // Test we can SetSend on all send streams correctly. 2010 // Test we can SetSend on all send streams correctly.
2405 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { 2011 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) {
2406 SetupForMultiSendStream(); 2012 SetupForMultiSendStream();
2407 2013
2408 // Create the send channels and they should be a "not sending" date. 2014 // Create the send channels and they should be a "not sending" date.
2409 for (uint32_t ssrc : kSsrcs4) { 2015 for (uint32_t ssrc : kSsrcs4) {
2410 EXPECT_TRUE(channel_->AddSendStream( 2016 EXPECT_TRUE(channel_->AddSendStream(
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2586 } 2192 }
2587 2193
2588 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) { 2194 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) {
2589 EXPECT_TRUE(SetupSendStream()); 2195 EXPECT_TRUE(SetupSendStream());
2590 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); 2196 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
2591 send_parameters_.options.audio_network_adaptor_config = 2197 send_parameters_.options.audio_network_adaptor_config =
2592 rtc::Optional<std::string>("1234"); 2198 rtc::Optional<std::string>("1234");
2593 SetSendParameters(send_parameters_); 2199 SetSendParameters(send_parameters_);
2594 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2200 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
2595 GetAudioNetworkAdaptorConfig(kSsrcX)); 2201 GetAudioNetworkAdaptorConfig(kSsrcX));
2596 const int initial_num = call_.GetNumCreatedSendStreams();
2597 cricket::AudioOptions options; 2202 cricket::AudioOptions options;
2598 options.audio_network_adaptor = rtc::Optional<bool>(false); 2203 options.audio_network_adaptor = rtc::Optional<bool>(false);
2599 SetAudioSend(kSsrcX, true, nullptr, &options); 2204 SetAudioSend(kSsrcX, true, nullptr, &options);
2600 // AudioSendStream expected to be recreated.
2601 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
2602 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrcX)); 2205 EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrcX));
2603 } 2206 }
2604 2207
2605 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) { 2208 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) {
2606 EXPECT_TRUE(SetupSendStream()); 2209 EXPECT_TRUE(SetupSendStream());
2607 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true); 2210 send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
2608 send_parameters_.options.audio_network_adaptor_config = 2211 send_parameters_.options.audio_network_adaptor_config =
2609 rtc::Optional<std::string>("1234"); 2212 rtc::Optional<std::string>("1234");
2610 SetSendParameters(send_parameters_); 2213 SetSendParameters(send_parameters_);
2611 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config, 2214 EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after
3664 webrtc::RtcEventLogNullImpl event_log; 3267 webrtc::RtcEventLogNullImpl event_log;
3665 std::unique_ptr<webrtc::Call> call( 3268 std::unique_ptr<webrtc::Call> call(
3666 webrtc::Call::Create(webrtc::Call::Config(&event_log))); 3269 webrtc::Call::Create(webrtc::Call::Config(&event_log)));
3667 cricket::VoiceMediaChannel* channel = engine.CreateChannel( 3270 cricket::VoiceMediaChannel* channel = engine.CreateChannel(
3668 call.get(), cricket::MediaConfig(), cricket::AudioOptions()); 3271 call.get(), cricket::MediaConfig(), cricket::AudioOptions());
3669 EXPECT_TRUE(channel != nullptr); 3272 EXPECT_TRUE(channel != nullptr);
3670 delete channel; 3273 delete channel;
3671 } 3274 }
3672 } 3275 }
3673 3276
3674 // Tests that the library is configured with the codecs we want. 3277 // Verify the payload id of common audio codecs, including CN, ISAC, and G722.
ossu 2017/04/25 11:58:11 Generally tests ToCodecInst, which no longer exist
3675 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { 3278 TEST(WebRtcVoiceEngineTest, HasCorrectPayloadTypeMapping) {
3676 // TODO(ossu): These tests should move into a future "builtin audio codecs"
3677 // module.
3678
3679 // Check codecs by name.
3680 #ifdef WEBRTC_CODEC_OPUS
3681 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3682 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr));
3683 #endif
3684 #if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX))
3685 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3686 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr));
3687 #endif
3688 #if (defined(WEBRTC_CODEC_ISAC))
3689 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3690 cricket::AudioCodec(96, "ISAC", 32000, 0, 1), nullptr));
3691 #endif
3692 #ifdef WEBRTC_CODEC_ILBC
3693 // Check that name matching is case-insensitive.
3694 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3695 cricket::AudioCodec(96, "ILBC", 8000, 0, 1), nullptr));
3696 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3697 cricket::AudioCodec(96, "iLBC", 8000, 0, 1), nullptr));
3698 #endif
3699 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3700 cricket::AudioCodec(96, "CN", 32000, 0, 1), nullptr));
3701 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3702 cricket::AudioCodec(96, "CN", 16000, 0, 1), nullptr));
3703 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3704 cricket::AudioCodec(96, "telephone-event", 8000, 0, 1), nullptr));
3705 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3706 cricket::AudioCodec(96, "telephone-event", 16000, 0, 1), nullptr));
3707 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3708 cricket::AudioCodec(96, "telephone-event", 32000, 0, 1), nullptr));
3709 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3710 cricket::AudioCodec(96, "telephone-event", 48000, 0, 1), nullptr));
3711 // Check codecs with an id by id.
3712 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3713 cricket::AudioCodec(0, "", 8000, 0, 1), nullptr)); // PCMU
3714 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3715 cricket::AudioCodec(8, "", 8000, 0, 1), nullptr)); // PCMA
3716 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3717 cricket::AudioCodec(9, "", 8000, 0, 1), nullptr)); // G722
3718 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3719 cricket::AudioCodec(13, "", 8000, 0, 1), nullptr)); // CN
3720 // Check sample/bitrate matching.
3721 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(
3722 cricket::AudioCodec(0, "PCMU", 8000, 64000, 1), nullptr));
3723 // Check that bad codecs fail.
3724 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3725 cricket::AudioCodec(99, "ABCD", 0, 0, 1), nullptr));
3726 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3727 cricket::AudioCodec(88, "", 0, 0, 1), nullptr));
3728 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3729 cricket::AudioCodec(0, "", 0, 0, 2), nullptr));
3730 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3731 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr));
3732 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst(
3733 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr));
3734
3735 // Verify the payload id of common audio codecs, including CN, ISAC, and G722.
3736 // TODO(ossu): Why are the payload types of codecs with non-static payload 3279 // TODO(ossu): Why are the payload types of codecs with non-static payload
3737 // type assignments checked here? It shouldn't really matter. 3280 // type assignments checked here? It shouldn't really matter.
3738 cricket::WebRtcVoiceEngine engine( 3281 cricket::WebRtcVoiceEngine engine(
3739 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); 3282 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr);
3740 for (const cricket::AudioCodec& codec : engine.send_codecs()) { 3283 for (const cricket::AudioCodec& codec : engine.send_codecs()) {
3741 if (codec.name == "CN" && codec.clockrate == 16000) { 3284 auto is_codec = [&codec](const char* name, int clockrate = 0) {
3285 return STR_CASE_CMP(codec.name.c_str(), name) == 0 &&
3286 (clockrate == 0 || codec.clockrate == clockrate);
3287 };
3288 if (is_codec("CN", 16000)) {
3742 EXPECT_EQ(105, codec.id); 3289 EXPECT_EQ(105, codec.id);
3743 } else if (codec.name == "CN" && codec.clockrate == 32000) { 3290 } else if (is_codec("CN", 32000)) {
3744 EXPECT_EQ(106, codec.id); 3291 EXPECT_EQ(106, codec.id);
3745 } else if (codec.name == "ISAC" && codec.clockrate == 16000) { 3292 } else if (is_codec("ISAC", 16000)) {
3746 EXPECT_EQ(103, codec.id); 3293 EXPECT_EQ(103, codec.id);
3747 } else if (codec.name == "ISAC" && codec.clockrate == 32000) { 3294 } else if (is_codec("ISAC", 32000)) {
3748 EXPECT_EQ(104, codec.id); 3295 EXPECT_EQ(104, codec.id);
3749 } else if (codec.name == "G722" && codec.clockrate == 8000) { 3296 } else if (is_codec("G722", 8000)) {
3750 EXPECT_EQ(9, codec.id); 3297 EXPECT_EQ(9, codec.id);
3751 } else if (codec.name == "telephone-event" && codec.clockrate == 8000) { 3298 } else if (is_codec("telephone-event", 8000)) {
3752 EXPECT_EQ(126, codec.id); 3299 EXPECT_EQ(126, codec.id);
3753 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. 3300 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned.
3754 // Remove these checks once both send and receive side assigns payload types 3301 // Remove these checks once both send and receive side assigns payload types
3755 // dynamically. 3302 // dynamically.
3756 } else if (codec.name == "telephone-event" && codec.clockrate == 16000) { 3303 } else if (is_codec("telephone-event", 16000)) {
3757 EXPECT_EQ(113, codec.id); 3304 EXPECT_EQ(113, codec.id);
3758 } else if (codec.name == "telephone-event" && codec.clockrate == 32000) { 3305 } else if (is_codec("telephone-event", 32000)) {
3759 EXPECT_EQ(112, codec.id); 3306 EXPECT_EQ(112, codec.id);
3760 } else if (codec.name == "telephone-event" && codec.clockrate == 48000) { 3307 } else if (is_codec("telephone-event", 48000)) {
3761 EXPECT_EQ(110, codec.id); 3308 EXPECT_EQ(110, codec.id);
3762 } else if (codec.name == "opus") { 3309 } else if (is_codec("opus")) {
3763 EXPECT_EQ(111, codec.id); 3310 EXPECT_EQ(111, codec.id);
3764 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); 3311 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end());
3765 EXPECT_EQ("10", codec.params.find("minptime")->second); 3312 EXPECT_EQ("10", codec.params.find("minptime")->second);
3766 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); 3313 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end());
3767 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); 3314 EXPECT_EQ("1", codec.params.find("useinbandfec")->second);
3768 } 3315 }
3769 } 3316 }
3770 } 3317 }
3771 3318
3772 // Tests that VoE supports at least 32 channels 3319 // Tests that VoE supports at least 32 channels
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3881 // Without this cast, the comparison turned unsigned and, thus, failed for -1. 3428 // Without this cast, the comparison turned unsigned and, thus, failed for -1.
3882 const int num_specs = static_cast<int>(specs.size()); 3429 const int num_specs = static_cast<int>(specs.size());
3883 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); 3430 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs);
3884 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); 3431 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs);
3885 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); 3432 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1);
3886 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); 3433 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs);
3887 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); 3434 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs);
3888 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); 3435 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs);
3889 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); 3436 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs);
3890 } 3437 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698