OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... | |
30 #include "webrtc/pc/channel.h" | 30 #include "webrtc/pc/channel.h" |
31 #include "webrtc/test/field_trial.h" | 31 #include "webrtc/test/field_trial.h" |
32 | 32 |
33 using testing::Return; | 33 using testing::Return; |
34 using testing::StrictMock; | 34 using testing::StrictMock; |
35 | 35 |
36 namespace { | 36 namespace { |
37 | 37 |
38 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); | 38 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); |
39 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); | 39 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); |
40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); | 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 32000, 2); |
41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); | 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); | 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); | 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); | 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
45 const cricket::AudioCodec | 45 const cricket::AudioCodec |
46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); | 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
47 const cricket::AudioCodec | 47 const cricket::AudioCodec |
48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); | 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
49 | 49 |
50 const uint32_t kSsrc1 = 0x99; | 50 const uint32_t kSsrc1 = 0x99; |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
294 return channel_->SetRtpSendParameters(ssrc, parameters); | 294 return channel_->SetRtpSendParameters(ssrc, parameters); |
295 } | 295 } |
296 | 296 |
297 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { | 297 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { |
298 cricket::AudioSendParameters send_parameters; | 298 cricket::AudioSendParameters send_parameters; |
299 send_parameters.codecs.push_back(codec); | 299 send_parameters.codecs.push_back(codec); |
300 send_parameters.max_bandwidth_bps = bitrate; | 300 send_parameters.max_bandwidth_bps = bitrate; |
301 SetSendParameters(send_parameters); | 301 SetSendParameters(send_parameters); |
302 } | 302 } |
303 | 303 |
304 void CheckSendCodec(int32_t ssrc, | 304 void CheckSendCodecBitrate(int32_t ssrc, |
305 const char expected_name[], | 305 const char expected_name[], |
306 int expected_channels, | 306 int expected_bitrate) { |
307 int expected_bitrate) { | 307 const auto& spec = GetSendStreamConfig(ssrc).send_codec_spec; |
308 const auto& codec = GetSendStreamConfig(ssrc).send_codec_spec.codec_inst; | 308 EXPECT_EQ(expected_name, spec.format.name); |
309 EXPECT_STREQ(expected_name, codec.plname); | 309 EXPECT_EQ(expected_bitrate, spec.target_bitrate_bps); |
310 EXPECT_EQ(expected_channels, codec.channels); | |
311 EXPECT_EQ(expected_bitrate, codec.rate); | |
312 } | 310 } |
313 | 311 |
314 int GetOpusMaxPlaybackRate(int32_t ssrc) { | 312 rtc::Optional<int> GetCodecBitrate(int32_t ssrc) { |
315 return GetSendStreamConfig(ssrc).send_codec_spec.opus_max_playback_rate; | 313 return GetSendStreamConfig(ssrc).send_codec_spec.target_bitrate_bps; |
316 } | |
317 | |
318 bool GetOpusDtx(int32_t ssrc) { | |
319 return GetSendStreamConfig(ssrc).send_codec_spec.enable_opus_dtx; | |
320 } | |
321 | |
322 bool GetCodecFec(int32_t ssrc) { | |
323 return GetSendStreamConfig(ssrc).send_codec_spec.enable_codec_fec; | |
324 } | |
325 | |
326 int GetCodecBitrate(int32_t ssrc) { | |
327 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.rate; | |
328 } | |
329 | |
330 int GetCodecPacSize(int32_t ssrc) { | |
331 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.pacsize; | |
332 } | 314 } |
333 | 315 |
334 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { | 316 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { |
335 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; | 317 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; |
336 } | 318 } |
337 | 319 |
338 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, | 320 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, |
339 int global_max, | 321 int global_max, |
340 int stream_max, | 322 int stream_max, |
341 bool expected_result, | 323 bool expected_result, |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
655 // Tests that the list of supported codecs is created properly and ordered | 637 // Tests that the list of supported codecs is created properly and ordered |
656 // correctly (such that opus appears first). | 638 // correctly (such that opus appears first). |
657 // TODO(ossu): This test should move into a separate builtin audio codecs | 639 // TODO(ossu): This test should move into a separate builtin audio codecs |
658 // module. | 640 // module. |
659 TEST_F(WebRtcVoiceEngineTestFake, CodecOrder) { | 641 TEST_F(WebRtcVoiceEngineTestFake, CodecOrder) { |
660 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); | 642 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); |
661 ASSERT_FALSE(codecs.empty()); | 643 ASSERT_FALSE(codecs.empty()); |
662 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); | 644 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); |
663 EXPECT_EQ(48000, codecs[0].clockrate); | 645 EXPECT_EQ(48000, codecs[0].clockrate); |
664 EXPECT_EQ(2, codecs[0].channels); | 646 EXPECT_EQ(2, codecs[0].channels); |
665 EXPECT_EQ(64000, codecs[0].bitrate); | |
666 } | 647 } |
667 | 648 |
668 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { | 649 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { |
669 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); | 650 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); |
670 bool opus_found = false; | 651 bool opus_found = false; |
671 for (cricket::AudioCodec codec : codecs) { | 652 for (cricket::AudioCodec codec : codecs) { |
672 if (codec.name == "opus") { | 653 if (codec.name == "opus") { |
673 EXPECT_TRUE(HasTransportCc(codec)); | 654 EXPECT_TRUE(HasTransportCc(codec)); |
674 opus_found = true; | 655 opus_found = true; |
675 } | 656 } |
676 } | 657 } |
677 EXPECT_TRUE(opus_found); | 658 EXPECT_TRUE(opus_found); |
678 } | 659 } |
679 | 660 |
680 // Tests that we can find codecs by name or id, and that we interpret the | |
681 // clockrate and bitrate fields properly. | |
682 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { | |
683 cricket::AudioCodec codec; | |
684 webrtc::CodecInst codec_inst; | |
685 // Find PCMU with explicit clockrate and bitrate. | |
686 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); | |
687 // Find ISAC with explicit clockrate and 0 bitrate. | |
688 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); | |
689 // Find telephone-event with explicit clockrate and 0 bitrate. | |
690 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec1, | |
691 &codec_inst)); | |
692 // Find telephone-event with explicit clockrate and 0 bitrate. | |
693 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec2, | |
694 &codec_inst)); | |
695 // Find ISAC with a different payload id. | |
696 codec = kIsacCodec; | |
697 codec.id = 127; | |
698 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
699 EXPECT_EQ(codec.id, codec_inst.pltype); | |
700 // Find PCMU with a 0 clockrate. | |
701 codec = kPcmuCodec; | |
702 codec.clockrate = 0; | |
703 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
704 EXPECT_EQ(codec.id, codec_inst.pltype); | |
705 EXPECT_EQ(8000, codec_inst.plfreq); | |
706 // Find PCMU with a 0 bitrate. | |
707 codec = kPcmuCodec; | |
708 codec.bitrate = 0; | |
709 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
710 EXPECT_EQ(codec.id, codec_inst.pltype); | |
711 EXPECT_EQ(64000, codec_inst.rate); | |
712 // Find ISAC with an explicit bitrate. | |
713 codec = kIsacCodec; | |
714 codec.bitrate = 32000; | |
715 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
716 EXPECT_EQ(codec.id, codec_inst.pltype); | |
717 EXPECT_EQ(32000, codec_inst.rate); | |
718 } | |
719 | |
720 // Test that we set our inbound codecs properly, including changing PT. | 661 // Test that we set our inbound codecs properly, including changing PT. |
721 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 662 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
722 EXPECT_TRUE(SetupChannel()); | 663 EXPECT_TRUE(SetupChannel()); |
723 cricket::AudioRecvParameters parameters; | 664 cricket::AudioRecvParameters parameters; |
724 parameters.codecs.push_back(kIsacCodec); | 665 parameters.codecs.push_back(kIsacCodec); |
725 parameters.codecs.push_back(kPcmuCodec); | 666 parameters.codecs.push_back(kPcmuCodec); |
726 parameters.codecs.push_back(kTelephoneEventCodec1); | 667 parameters.codecs.push_back(kTelephoneEventCodec1); |
727 parameters.codecs.push_back(kTelephoneEventCodec2); | 668 parameters.codecs.push_back(kTelephoneEventCodec2); |
728 parameters.codecs[0].id = 106; // collide with existing CN 32k | 669 parameters.codecs[0].id = 106; // collide with existing CN 32k |
729 parameters.codecs[2].id = 126; | 670 parameters.codecs[2].id = 126; |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
920 // Test that when autobw is enabled, bitrate is kept as the default | 861 // Test that when autobw is enabled, bitrate is kept as the default |
921 // value. autobw is enabled for the following tests because the target | 862 // value. autobw is enabled for the following tests because the target |
922 // bitrate is <= 0. | 863 // bitrate is <= 0. |
923 | 864 |
924 // ISAC, default bitrate == 32000. | 865 // ISAC, default bitrate == 32000. |
925 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000); | 866 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000); |
926 | 867 |
927 // PCMU, default bitrate == 64000. | 868 // PCMU, default bitrate == 64000. |
928 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000); | 869 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000); |
929 | 870 |
930 // opus, default bitrate == 64000. | 871 // opus, default bitrate == 32000 in mono. |
931 TestMaxSendBandwidth(kOpusCodec, -1, true, 64000); | 872 TestMaxSendBandwidth(kOpusCodec, -1, true, 32000); |
932 } | 873 } |
933 | 874 |
934 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { | 875 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { |
935 EXPECT_TRUE(SetupSendStream()); | 876 EXPECT_TRUE(SetupSendStream()); |
936 | 877 |
937 // Test that the bitrate of a multi-rate codec is always the maximum. | |
938 | |
939 // ISAC, default bitrate == 32000. | 878 // ISAC, default bitrate == 32000. |
940 TestMaxSendBandwidth(kIsacCodec, 40000, true, 40000); | |
941 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000); | 879 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000); |
942 // Rates above the max (56000) should be capped. | 880 // Rates above the max (56000) should be capped. |
943 TestMaxSendBandwidth(kIsacCodec, 100000, true, 56000); | 881 TestMaxSendBandwidth(kIsacCodec, 100000, true, 32000); |
944 | 882 |
945 // opus, default bitrate == 64000. | 883 // opus, default bitrate == 64000. |
946 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000); | 884 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000); |
947 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000); | 885 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000); |
948 // Rates above the max (510000) should be capped. | 886 // Rates above the max (510000) should be capped. |
949 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000); | 887 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000); |
950 } | 888 } |
951 | 889 |
952 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { | 890 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { |
953 EXPECT_TRUE(SetupSendStream()); | 891 EXPECT_TRUE(SetupSendStream()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
996 send_parameters_.max_bandwidth_bps = 128; | 934 send_parameters_.max_bandwidth_bps = 128; |
997 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 935 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
998 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 936 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); |
999 } | 937 } |
1000 | 938 |
1001 // Test that the per-stream bitrate limit and the global | 939 // Test that the per-stream bitrate limit and the global |
1002 // bitrate limit both apply. | 940 // bitrate limit both apply. |
1003 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { | 941 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { |
1004 EXPECT_TRUE(SetupSendStream()); | 942 EXPECT_TRUE(SetupSendStream()); |
1005 | 943 |
1006 // opus, default bitrate == 64000. | 944 // opus, default bitrate == 32000. |
1007 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); | 945 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 32000); |
1008 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); | 946 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); |
1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); | 947 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); |
1010 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); | 948 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); |
1011 | 949 |
1012 // CBR codecs allow both maximums to exceed the bitrate. | 950 // CBR codecs allow both maximums to exceed the bitrate. |
1013 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); | 951 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); |
1014 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); | 952 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); |
1015 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); | 953 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); |
1016 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); | 954 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); |
1017 | 955 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1082 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { | 1020 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { |
1083 SetupForMultiSendStream(); | 1021 SetupForMultiSendStream(); |
1084 // Create send streams. | 1022 // Create send streams. |
1085 for (uint32_t ssrc : kSsrcs4) { | 1023 for (uint32_t ssrc : kSsrcs4) { |
1086 EXPECT_TRUE( | 1024 EXPECT_TRUE( |
1087 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); | 1025 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); |
1088 } | 1026 } |
1089 // Configure one stream to be limited by the stream config, another to be | 1027 // Configure one stream to be limited by the stream config, another to be |
1090 // limited by the global max, and the third one with no per-stream limit | 1028 // limited by the global max, and the third one with no per-stream limit |
1091 // (still subject to the global limit). | 1029 // (still subject to the global limit). |
1092 SetGlobalMaxBitrate(kOpusCodec, 64000); | 1030 SetGlobalMaxBitrate(kOpusCodec, 32000); |
1093 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 48000)); | 1031 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 24000)); |
1094 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 96000)); | 1032 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 48000)); |
1095 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); | 1033 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); |
1096 | 1034 |
1097 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); | 1035 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0])); |
1098 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[1])); | 1036 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[1])); |
1099 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); | 1037 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2])); |
1100 | 1038 |
1101 // Remove the global cap; the streams should switch to their respective | 1039 // Remove the global cap; the streams should switch to their respective |
1102 // maximums (or remain unchanged if there was no other limit on them.) | 1040 // maximums (or remain unchanged if there was no other limit on them.) |
1103 SetGlobalMaxBitrate(kOpusCodec, -1); | 1041 SetGlobalMaxBitrate(kOpusCodec, -1); |
1104 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); | 1042 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0])); |
1105 EXPECT_EQ(96000, GetCodecBitrate(kSsrcs4[1])); | 1043 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[1])); |
1106 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); | 1044 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2])); |
1107 } | 1045 } |
1108 | 1046 |
1109 // Test that GetRtpSendParameters returns the currently configured codecs. | 1047 // Test that GetRtpSendParameters returns the currently configured codecs. |
1110 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { | 1048 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { |
1111 EXPECT_TRUE(SetupSendStream()); | 1049 EXPECT_TRUE(SetupSendStream()); |
1112 cricket::AudioSendParameters parameters; | 1050 cricket::AudioSendParameters parameters; |
1113 parameters.codecs.push_back(kIsacCodec); | 1051 parameters.codecs.push_back(kIsacCodec); |
1114 parameters.codecs.push_back(kPcmuCodec); | 1052 parameters.codecs.push_back(kPcmuCodec); |
1115 SetSendParameters(parameters); | 1053 SetSendParameters(parameters); |
1116 | 1054 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1196 cricket::AudioSendParameters parameters; | 1134 cricket::AudioSendParameters parameters; |
1197 parameters.codecs.push_back(kIsacCodec); | 1135 parameters.codecs.push_back(kIsacCodec); |
1198 parameters.codecs.push_back(kPcmuCodec); | 1136 parameters.codecs.push_back(kPcmuCodec); |
1199 parameters.codecs.push_back(kCn8000Codec); | 1137 parameters.codecs.push_back(kCn8000Codec); |
1200 parameters.codecs[0].id = 96; | 1138 parameters.codecs[0].id = 96; |
1201 parameters.codecs[0].bitrate = 48000; | 1139 parameters.codecs[0].bitrate = 48000; |
1202 const int initial_num = call_.GetNumCreatedSendStreams(); | 1140 const int initial_num = call_.GetNumCreatedSendStreams(); |
1203 SetSendParameters(parameters); | 1141 SetSendParameters(parameters); |
1204 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1142 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1205 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1143 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1206 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1144 EXPECT_EQ(96, send_codec_spec.payload_type); |
1207 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); | 1145 // EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); |
1208 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1146 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
1209 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1147 EXPECT_NE(send_codec_spec.format.clockrate_hz, |
1210 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1148 8000); |
1211 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 1149 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
1150 // EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | |
1212 EXPECT_FALSE(channel_->CanInsertDtmf()); | 1151 EXPECT_FALSE(channel_->CanInsertDtmf()); |
1213 } | 1152 } |
1214 | 1153 |
1215 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried | 1154 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried |
1216 // to apply. | 1155 // to apply. |
1217 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { | 1156 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { |
1218 EXPECT_TRUE(SetupSendStream()); | 1157 EXPECT_TRUE(SetupSendStream()); |
1219 cricket::AudioSendParameters parameters; | 1158 cricket::AudioSendParameters parameters; |
1220 parameters.codecs.push_back(kIsacCodec); | 1159 parameters.codecs.push_back(kIsacCodec); |
1221 parameters.codecs.push_back(kPcmuCodec); | 1160 parameters.codecs.push_back(kPcmuCodec); |
1222 parameters.codecs.push_back(kCn8000Codec); | 1161 parameters.codecs.push_back(kCn8000Codec); |
1223 parameters.codecs[0].id = 96; | 1162 parameters.codecs[0].id = 96; |
1224 parameters.codecs[0].bitrate = 48000; | 1163 parameters.codecs[0].bitrate = 48000; |
1225 const int initial_num = call_.GetNumCreatedSendStreams(); | 1164 const int initial_num = call_.GetNumCreatedSendStreams(); |
1226 SetSendParameters(parameters); | 1165 SetSendParameters(parameters); |
1227 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1166 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1228 // Calling SetSendCodec again with same codec which is already set. | 1167 // Calling SetSendCodec again with same codec which is already set. |
1229 // In this case media channel shouldn't send codec to VoE. | 1168 // In this case media channel shouldn't send codec to VoE. |
1230 SetSendParameters(parameters); | 1169 SetSendParameters(parameters); |
1231 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1170 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
1232 } | 1171 } |
1233 | 1172 |
1234 // Verify that G722 is set with 16000 samples per second to WebRTC. | 1173 // TODO(ossu): Move these tests into tests for Audio{Encoder,Decoder}Opus or, |
1235 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { | 1174 // possibly, BuiltinAudio{Encoder,Decoder}Factory; this depends on where we move |
1236 EXPECT_TRUE(SetupSendStream()); | 1175 // validation. |
1237 cricket::AudioSendParameters parameters; | |
1238 parameters.codecs.push_back(kG722CodecSdp); | |
1239 SetSendParameters(parameters); | |
1240 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | |
1241 EXPECT_STREQ("G722", gcodec.plname); | |
1242 EXPECT_EQ(1, gcodec.channels); | |
1243 EXPECT_EQ(16000, gcodec.plfreq); | |
1244 } | |
1245 | 1176 |
1246 // Test that if clockrate is not 48000 for opus, we fail. | 1177 // Test that if clockrate is not 48000 for opus, we fail. |
1247 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { | 1178 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { |
1248 EXPECT_TRUE(SetupSendStream()); | 1179 EXPECT_TRUE(SetupSendStream()); |
1249 cricket::AudioSendParameters parameters; | 1180 cricket::AudioSendParameters parameters; |
1250 parameters.codecs.push_back(kOpusCodec); | 1181 parameters.codecs.push_back(kOpusCodec); |
1251 parameters.codecs[0].bitrate = 0; | 1182 parameters.codecs[0].bitrate = 0; |
1252 parameters.codecs[0].clockrate = 50000; | 1183 parameters.codecs[0].clockrate = 50000; |
1253 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1184 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1254 } | 1185 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1299 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { | 1230 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { |
1300 EXPECT_TRUE(SetupSendStream()); | 1231 EXPECT_TRUE(SetupSendStream()); |
1301 cricket::AudioSendParameters parameters; | 1232 cricket::AudioSendParameters parameters; |
1302 parameters.codecs.push_back(kOpusCodec); | 1233 parameters.codecs.push_back(kOpusCodec); |
1303 parameters.codecs[0].bitrate = 0; | 1234 parameters.codecs[0].bitrate = 0; |
1304 parameters.codecs[0].channels = 1; | 1235 parameters.codecs[0].channels = 1; |
1305 parameters.codecs[0].params["stereo"] = "1"; | 1236 parameters.codecs[0].params["stereo"] = "1"; |
1306 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1237 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1307 } | 1238 } |
1308 | 1239 |
1309 // Test that with bitrate=0 and no stereo, | 1240 // Test that with bitrate=0 and no stereo, bitrate is 32000. |
1310 // channels and bitrate are 1 and 32000. | |
1311 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { | 1241 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { |
1312 EXPECT_TRUE(SetupSendStream()); | 1242 EXPECT_TRUE(SetupSendStream()); |
1313 cricket::AudioSendParameters parameters; | 1243 cricket::AudioSendParameters parameters; |
1314 parameters.codecs.push_back(kOpusCodec); | 1244 parameters.codecs.push_back(kOpusCodec); |
1315 parameters.codecs[0].bitrate = 0; | 1245 parameters.codecs[0].bitrate = 0; |
1316 SetSendParameters(parameters); | 1246 SetSendParameters(parameters); |
1317 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1247 CheckSendCodecBitrate(kSsrc1, "opus", 32000); |
1318 } | 1248 } |
1319 | 1249 |
1320 // Test that with bitrate=0 and stereo=0, | 1250 // Test that with bitrate=0 and stereo=0, bitrate is 32000. |
1321 // channels and bitrate are 1 and 32000. | |
1322 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { | 1251 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { |
1323 EXPECT_TRUE(SetupSendStream()); | 1252 EXPECT_TRUE(SetupSendStream()); |
1324 cricket::AudioSendParameters parameters; | 1253 cricket::AudioSendParameters parameters; |
1325 parameters.codecs.push_back(kOpusCodec); | 1254 parameters.codecs.push_back(kOpusCodec); |
1326 parameters.codecs[0].bitrate = 0; | 1255 parameters.codecs[0].bitrate = 0; |
1327 parameters.codecs[0].params["stereo"] = "0"; | 1256 parameters.codecs[0].params["stereo"] = "0"; |
1328 SetSendParameters(parameters); | 1257 SetSendParameters(parameters); |
1329 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1258 CheckSendCodecBitrate(kSsrc1, "opus", 32000); |
1330 } | 1259 } |
1331 | 1260 |
1332 // Test that with bitrate=invalid and stereo=0, | 1261 // Test that with bitrate=invalid and stereo=0, bitrate is 32000. |
1333 // channels and bitrate are 1 and 32000. | |
1334 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { | 1262 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { |
1335 EXPECT_TRUE(SetupSendStream()); | 1263 EXPECT_TRUE(SetupSendStream()); |
1336 cricket::AudioSendParameters parameters; | 1264 cricket::AudioSendParameters parameters; |
1337 parameters.codecs.push_back(kOpusCodec); | 1265 parameters.codecs.push_back(kOpusCodec); |
1338 parameters.codecs[0].params["stereo"] = "0"; | 1266 parameters.codecs[0].params["stereo"] = "0"; |
1339 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1267 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1340 parameters.codecs[0].bitrate = 5999; | 1268 parameters.codecs[0].bitrate = 5999; |
1341 SetSendParameters(parameters); | 1269 SetSendParameters(parameters); |
1342 CheckSendCodec(kSsrc1, "opus", 1, 6000); | 1270 CheckSendCodecBitrate(kSsrc1, "opus", 6000); |
1343 | 1271 |
1344 parameters.codecs[0].bitrate = 510001; | 1272 parameters.codecs[0].bitrate = 510001; |
1345 SetSendParameters(parameters); | 1273 SetSendParameters(parameters); |
1346 CheckSendCodec(kSsrc1, "opus", 1, 510000); | 1274 CheckSendCodecBitrate(kSsrc1, "opus", 510000); |
1347 } | 1275 } |
1348 | 1276 |
1349 // Test that with bitrate=0 and stereo=1, | 1277 // Test that with bitrate=0 and stereo=1, bitrate is 64000. |
1350 // channels and bitrate are 2 and 64000. | |
1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { | 1278 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { |
1352 EXPECT_TRUE(SetupSendStream()); | 1279 EXPECT_TRUE(SetupSendStream()); |
1353 cricket::AudioSendParameters parameters; | 1280 cricket::AudioSendParameters parameters; |
1354 parameters.codecs.push_back(kOpusCodec); | 1281 parameters.codecs.push_back(kOpusCodec); |
1355 parameters.codecs[0].bitrate = 0; | 1282 parameters.codecs[0].bitrate = 0; |
1356 parameters.codecs[0].params["stereo"] = "1"; | 1283 parameters.codecs[0].params["stereo"] = "1"; |
1357 SetSendParameters(parameters); | 1284 SetSendParameters(parameters); |
1358 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1285 CheckSendCodecBitrate(kSsrc1, "opus", 64000); |
1359 } | 1286 } |
1360 | 1287 |
1361 // Test that with bitrate=invalid and stereo=1, | 1288 // Test that with bitrate=invalid and stereo=1, bitrate is 64000. |
1362 // channels and bitrate are 2 and 64000. | |
1363 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { | 1289 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { |
1364 EXPECT_TRUE(SetupSendStream()); | 1290 EXPECT_TRUE(SetupSendStream()); |
1365 cricket::AudioSendParameters parameters; | 1291 cricket::AudioSendParameters parameters; |
1366 parameters.codecs.push_back(kOpusCodec); | 1292 parameters.codecs.push_back(kOpusCodec); |
1367 parameters.codecs[0].params["stereo"] = "1"; | 1293 parameters.codecs[0].params["stereo"] = "1"; |
1368 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1294 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
1369 parameters.codecs[0].bitrate = 5999; | 1295 parameters.codecs[0].bitrate = 5999; |
1370 SetSendParameters(parameters); | 1296 SetSendParameters(parameters); |
1371 CheckSendCodec(kSsrc1, "opus", 2, 6000); | 1297 CheckSendCodecBitrate(kSsrc1, "opus", 6000); |
1372 | 1298 |
1373 parameters.codecs[0].bitrate = 510001; | 1299 parameters.codecs[0].bitrate = 510001; |
1374 SetSendParameters(parameters); | 1300 SetSendParameters(parameters); |
1375 CheckSendCodec(kSsrc1, "opus", 2, 510000); | 1301 CheckSendCodecBitrate(kSsrc1, "opus", 510000); |
1376 } | 1302 } |
1377 | 1303 |
1378 // Test that with bitrate=N and stereo unset, | 1304 // Test that with bitrate=N and stereo unset, bitrate is N. |
1379 // channels and bitrate are 1 and N. | |
1380 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { | 1305 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { |
1381 EXPECT_TRUE(SetupSendStream()); | 1306 EXPECT_TRUE(SetupSendStream()); |
1382 cricket::AudioSendParameters parameters; | 1307 cricket::AudioSendParameters parameters; |
1383 parameters.codecs.push_back(kOpusCodec); | 1308 parameters.codecs.push_back(kOpusCodec); |
1384 parameters.codecs[0].bitrate = 96000; | 1309 parameters.codecs[0].bitrate = 96000; |
1385 SetSendParameters(parameters); | 1310 SetSendParameters(parameters); |
1386 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1311 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1387 EXPECT_EQ(111, gcodec.pltype); | 1312 EXPECT_EQ(111, spec.payload_type); |
1388 EXPECT_EQ(96000, gcodec.rate); | 1313 EXPECT_EQ(96000, spec.target_bitrate_bps); |
1389 EXPECT_STREQ("opus", gcodec.plname); | 1314 EXPECT_EQ("opus", spec.format.name); |
1390 EXPECT_EQ(1, gcodec.channels); | 1315 EXPECT_EQ(2, spec.format.num_channels); |
1391 EXPECT_EQ(48000, gcodec.plfreq); | 1316 EXPECT_EQ(48000, spec.format.clockrate_hz); |
1392 } | 1317 } |
1393 | 1318 |
1394 // Test that with bitrate=N and stereo=0, | 1319 // Test that with bitrate=N and stereo=0, bitrate is N. |
1395 // channels and bitrate are 1 and N. | |
1396 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { | 1320 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { |
1397 EXPECT_TRUE(SetupSendStream()); | 1321 EXPECT_TRUE(SetupSendStream()); |
1398 cricket::AudioSendParameters parameters; | 1322 cricket::AudioSendParameters parameters; |
1399 parameters.codecs.push_back(kOpusCodec); | 1323 parameters.codecs.push_back(kOpusCodec); |
1400 parameters.codecs[0].bitrate = 30000; | 1324 parameters.codecs[0].bitrate = 30000; |
1401 parameters.codecs[0].params["stereo"] = "0"; | 1325 parameters.codecs[0].params["stereo"] = "0"; |
1402 SetSendParameters(parameters); | 1326 SetSendParameters(parameters); |
1403 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1327 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
1404 } | 1328 } |
1405 | 1329 |
1406 // Test that with bitrate=N and without any parameters, | 1330 // Test that with bitrate=N and without any parameters, bitrate is N. |
1407 // channels and bitrate are 1 and N. | |
1408 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { | 1331 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { |
1409 EXPECT_TRUE(SetupSendStream()); | 1332 EXPECT_TRUE(SetupSendStream()); |
1410 cricket::AudioSendParameters parameters; | 1333 cricket::AudioSendParameters parameters; |
1411 parameters.codecs.push_back(kOpusCodec); | 1334 parameters.codecs.push_back(kOpusCodec); |
1412 parameters.codecs[0].bitrate = 30000; | 1335 parameters.codecs[0].bitrate = 30000; |
1413 SetSendParameters(parameters); | 1336 SetSendParameters(parameters); |
1414 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1337 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
1415 } | 1338 } |
1416 | 1339 |
1417 // Test that with bitrate=N and stereo=1, | 1340 // Test that with bitrate=N and stereo=1, bitrate is N. |
1418 // channels and bitrate are 2 and N. | |
1419 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { | 1341 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { |
1420 EXPECT_TRUE(SetupSendStream()); | 1342 EXPECT_TRUE(SetupSendStream()); |
1421 cricket::AudioSendParameters parameters; | 1343 cricket::AudioSendParameters parameters; |
1422 parameters.codecs.push_back(kOpusCodec); | 1344 parameters.codecs.push_back(kOpusCodec); |
1423 parameters.codecs[0].bitrate = 30000; | 1345 parameters.codecs[0].bitrate = 30000; |
1424 parameters.codecs[0].params["stereo"] = "1"; | 1346 parameters.codecs[0].params["stereo"] = "1"; |
1425 SetSendParameters(parameters); | 1347 SetSendParameters(parameters); |
1426 CheckSendCodec(kSsrc1, "opus", 2, 30000); | 1348 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
1427 } | |
1428 | |
1429 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. | |
1430 // Also test that the "maxaveragebitrate" can't be set to values outside the | |
1431 // range of 6000 and 510000 | |
1432 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { | |
1433 EXPECT_TRUE(SetupSendStream()); | |
1434 cricket::AudioSendParameters parameters; | |
1435 parameters.codecs.push_back(kOpusCodec); | |
1436 parameters.codecs[0].bitrate = 30000; | |
1437 // Ignore if less than 6000. | |
1438 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; | |
1439 SetSendParameters(parameters); | |
1440 EXPECT_EQ(6000, GetCodecBitrate(kSsrc1)); | |
1441 | |
1442 // Ignore if larger than 510000. | |
1443 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; | |
1444 SetSendParameters(parameters); | |
1445 EXPECT_EQ(510000, GetCodecBitrate(kSsrc1)); | |
1446 | |
1447 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; | |
1448 SetSendParameters(parameters); | |
1449 EXPECT_EQ(200000, GetCodecBitrate(kSsrc1)); | |
1450 } | 1349 } |
1451 | 1350 |
1452 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { | 1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { |
1453 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1352 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
1454 200000); | 1353 200000); |
1455 } | 1354 } |
1456 | 1355 |
1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { | 1356 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { |
1458 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 1357 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
1459 } | 1358 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1575 cricket::kParamValueEmpty)); | 1474 cricket::kParamValueEmpty)); |
1576 SetSendParameters(parameters); | 1475 SetSendParameters(parameters); |
1577 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1476 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); |
1578 | 1477 |
1579 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1478 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
1580 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1479 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
1581 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 1480 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
1582 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); | 1481 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); |
1583 } | 1482 } |
1584 | 1483 |
1585 // Test that without useinbandfec, Opus FEC is off. | |
1586 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { | |
1587 EXPECT_TRUE(SetupSendStream()); | |
1588 cricket::AudioSendParameters parameters; | |
1589 parameters.codecs.push_back(kOpusCodec); | |
1590 SetSendParameters(parameters); | |
1591 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
1592 } | |
1593 | |
1594 // Test that with useinbandfec=0, Opus FEC is off. | |
1595 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { | |
1596 EXPECT_TRUE(SetupSendStream()); | |
1597 cricket::AudioSendParameters parameters; | |
1598 parameters.codecs.push_back(kOpusCodec); | |
1599 parameters.codecs[0].bitrate = 0; | |
1600 parameters.codecs[0].params["useinbandfec"] = "0"; | |
1601 SetSendParameters(parameters); | |
1602 CheckSendCodec(kSsrc1, "opus", 1, 32000); | |
1603 } | |
1604 | |
1605 // Test that with useinbandfec=1, Opus FEC is on. | |
1606 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { | |
1607 EXPECT_TRUE(SetupSendStream()); | |
1608 cricket::AudioSendParameters parameters; | |
1609 parameters.codecs.push_back(kOpusCodec); | |
1610 parameters.codecs[0].bitrate = 0; | |
1611 parameters.codecs[0].params["useinbandfec"] = "1"; | |
1612 SetSendParameters(parameters); | |
1613 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
1614 CheckSendCodec(kSsrc1, "opus", 1, 32000); | |
1615 } | |
1616 | |
1617 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. | |
1618 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { | |
1619 EXPECT_TRUE(SetupSendStream()); | |
1620 cricket::AudioSendParameters parameters; | |
1621 parameters.codecs.push_back(kOpusCodec); | |
1622 parameters.codecs[0].bitrate = 0; | |
1623 parameters.codecs[0].params["stereo"] = "1"; | |
1624 parameters.codecs[0].params["useinbandfec"] = "1"; | |
1625 SetSendParameters(parameters); | |
1626 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
1627 CheckSendCodec(kSsrc1, "opus", 2, 64000); | |
1628 } | |
1629 | |
1630 // Test that with non-Opus, codec FEC is off. | |
1631 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { | |
1632 EXPECT_TRUE(SetupSendStream()); | |
1633 cricket::AudioSendParameters parameters; | |
1634 parameters.codecs.push_back(kIsacCodec); | |
1635 SetSendParameters(parameters); | |
1636 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
1637 } | |
1638 | |
1639 // Test the with non-Opus, even if useinbandfec=1, FEC is off. | |
1640 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { | |
1641 EXPECT_TRUE(SetupSendStream()); | |
1642 cricket::AudioSendParameters parameters; | |
1643 parameters.codecs.push_back(kIsacCodec); | |
1644 parameters.codecs[0].params["useinbandfec"] = "1"; | |
1645 SetSendParameters(parameters); | |
1646 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
1647 } | |
1648 | |
1649 // Test that Opus FEC status can be changed. | |
1650 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { | |
1651 EXPECT_TRUE(SetupSendStream()); | |
1652 cricket::AudioSendParameters parameters; | |
1653 parameters.codecs.push_back(kOpusCodec); | |
1654 SetSendParameters(parameters); | |
1655 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
1656 | |
1657 parameters.codecs[0].params["useinbandfec"] = "1"; | |
1658 SetSendParameters(parameters); | |
1659 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
1660 } | |
1661 | |
1662 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | 1484 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
1663 EXPECT_TRUE(SetupChannel()); | 1485 EXPECT_TRUE(SetupChannel()); |
1664 cricket::AudioSendParameters send_parameters; | 1486 cricket::AudioSendParameters send_parameters; |
1665 send_parameters.codecs.push_back(kOpusCodec); | 1487 send_parameters.codecs.push_back(kOpusCodec); |
1666 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | 1488 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
1667 SetSendParameters(send_parameters); | 1489 SetSendParameters(send_parameters); |
1668 | 1490 |
1669 cricket::AudioRecvParameters recv_parameters; | 1491 cricket::AudioRecvParameters recv_parameters; |
1670 recv_parameters.codecs.push_back(kIsacCodec); | 1492 recv_parameters.codecs.push_back(kIsacCodec); |
1671 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | 1493 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
1672 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 1494 EXPECT_TRUE(AddRecvStream(kSsrc1)); |
1673 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1495 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
1674 EXPECT_FALSE( | 1496 EXPECT_FALSE( |
1675 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1497 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
1676 | 1498 |
1677 send_parameters.codecs = engine_->send_codecs(); | 1499 send_parameters.codecs = engine_->send_codecs(); |
1678 SetSendParameters(send_parameters); | 1500 SetSendParameters(send_parameters); |
1679 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1501 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
1680 EXPECT_TRUE( | 1502 EXPECT_TRUE( |
1681 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1503 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
1682 } | 1504 } |
1683 | 1505 |
1684 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | |
1685 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | |
1686 EXPECT_TRUE(SetupSendStream()); | |
1687 cricket::AudioSendParameters parameters; | |
1688 parameters.codecs.push_back(kOpusCodec); | |
1689 parameters.codecs[0].bitrate = 0; | |
1690 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | |
1691 SetSendParameters(parameters); | |
1692 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | |
1693 EXPECT_EQ(12000, GetCodecBitrate(kSsrc1)); | |
1694 | |
1695 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
1696 SetSendParameters(parameters); | |
1697 EXPECT_EQ(24000, GetCodecBitrate(kSsrc1)); | |
1698 } | |
1699 | |
1700 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. | |
1701 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { | |
1702 EXPECT_TRUE(SetupSendStream()); | |
1703 cricket::AudioSendParameters parameters; | |
1704 parameters.codecs.push_back(kOpusCodec); | |
1705 parameters.codecs[0].bitrate = 0; | |
1706 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); | |
1707 SetSendParameters(parameters); | |
1708 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc1)); | |
1709 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | |
1710 | |
1711 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
1712 SetSendParameters(parameters); | |
1713 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | |
1714 } | |
1715 | |
1716 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. | |
1717 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { | |
1718 EXPECT_TRUE(SetupSendStream()); | |
1719 cricket::AudioSendParameters parameters; | |
1720 parameters.codecs.push_back(kOpusCodec); | |
1721 parameters.codecs[0].bitrate = 0; | |
1722 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); | |
1723 SetSendParameters(parameters); | |
1724 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc1)); | |
1725 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | |
1726 | |
1727 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
1728 SetSendParameters(parameters); | |
1729 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | |
1730 } | |
1731 | |
1732 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. | |
1733 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { | |
1734 EXPECT_TRUE(SetupSendStream()); | |
1735 cricket::AudioSendParameters parameters; | |
1736 parameters.codecs.push_back(kOpusCodec); | |
1737 parameters.codecs[0].bitrate = 0; | |
1738 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); | |
1739 SetSendParameters(parameters); | |
1740 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc1)); | |
1741 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | |
1742 | |
1743 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
1744 SetSendParameters(parameters); | |
1745 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | |
1746 } | |
1747 | |
1748 // Test 24000 < maxplaybackrate triggers Opus full band mode. | |
1749 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { | |
1750 EXPECT_TRUE(SetupSendStream()); | |
1751 cricket::AudioSendParameters parameters; | |
1752 parameters.codecs.push_back(kOpusCodec); | |
1753 parameters.codecs[0].bitrate = 0; | |
1754 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); | |
1755 SetSendParameters(parameters); | |
1756 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc1)); | |
1757 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | |
1758 | |
1759 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
1760 SetSendParameters(parameters); | |
1761 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | |
1762 } | |
1763 | |
1764 // Test Opus that without maxplaybackrate, default playback rate is used. | |
1765 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { | |
1766 EXPECT_TRUE(SetupSendStream()); | |
1767 cricket::AudioSendParameters parameters; | |
1768 parameters.codecs.push_back(kOpusCodec); | |
1769 SetSendParameters(parameters); | |
1770 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | |
1771 } | |
1772 | |
1773 // Test the with non-Opus, maxplaybackrate has no effect. | |
1774 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { | |
1775 EXPECT_TRUE(SetupSendStream()); | |
1776 cricket::AudioSendParameters parameters; | |
1777 parameters.codecs.push_back(kIsacCodec); | |
1778 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); | |
1779 SetSendParameters(parameters); | |
1780 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc1)); | |
1781 } | |
1782 | |
1783 // Test maxplaybackrate can be set on two streams. | |
1784 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { | |
1785 EXPECT_TRUE(SetupSendStream()); | |
1786 cricket::AudioSendParameters parameters; | |
1787 parameters.codecs.push_back(kOpusCodec); | |
1788 SetSendParameters(parameters); | |
1789 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | |
1790 | |
1791 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | |
1792 SetSendParameters(parameters); | |
1793 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | |
1794 | |
1795 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); | |
1796 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); | |
1797 } | |
1798 | |
1799 // Test that with usedtx=0, Opus DTX is off. | |
1800 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { | |
1801 EXPECT_TRUE(SetupSendStream()); | |
1802 cricket::AudioSendParameters parameters; | |
1803 parameters.codecs.push_back(kOpusCodec); | |
1804 parameters.codecs[0].params["usedtx"] = "0"; | |
1805 SetSendParameters(parameters); | |
1806 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | |
1807 } | |
1808 | |
1809 // Test that with usedtx=1, Opus DTX is on. | |
1810 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { | |
1811 EXPECT_TRUE(SetupSendStream()); | |
1812 cricket::AudioSendParameters parameters; | |
1813 parameters.codecs.push_back(kOpusCodec); | |
1814 parameters.codecs[0].params["usedtx"] = "1"; | |
1815 SetSendParameters(parameters); | |
1816 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | |
1817 } | |
1818 | |
1819 // Test that usedtx=1 works with stereo Opus. | |
1820 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { | |
1821 EXPECT_TRUE(SetupSendStream()); | |
1822 cricket::AudioSendParameters parameters; | |
1823 parameters.codecs.push_back(kOpusCodec); | |
1824 parameters.codecs[0].params["usedtx"] = "1"; | |
1825 parameters.codecs[0].params["stereo"] = "1"; | |
1826 SetSendParameters(parameters); | |
1827 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | |
1828 } | |
1829 | |
1830 // Test that usedtx=1 does not work with non Opus. | |
1831 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { | |
1832 EXPECT_TRUE(SetupSendStream()); | |
1833 cricket::AudioSendParameters parameters; | |
1834 parameters.codecs.push_back(kIsacCodec); | |
1835 parameters.codecs[0].params["usedtx"] = "1"; | |
1836 SetSendParameters(parameters); | |
1837 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | |
1838 } | |
1839 | |
1840 // Test that we can switch back and forth between Opus and ISAC with CN. | 1506 // Test that we can switch back and forth between Opus and ISAC with CN. |
1841 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { | 1507 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { |
1842 EXPECT_TRUE(SetupSendStream()); | 1508 EXPECT_TRUE(SetupSendStream()); |
1843 | 1509 |
1844 cricket::AudioSendParameters opus_parameters; | 1510 cricket::AudioSendParameters opus_parameters; |
1845 opus_parameters.codecs.push_back(kOpusCodec); | 1511 opus_parameters.codecs.push_back(kOpusCodec); |
1846 SetSendParameters(opus_parameters); | 1512 SetSendParameters(opus_parameters); |
1847 { | 1513 { |
1848 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1514 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1849 EXPECT_EQ(111, gcodec.pltype); | 1515 EXPECT_EQ(111, spec.payload_type); |
1850 EXPECT_STREQ("opus", gcodec.plname); | 1516 EXPECT_STRCASEEQ("opus", spec.format.name.c_str()); |
1851 } | 1517 } |
1852 | 1518 |
1853 cricket::AudioSendParameters isac_parameters; | 1519 cricket::AudioSendParameters isac_parameters; |
1854 isac_parameters.codecs.push_back(kIsacCodec); | 1520 isac_parameters.codecs.push_back(kIsacCodec); |
1855 isac_parameters.codecs.push_back(kCn16000Codec); | 1521 isac_parameters.codecs.push_back(kCn16000Codec); |
1856 isac_parameters.codecs.push_back(kOpusCodec); | 1522 isac_parameters.codecs.push_back(kOpusCodec); |
1857 SetSendParameters(isac_parameters); | 1523 SetSendParameters(isac_parameters); |
1858 { | 1524 { |
1859 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1525 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1860 EXPECT_EQ(103, gcodec.pltype); | 1526 EXPECT_EQ(103, spec.payload_type); |
1861 EXPECT_STREQ("ISAC", gcodec.plname); | 1527 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
1862 } | 1528 } |
1863 | 1529 |
1864 SetSendParameters(opus_parameters); | 1530 SetSendParameters(opus_parameters); |
1865 { | 1531 { |
1866 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1532 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1867 EXPECT_EQ(111, gcodec.pltype); | 1533 EXPECT_EQ(111, spec.payload_type); |
1868 EXPECT_STREQ("opus", gcodec.plname); | 1534 EXPECT_STRCASEEQ("opus", spec.format.name.c_str()); |
1869 } | 1535 } |
1870 } | 1536 } |
1871 | 1537 |
1872 // Test that we handle various ways of specifying bitrate. | 1538 // Test that we handle various ways of specifying bitrate. |
1873 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { | 1539 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { |
1874 EXPECT_TRUE(SetupSendStream()); | 1540 EXPECT_TRUE(SetupSendStream()); |
1875 cricket::AudioSendParameters parameters; | 1541 cricket::AudioSendParameters parameters; |
1876 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 | 1542 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 |
1877 SetSendParameters(parameters); | 1543 SetSendParameters(parameters); |
1878 { | 1544 { |
1879 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1545 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1880 EXPECT_EQ(103, gcodec.pltype); | 1546 EXPECT_EQ(103, spec.payload_type); |
1881 EXPECT_STREQ("ISAC", gcodec.plname); | 1547 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
1882 EXPECT_EQ(32000, gcodec.rate); | 1548 EXPECT_EQ(32000, spec.target_bitrate_bps); |
1883 } | 1549 } |
1884 | 1550 |
1885 parameters.codecs[0].bitrate = 0; // bitrate == default | 1551 parameters.codecs[0].bitrate = 0; // bitrate == default |
1886 SetSendParameters(parameters); | 1552 SetSendParameters(parameters); |
1887 { | 1553 { |
1888 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1554 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1889 EXPECT_EQ(103, gcodec.pltype); | 1555 EXPECT_EQ(103, spec.payload_type); |
1890 EXPECT_STREQ("ISAC", gcodec.plname); | 1556 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
1891 EXPECT_EQ(32000, gcodec.rate); | 1557 EXPECT_EQ(32000, spec.target_bitrate_bps); |
1892 } | 1558 } |
1893 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 | 1559 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 |
1894 SetSendParameters(parameters); | 1560 SetSendParameters(parameters); |
1895 { | 1561 { |
1896 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1562 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1897 EXPECT_EQ(103, gcodec.pltype); | 1563 EXPECT_EQ(103, spec.payload_type); |
1898 EXPECT_STREQ("ISAC", gcodec.plname); | 1564 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
1899 EXPECT_EQ(28000, gcodec.rate); | 1565 EXPECT_EQ(28000, spec.target_bitrate_bps); |
1900 } | 1566 } |
1901 | 1567 |
1902 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 | 1568 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 |
1903 SetSendParameters(parameters); | 1569 SetSendParameters(parameters); |
1904 { | 1570 { |
1905 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1571 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1906 EXPECT_EQ(0, gcodec.pltype); | 1572 EXPECT_EQ(0, spec.payload_type); |
1907 EXPECT_STREQ("PCMU", gcodec.plname); | 1573 EXPECT_STRCASEEQ("PCMU", spec.format.name.c_str()); |
1908 EXPECT_EQ(64000, gcodec.rate); | 1574 EXPECT_EQ(64000, spec.target_bitrate_bps); |
1909 } | 1575 } |
1910 | 1576 |
1911 parameters.codecs[0].bitrate = 0; // bitrate == default | 1577 parameters.codecs[0].bitrate = 0; // bitrate == default |
1912 SetSendParameters(parameters); | 1578 SetSendParameters(parameters); |
1913 { | 1579 { |
1914 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1580 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1915 EXPECT_EQ(0, gcodec.pltype); | 1581 EXPECT_EQ(0, spec.payload_type); |
1916 EXPECT_STREQ("PCMU", gcodec.plname); | 1582 EXPECT_STREQ("PCMU", spec.format.name.c_str()); |
1917 EXPECT_EQ(64000, gcodec.rate); | 1583 EXPECT_EQ(64000, spec.target_bitrate_bps); |
1918 } | 1584 } |
1919 | 1585 |
1920 parameters.codecs[0] = kOpusCodec; | 1586 parameters.codecs[0] = kOpusCodec; |
1921 parameters.codecs[0].bitrate = 0; // bitrate == default | 1587 parameters.codecs[0].bitrate = 0; // bitrate == default |
1922 SetSendParameters(parameters); | 1588 SetSendParameters(parameters); |
1923 { | 1589 { |
1924 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1590 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1925 EXPECT_EQ(111, gcodec.pltype); | 1591 EXPECT_EQ(111, spec.payload_type); |
1926 EXPECT_STREQ("opus", gcodec.plname); | 1592 EXPECT_STREQ("opus", spec.format.name.c_str()); |
1927 EXPECT_EQ(32000, gcodec.rate); | 1593 EXPECT_EQ(32000, spec.target_bitrate_bps); |
1928 } | 1594 } |
1929 } | 1595 } |
1930 | 1596 |
1597 #if 0 | |
1931 // Test that we could set packet size specified in kCodecParamPTime. | 1598 // Test that we could set packet size specified in kCodecParamPTime. |
1932 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { | 1599 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { |
1933 EXPECT_TRUE(SetupSendStream()); | 1600 EXPECT_TRUE(SetupSendStream()); |
1934 cricket::AudioSendParameters parameters; | 1601 cricket::AudioSendParameters parameters; |
1935 parameters.codecs.push_back(kOpusCodec); | 1602 parameters.codecs.push_back(kOpusCodec); |
1936 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1603 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1937 SetSendParameters(parameters); | 1604 SetSendParameters(parameters); |
1938 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. | 1605 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. |
1939 | 1606 |
1940 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. | 1607 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. |
1941 SetSendParameters(parameters); | 1608 SetSendParameters(parameters); |
1942 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. | 1609 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. |
1943 | 1610 |
1944 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. | 1611 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. |
1945 SetSendParameters(parameters); | 1612 SetSendParameters(parameters); |
1946 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. | 1613 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. |
1947 | 1614 |
1948 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. | 1615 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. |
1949 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1616 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
1950 SetSendParameters(parameters); | 1617 SetSendParameters(parameters); |
1951 EXPECT_EQ(480, GetCodecPacSize( | 1618 EXPECT_EQ(480, GetCodecPacSize( |
1952 kSsrc1)); // Isac gets 30ms as the next smallest value. | 1619 kSsrc1)); // Isac gets 30ms as the next smallest value. |
1953 | 1620 |
1954 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. | 1621 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. |
1955 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); | 1622 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); |
1956 SetSendParameters(parameters); | 1623 SetSendParameters(parameters); |
1957 EXPECT_EQ(640, GetCodecPacSize( | 1624 EXPECT_EQ(640, GetCodecPacSize( |
1958 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. | 1625 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. |
1959 } | 1626 } |
1627 #endif | |
1960 | 1628 |
1961 // Test that we fail if no codecs are specified. | 1629 // Test that we fail if no codecs are specified. |
1962 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { | 1630 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { |
1963 EXPECT_TRUE(SetupSendStream()); | 1631 EXPECT_TRUE(SetupSendStream()); |
1964 cricket::AudioSendParameters parameters; | 1632 cricket::AudioSendParameters parameters; |
1965 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1633 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1966 } | 1634 } |
1967 | 1635 |
1968 // Test that we can set send codecs even with telephone-event codec as the first | 1636 // Test that we can set send codecs even with telephone-event codec as the first |
1969 // one on the list. | 1637 // one on the list. |
1970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { | 1638 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
1971 EXPECT_TRUE(SetupSendStream()); | 1639 EXPECT_TRUE(SetupSendStream()); |
1972 cricket::AudioSendParameters parameters; | 1640 cricket::AudioSendParameters parameters; |
1973 parameters.codecs.push_back(kTelephoneEventCodec1); | 1641 parameters.codecs.push_back(kTelephoneEventCodec1); |
1974 parameters.codecs.push_back(kIsacCodec); | 1642 parameters.codecs.push_back(kIsacCodec); |
1975 parameters.codecs.push_back(kPcmuCodec); | 1643 parameters.codecs.push_back(kPcmuCodec); |
1976 parameters.codecs[0].id = 98; // DTMF | 1644 parameters.codecs[0].id = 98; // DTMF |
1977 parameters.codecs[1].id = 96; | 1645 parameters.codecs[1].id = 96; |
1978 SetSendParameters(parameters); | 1646 SetSendParameters(parameters); |
1979 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1647 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1980 EXPECT_EQ(96, gcodec.pltype); | 1648 EXPECT_EQ(96, spec.payload_type); |
1981 EXPECT_STREQ("ISAC", gcodec.plname); | 1649 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
1982 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1650 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1983 } | 1651 } |
1984 | 1652 |
1985 // Test that payload type range is limited for telephone-event codec. | 1653 // Test that payload type range is limited for telephone-event codec. |
1986 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { | 1654 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
1987 EXPECT_TRUE(SetupSendStream()); | 1655 EXPECT_TRUE(SetupSendStream()); |
1988 cricket::AudioSendParameters parameters; | 1656 cricket::AudioSendParameters parameters; |
1989 parameters.codecs.push_back(kTelephoneEventCodec2); | 1657 parameters.codecs.push_back(kTelephoneEventCodec2); |
1990 parameters.codecs.push_back(kIsacCodec); | 1658 parameters.codecs.push_back(kIsacCodec); |
1991 parameters.codecs[0].id = 0; // DTMF | 1659 parameters.codecs[0].id = 0; // DTMF |
(...skipping 16 matching lines...) Expand all Loading... | |
2008 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { | 1676 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { |
2009 EXPECT_TRUE(SetupSendStream()); | 1677 EXPECT_TRUE(SetupSendStream()); |
2010 cricket::AudioSendParameters parameters; | 1678 cricket::AudioSendParameters parameters; |
2011 parameters.codecs.push_back(kCn16000Codec); | 1679 parameters.codecs.push_back(kCn16000Codec); |
2012 parameters.codecs.push_back(kIsacCodec); | 1680 parameters.codecs.push_back(kIsacCodec); |
2013 parameters.codecs.push_back(kPcmuCodec); | 1681 parameters.codecs.push_back(kPcmuCodec); |
2014 parameters.codecs[0].id = 98; // wideband CN | 1682 parameters.codecs[0].id = 98; // wideband CN |
2015 parameters.codecs[1].id = 96; | 1683 parameters.codecs[1].id = 96; |
2016 SetSendParameters(parameters); | 1684 SetSendParameters(parameters); |
2017 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1685 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2018 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1686 EXPECT_EQ(96, send_codec_spec.payload_type); |
2019 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1687 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2020 EXPECT_EQ(98, send_codec_spec.cng_payload_type); | 1688 EXPECT_EQ(98, send_codec_spec.cng_payload_type); |
2021 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 1689 // EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
2022 } | 1690 } |
2023 | 1691 |
2024 // Test that we set VAD and DTMF types correctly as caller. | 1692 // Test that we set VAD and DTMF types correctly as caller. |
2025 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { | 1693 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
2026 EXPECT_TRUE(SetupSendStream()); | 1694 EXPECT_TRUE(SetupSendStream()); |
2027 cricket::AudioSendParameters parameters; | 1695 cricket::AudioSendParameters parameters; |
2028 parameters.codecs.push_back(kIsacCodec); | 1696 parameters.codecs.push_back(kIsacCodec); |
2029 parameters.codecs.push_back(kPcmuCodec); | 1697 parameters.codecs.push_back(kPcmuCodec); |
2030 // TODO(juberti): cn 32000 | 1698 // TODO(juberti): cn 32000 |
2031 parameters.codecs.push_back(kCn16000Codec); | 1699 parameters.codecs.push_back(kCn16000Codec); |
2032 parameters.codecs.push_back(kCn8000Codec); | 1700 parameters.codecs.push_back(kCn8000Codec); |
2033 parameters.codecs.push_back(kTelephoneEventCodec1); | 1701 parameters.codecs.push_back(kTelephoneEventCodec1); |
2034 parameters.codecs[0].id = 96; | 1702 parameters.codecs[0].id = 96; |
2035 parameters.codecs[2].id = 97; // wideband CN | 1703 parameters.codecs[2].id = 97; // wideband CN |
2036 parameters.codecs[4].id = 98; // DTMF | 1704 parameters.codecs[4].id = 98; // DTMF |
2037 SetSendParameters(parameters); | 1705 SetSendParameters(parameters); |
2038 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1706 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2039 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1707 EXPECT_EQ(96, send_codec_spec.payload_type); |
2040 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1708 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2041 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1709 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2042 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
2043 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1710 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2044 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2045 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1711 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2046 } | 1712 } |
2047 | 1713 |
2048 // Test that we set VAD and DTMF types correctly as callee. | 1714 // Test that we set VAD and DTMF types correctly as callee. |
2049 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 1715 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
2050 EXPECT_TRUE(SetupChannel()); | 1716 EXPECT_TRUE(SetupChannel()); |
2051 cricket::AudioSendParameters parameters; | 1717 cricket::AudioSendParameters parameters; |
2052 parameters.codecs.push_back(kIsacCodec); | 1718 parameters.codecs.push_back(kIsacCodec); |
2053 parameters.codecs.push_back(kPcmuCodec); | 1719 parameters.codecs.push_back(kPcmuCodec); |
2054 // TODO(juberti): cn 32000 | 1720 // TODO(juberti): cn 32000 |
2055 parameters.codecs.push_back(kCn16000Codec); | 1721 parameters.codecs.push_back(kCn16000Codec); |
2056 parameters.codecs.push_back(kCn8000Codec); | 1722 parameters.codecs.push_back(kCn8000Codec); |
2057 parameters.codecs.push_back(kTelephoneEventCodec2); | 1723 parameters.codecs.push_back(kTelephoneEventCodec2); |
2058 parameters.codecs[0].id = 96; | 1724 parameters.codecs[0].id = 96; |
2059 parameters.codecs[2].id = 97; // wideband CN | 1725 parameters.codecs[2].id = 97; // wideband CN |
2060 parameters.codecs[4].id = 98; // DTMF | 1726 parameters.codecs[4].id = 98; // DTMF |
2061 SetSendParameters(parameters); | 1727 SetSendParameters(parameters); |
2062 EXPECT_TRUE(channel_->AddSendStream( | 1728 EXPECT_TRUE(channel_->AddSendStream( |
2063 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1729 cricket::StreamParams::CreateLegacy(kSsrc1))); |
2064 | 1730 |
2065 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1731 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2066 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1732 EXPECT_EQ(96, send_codec_spec.payload_type); |
2067 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1733 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2068 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1734 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2069 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
2070 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1735 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2071 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2072 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1736 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2073 } | 1737 } |
2074 | 1738 |
2075 // Test that we only apply VAD if we have a CN codec that matches the | 1739 // Test that we only apply VAD if we have a CN codec that matches the |
2076 // send codec clockrate. | 1740 // send codec clockrate. |
2077 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { | 1741 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { |
2078 EXPECT_TRUE(SetupSendStream()); | 1742 EXPECT_TRUE(SetupSendStream()); |
2079 cricket::AudioSendParameters parameters; | 1743 cricket::AudioSendParameters parameters; |
2080 // Set ISAC(16K) and CN(16K). VAD should be activated. | 1744 // Set ISAC(16K) and CN(16K). VAD should be activated. |
2081 parameters.codecs.push_back(kIsacCodec); | 1745 parameters.codecs.push_back(kIsacCodec); |
2082 parameters.codecs.push_back(kCn16000Codec); | 1746 parameters.codecs.push_back(kCn16000Codec); |
2083 parameters.codecs[1].id = 97; | 1747 parameters.codecs[1].id = 97; |
2084 SetSendParameters(parameters); | 1748 SetSendParameters(parameters); |
2085 { | 1749 { |
2086 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1750 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2087 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1751 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2088 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1752 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2089 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
2090 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1753 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2091 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2092 } | 1754 } |
2093 // Set PCMU(8K) and CN(16K). VAD should not be activated. | 1755 // Set PCMU(8K) and CN(16K). VAD should not be activated. |
2094 parameters.codecs[0] = kPcmuCodec; | 1756 parameters.codecs[0] = kPcmuCodec; |
2095 SetSendParameters(parameters); | 1757 SetSendParameters(parameters); |
2096 { | 1758 { |
2097 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1759 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2098 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1760 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
2099 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1761 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
2100 } | 1762 } |
2101 // Set PCMU(8K) and CN(8K). VAD should be activated. | 1763 // Set PCMU(8K) and CN(8K). VAD should be activated. |
2102 parameters.codecs[1] = kCn8000Codec; | 1764 parameters.codecs[1] = kCn8000Codec; |
2103 SetSendParameters(parameters); | 1765 SetSendParameters(parameters); |
2104 { | 1766 { |
2105 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1767 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2106 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1768 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
2107 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1769 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2108 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
2109 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1770 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
2110 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | |
2111 } | 1771 } |
2112 // Set ISAC(16K) and CN(8K). VAD should not be activated. | 1772 // Set ISAC(16K) and CN(8K). VAD should not be activated. |
2113 parameters.codecs[0] = kIsacCodec; | 1773 parameters.codecs[0] = kIsacCodec; |
2114 SetSendParameters(parameters); | 1774 SetSendParameters(parameters); |
2115 { | 1775 { |
2116 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1776 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2117 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1777 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2118 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1778 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
2119 } | 1779 } |
2120 } | 1780 } |
2121 | 1781 |
2122 // Test that we perform case-insensitive matching of codec names. | 1782 // Test that we perform case-insensitive matching of codec names. |
2123 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { | 1783 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
2124 EXPECT_TRUE(SetupSendStream()); | 1784 EXPECT_TRUE(SetupSendStream()); |
2125 cricket::AudioSendParameters parameters; | 1785 cricket::AudioSendParameters parameters; |
2126 parameters.codecs.push_back(kIsacCodec); | 1786 parameters.codecs.push_back(kIsacCodec); |
2127 parameters.codecs.push_back(kPcmuCodec); | 1787 parameters.codecs.push_back(kPcmuCodec); |
2128 parameters.codecs.push_back(kCn16000Codec); | 1788 parameters.codecs.push_back(kCn16000Codec); |
2129 parameters.codecs.push_back(kCn8000Codec); | 1789 parameters.codecs.push_back(kCn8000Codec); |
2130 parameters.codecs.push_back(kTelephoneEventCodec1); | 1790 parameters.codecs.push_back(kTelephoneEventCodec1); |
2131 parameters.codecs[0].name = "iSaC"; | 1791 parameters.codecs[0].name = "iSaC"; |
2132 parameters.codecs[0].id = 96; | 1792 parameters.codecs[0].id = 96; |
2133 parameters.codecs[2].id = 97; // wideband CN | 1793 parameters.codecs[2].id = 97; // wideband CN |
2134 parameters.codecs[4].id = 98; // DTMF | 1794 parameters.codecs[4].id = 98; // DTMF |
2135 SetSendParameters(parameters); | 1795 SetSendParameters(parameters); |
2136 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1796 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2137 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1797 EXPECT_EQ(96, send_codec_spec.payload_type); |
2138 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1798 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2139 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1799 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2140 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
2141 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1800 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2142 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2143 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1801 EXPECT_TRUE(channel_->CanInsertDtmf()); |
2144 } | 1802 } |
2145 | 1803 |
2146 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { | 1804 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
2147 public: | 1805 public: |
2148 WebRtcVoiceEngineWithSendSideBweTest() | 1806 WebRtcVoiceEngineWithSendSideBweTest() |
2149 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} | 1807 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} |
2150 }; | 1808 }; |
2151 | 1809 |
2152 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, | 1810 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2291 parameters.codecs.push_back(kIsacCodec); | 1949 parameters.codecs.push_back(kIsacCodec); |
2292 parameters.codecs.push_back(kCn16000Codec); | 1950 parameters.codecs.push_back(kCn16000Codec); |
2293 parameters.codecs[1].id = 97; | 1951 parameters.codecs[1].id = 97; |
2294 SetSendParameters(parameters); | 1952 SetSendParameters(parameters); |
2295 | 1953 |
2296 // Verify ISAC and VAD are corrected configured on all send channels. | 1954 // Verify ISAC and VAD are corrected configured on all send channels. |
2297 for (uint32_t ssrc : kSsrcs4) { | 1955 for (uint32_t ssrc : kSsrcs4) { |
2298 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); | 1956 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); |
2299 const auto& send_codec_spec = | 1957 const auto& send_codec_spec = |
2300 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; | 1958 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; |
2301 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1959 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
2302 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1960 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
2303 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | |
2304 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1961 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
2305 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2306 } | 1962 } |
2307 | 1963 |
2308 // Change to PCMU(8K) and CN(16K). | 1964 // Change to PCMU(8K) and CN(16K). |
2309 parameters.codecs[0] = kPcmuCodec; | 1965 parameters.codecs[0] = kPcmuCodec; |
2310 SetSendParameters(parameters); | 1966 SetSendParameters(parameters); |
2311 for (uint32_t ssrc : kSsrcs4) { | 1967 for (uint32_t ssrc : kSsrcs4) { |
2312 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); | 1968 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); |
2313 const auto& send_codec_spec = | 1969 const auto& send_codec_spec = |
2314 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; | 1970 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; |
2315 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1971 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
2316 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1972 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
2317 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | |
2318 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
2319 } | 1973 } |
2320 } | 1974 } |
2321 | 1975 |
2322 // Test we can SetSend on all send streams correctly. | 1976 // Test we can SetSend on all send streams correctly. |
2323 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { | 1977 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { |
2324 SetupForMultiSendStream(); | 1978 SetupForMultiSendStream(); |
2325 | 1979 |
2326 // Create the send channels and they should be a "not sending" date. | 1980 // Create the send channels and they should be a "not sending" date. |
2327 for (uint32_t ssrc : kSsrcs4) { | 1981 for (uint32_t ssrc : kSsrcs4) { |
2328 EXPECT_TRUE(channel_->AddSendStream( | 1982 EXPECT_TRUE(channel_->AddSendStream( |
(...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3547 delete channel; | 3201 delete channel; |
3548 } | 3202 } |
3549 } | 3203 } |
3550 | 3204 |
3551 // Tests that the library is configured with the codecs we want. | 3205 // Tests that the library is configured with the codecs we want. |
3552 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { | 3206 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { |
3553 // TODO(ossu): These tests should move into a future "builtin audio codecs" | 3207 // TODO(ossu): These tests should move into a future "builtin audio codecs" |
3554 // module. | 3208 // module. |
3555 | 3209 |
3556 // Check codecs by name. | 3210 // Check codecs by name. |
3557 #ifdef WEBRTC_CODEC_OPUS | 3211 #ifdef WEBRTC_CODEC_OPUS |
ossu
2017/03/20 18:19:48
Turns out these #ifdef'ed tests never activated, b
| |
3558 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3212 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3559 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr)); | 3213 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr)); |
3560 #endif | 3214 #endif |
3561 #if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) | 3215 #if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) |
3562 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3216 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3563 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr)); | 3217 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr)); |
3564 #endif | 3218 #endif |
3565 #if (defined(WEBRTC_CODEC_ISAC)) | 3219 #if (defined(WEBRTC_CODEC_ISAC)) |
3566 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3220 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3567 cricket::AudioCodec(96, "ISAC", 32000, 0, 1), nullptr)); | 3221 cricket::AudioCodec(96, "ISAC", 32000, 0, 1), nullptr)); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3608 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); | 3262 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); |
3609 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3263 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3610 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); | 3264 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); |
3611 | 3265 |
3612 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. | 3266 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. |
3613 // TODO(ossu): Why are the payload types of codecs with non-static payload | 3267 // TODO(ossu): Why are the payload types of codecs with non-static payload |
3614 // type assignments checked here? It shouldn't really matter. | 3268 // type assignments checked here? It shouldn't really matter. |
3615 cricket::WebRtcVoiceEngine engine( | 3269 cricket::WebRtcVoiceEngine engine( |
3616 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); | 3270 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); |
3617 for (const cricket::AudioCodec& codec : engine.send_codecs()) { | 3271 for (const cricket::AudioCodec& codec : engine.send_codecs()) { |
3618 if (codec.name == "CN" && codec.clockrate == 16000) { | 3272 auto is_codec = [&codec](const char* name, int clockrate = 0) { |
3273 return STR_CASE_CMP(codec.name.c_str(), name) == 0 && | |
3274 (clockrate == 0 || codec.clockrate == clockrate); | |
3275 }; | |
3276 if (is_codec("CN", 16000)) { | |
3619 EXPECT_EQ(105, codec.id); | 3277 EXPECT_EQ(105, codec.id); |
3620 } else if (codec.name == "CN" && codec.clockrate == 32000) { | 3278 } else if (is_codec("CN", 32000)) { |
3621 EXPECT_EQ(106, codec.id); | 3279 EXPECT_EQ(106, codec.id); |
3622 } else if (codec.name == "ISAC" && codec.clockrate == 16000) { | 3280 } else if (is_codec("ISAC", 16000)) { |
3623 EXPECT_EQ(103, codec.id); | 3281 EXPECT_EQ(103, codec.id); |
3624 } else if (codec.name == "ISAC" && codec.clockrate == 32000) { | 3282 } else if (is_codec("ISAC", 32000)) { |
3625 EXPECT_EQ(104, codec.id); | 3283 EXPECT_EQ(104, codec.id); |
3626 } else if (codec.name == "G722" && codec.clockrate == 8000) { | 3284 } else if (is_codec("G722", 8000)) { |
3627 EXPECT_EQ(9, codec.id); | 3285 EXPECT_EQ(9, codec.id); |
3628 } else if (codec.name == "telephone-event" && codec.clockrate == 8000) { | 3286 } else if (is_codec("telephone-event", 8000)) { |
3629 EXPECT_EQ(126, codec.id); | 3287 EXPECT_EQ(126, codec.id); |
3630 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. | 3288 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. |
3631 // Remove these checks once both send and receive side assigns payload types | 3289 // Remove these checks once both send and receive side assigns payload types |
3632 // dynamically. | 3290 // dynamically. |
3633 } else if (codec.name == "telephone-event" && codec.clockrate == 16000) { | 3291 } else if (is_codec("telephone-event", 16000)) { |
3634 EXPECT_EQ(113, codec.id); | 3292 EXPECT_EQ(113, codec.id); |
3635 } else if (codec.name == "telephone-event" && codec.clockrate == 32000) { | 3293 } else if (is_codec("telephone-event", 32000)) { |
3636 EXPECT_EQ(112, codec.id); | 3294 EXPECT_EQ(112, codec.id); |
3637 } else if (codec.name == "telephone-event" && codec.clockrate == 48000) { | 3295 } else if (is_codec("telephone-event", 48000)) { |
3638 EXPECT_EQ(110, codec.id); | 3296 EXPECT_EQ(110, codec.id); |
3639 } else if (codec.name == "opus") { | 3297 } else if (is_codec("opus")) { |
3640 EXPECT_EQ(111, codec.id); | 3298 EXPECT_EQ(111, codec.id); |
3641 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); | 3299 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); |
3642 EXPECT_EQ("10", codec.params.find("minptime")->second); | 3300 EXPECT_EQ("10", codec.params.find("minptime")->second); |
3643 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); | 3301 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); |
3644 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); | 3302 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); |
3645 } | 3303 } |
3646 } | 3304 } |
3647 } | 3305 } |
3648 | 3306 |
3649 // Tests that VoE supports at least 32 channels | 3307 // Tests that VoE supports at least 32 channels |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3761 // Without this cast, the comparison turned unsigned and, thus, failed for -1. | 3419 // Without this cast, the comparison turned unsigned and, thus, failed for -1. |
3762 const int num_specs = static_cast<int>(specs.size()); | 3420 const int num_specs = static_cast<int>(specs.size()); |
3763 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); | 3421 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); |
3764 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); | 3422 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); |
3765 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); | 3423 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); |
3766 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); | 3424 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); |
3767 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); | 3425 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); |
3768 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); | 3426 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); |
3769 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); | 3427 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); |
3770 } | 3428 } |
OLD | NEW |