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

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

Issue 2705093002: Injectable audio encoders: WebRtcVoiceEngine and company (Closed)
Patch Set: Moved encoder creation up into AudioSendStream, bypassing most of Channel. Created 3 years, 10 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 19 matching lines...) Expand all
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698