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

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

Issue 2405183002: Moving WebRtcVoiceMediaChannel::SendSetCodec to AudioSendStream. (Closed)
Patch Set: adding logs and addressing some earlier comments. Created 4 years, 2 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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 // |expected_result| is the expected result from SetMaxSendBandwidth(). 231 // |expected_result| is the expected result from SetMaxSendBandwidth().
232 // |expected_bitrate| is the expected audio bitrate afterward. 232 // |expected_bitrate| is the expected audio bitrate afterward.
233 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, 233 void TestMaxSendBandwidth(const cricket::AudioCodec& codec,
234 int max_bitrate, 234 int max_bitrate,
235 bool expected_result, 235 bool expected_result,
236 int expected_bitrate) { 236 int expected_bitrate) {
237 cricket::AudioSendParameters parameters; 237 cricket::AudioSendParameters parameters;
238 parameters.codecs.push_back(codec); 238 parameters.codecs.push_back(codec);
239 parameters.max_bandwidth_bps = max_bitrate; 239 parameters.max_bandwidth_bps = max_bitrate;
240 EXPECT_EQ(expected_result, channel_->SetSendParameters(parameters)); 240 EXPECT_EQ(expected_result, channel_->SetSendParameters(parameters));
241 241 CheckCodecBitrate(kSsrc1, expected_bitrate);
242 int channel_num = voe_.GetLastChannel();
243 webrtc::CodecInst temp_codec;
244 EXPECT_FALSE(voe_.GetSendCodec(channel_num, temp_codec));
245 EXPECT_EQ(expected_bitrate, temp_codec.rate);
246 } 242 }
247 243
248 // Sets the per-stream maximum bitrate limit for the specified SSRC. 244 // Sets the per-stream maximum bitrate limit for the specified SSRC.
249 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) { 245 bool SetMaxBitrateForStream(int32_t ssrc, int bitrate) {
250 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc); 246 webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc);
251 EXPECT_EQ(1UL, parameters.encodings.size()); 247 EXPECT_EQ(1UL, parameters.encodings.size());
252 248
253 parameters.encodings[0].max_bitrate_bps = bitrate; 249 parameters.encodings[0].max_bitrate_bps = bitrate;
254 return channel_->SetRtpSendParameters(ssrc, parameters); 250 return channel_->SetRtpSendParameters(ssrc, parameters);
255 } 251 }
256 252
257 bool SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { 253 bool SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) {
258 cricket::AudioSendParameters send_parameters; 254 cricket::AudioSendParameters send_parameters;
259 send_parameters.codecs.push_back(codec); 255 send_parameters.codecs.push_back(codec);
260 send_parameters.max_bandwidth_bps = bitrate; 256 send_parameters.max_bandwidth_bps = bitrate;
261 return channel_->SetSendParameters(send_parameters); 257 return channel_->SetSendParameters(send_parameters);
262 } 258 }
263 259
264 int GetCodecBitrate(int32_t ssrc) { 260 void CheckSendCodec(int32_t ssrc,
265 cricket::WebRtcVoiceMediaChannel* media_channel = 261 const char expected_name[],
266 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); 262 int expected_channels,
267 int channel = media_channel->GetSendChannelId(ssrc); 263 int expected_bitrate) {
268 EXPECT_NE(-1, channel); 264 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
269 webrtc::CodecInst codec; 265 auto codec =
270 EXPECT_FALSE(voe_.GetSendCodec(channel, codec)); 266 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec.codec_inst;
271 return codec.rate; 267 EXPECT_STREQ(expected_name, codec.plname);
268 EXPECT_EQ(expected_channels, codec.channels);
269 EXPECT_EQ(expected_bitrate, codec.rate);
270 }
271
272 void CheckOpusMaxPlaybackRate(int32_t ssrc, int expected_max_playback_rate) {
273 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
274 auto codec = call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
275 EXPECT_EQ(expected_max_playback_rate, codec.opus_max_playback_rate);
276 }
277
278 void CheckOpusDtx(int32_t ssrc, bool expected_dtx_enabled) {
279 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
280 auto codec = call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
the sun 2016/10/17 14:58:22 Generally, I don't think it's a good idea to hide
minyue-webrtc 2016/10/17 15:08:27 The reason for these CheckXXX helpers two two fold
281 EXPECT_EQ(expected_dtx_enabled, codec.enable_opus_dtx);
282 }
283 void CheckCodecFec(int32_t ssrc, bool expected_fec_enabled) {
284 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
285 auto codec = call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
286 EXPECT_EQ(expected_fec_enabled, codec.enable_codec_fec);
287 }
288
289 void CheckCodecBitrate(int32_t ssrc, int expected_bitrate) {
290 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
291 auto codec =
292 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec.codec_inst;
293 EXPECT_EQ(expected_bitrate, codec.rate);
294 }
295
296 void CheckCodecPacSize(int32_t ssrc, int expected_bitrate) {
297 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
298 auto codec =
299 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec.codec_inst;
300 EXPECT_EQ(expected_bitrate, codec.pacsize);
272 } 301 }
273 302
274 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, 303 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec,
275 int global_max, 304 int global_max,
276 int stream_max, 305 int stream_max,
277 bool expected_result, 306 bool expected_result,
278 int expected_codec_bitrate) { 307 int expected_codec_bitrate) {
279 // Clear the bitrate limit from the previous test case. 308 // Clear the bitrate limit from the previous test case.
280 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc1, -1)); 309 EXPECT_TRUE(SetMaxBitrateForStream(kSsrc1, -1));
281 310
282 // Attempt to set the requested bitrate limits. 311 // Attempt to set the requested bitrate limits.
283 EXPECT_TRUE(SetGlobalMaxBitrate(codec, global_max)); 312 EXPECT_TRUE(SetGlobalMaxBitrate(codec, global_max));
284 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc1, stream_max)); 313 EXPECT_EQ(expected_result, SetMaxBitrateForStream(kSsrc1, stream_max));
285 314
286 // Verify that reading back the parameters gives results 315 // Verify that reading back the parameters gives results
287 // consistent with the Set() result. 316 // consistent with the Set() result.
288 webrtc::RtpParameters resulting_parameters = 317 webrtc::RtpParameters resulting_parameters =
289 channel_->GetRtpSendParameters(kSsrc1); 318 channel_->GetRtpSendParameters(kSsrc1);
290 EXPECT_EQ(1UL, resulting_parameters.encodings.size()); 319 EXPECT_EQ(1UL, resulting_parameters.encodings.size());
291 EXPECT_EQ(expected_result ? stream_max : -1, 320 EXPECT_EQ(expected_result ? stream_max : -1,
292 resulting_parameters.encodings[0].max_bitrate_bps); 321 resulting_parameters.encodings[0].max_bitrate_bps);
293 322
294 // Verify that the codec settings have the expected bitrate. 323 // Verify that the codec settings have the expected bitrate.
295 EXPECT_EQ(expected_codec_bitrate, GetCodecBitrate(kSsrc1)); 324 CheckCodecBitrate(kSsrc1, expected_codec_bitrate);
296 } 325 }
297 326
298 void TestSetSendRtpHeaderExtensions(const std::string& ext) { 327 void TestSetSendRtpHeaderExtensions(const std::string& ext) {
299 EXPECT_TRUE(SetupSendStream()); 328 EXPECT_TRUE(SetupSendStream());
300 329
301 // Ensure extensions are off by default. 330 // Ensure extensions are off by default.
302 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size()); 331 EXPECT_EQ(0u, GetSendStreamConfig(kSsrc1).rtp.extensions.size());
303 332
304 // Ensure unknown extensions won't cause an error. 333 // Ensure unknown extensions won't cause an error.
305 send_parameters_.extensions.push_back( 334 send_parameters_.extensions.push_back(
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 EXPECT_TRUE(SetupChannel()); 868 EXPECT_TRUE(SetupChannel());
840 const int kDesiredBitrate = 128000; 869 const int kDesiredBitrate = 128000;
841 cricket::AudioSendParameters parameters; 870 cricket::AudioSendParameters parameters;
842 parameters.codecs = engine_->send_codecs(); 871 parameters.codecs = engine_->send_codecs();
843 parameters.max_bandwidth_bps = kDesiredBitrate; 872 parameters.max_bandwidth_bps = kDesiredBitrate;
844 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 873 EXPECT_TRUE(channel_->SetSendParameters(parameters));
845 874
846 EXPECT_TRUE(channel_->AddSendStream( 875 EXPECT_TRUE(channel_->AddSendStream(
847 cricket::StreamParams::CreateLegacy(kSsrc1))); 876 cricket::StreamParams::CreateLegacy(kSsrc1)));
848 877
849 int channel_num = voe_.GetLastChannel(); 878 CheckCodecBitrate(kSsrc1, kDesiredBitrate);
850 webrtc::CodecInst codec;
851 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
852 EXPECT_EQ(kDesiredBitrate, codec.rate);
853 } 879 }
854 880
855 // Test that bitrate cannot be set for CBR codecs. 881 // Test that bitrate cannot be set for CBR codecs.
856 // Bitrate is ignored if it is higher than the fixed bitrate. 882 // Bitrate is ignored if it is higher than the fixed bitrate.
857 // Bitrate less then the fixed bitrate is an error. 883 // Bitrate less then the fixed bitrate is an error.
858 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) { 884 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthCbr) {
859 EXPECT_TRUE(SetupSendStream()); 885 EXPECT_TRUE(SetupSendStream());
860 886
861 // PCMU, default bitrate == 64000. 887 // PCMU, default bitrate == 64000.
862 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 888 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
863 int channel_num = voe_.GetLastChannel(); 889 CheckCodecBitrate(kSsrc1, 64000);
864 webrtc::CodecInst codec;
865 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec));
866 EXPECT_EQ(64000, codec.rate);
867 890
868 send_parameters_.max_bandwidth_bps = 128000; 891 send_parameters_.max_bandwidth_bps = 128000;
869 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 892 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
870 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 893 CheckCodecBitrate(kSsrc1, 64000);
871 EXPECT_EQ(64000, codec.rate);
872 894
873 send_parameters_.max_bandwidth_bps = 128; 895 send_parameters_.max_bandwidth_bps = 128;
874 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); 896 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_));
875 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, codec)); 897 CheckCodecBitrate(kSsrc1, 64000);
876 EXPECT_EQ(64000, codec.rate);
877 } 898 }
878 899
879 // Test that the per-stream bitrate limit and the global 900 // Test that the per-stream bitrate limit and the global
880 // bitrate limit both apply. 901 // bitrate limit both apply.
881 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { 902 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) {
882 EXPECT_TRUE(SetupSendStream()); 903 EXPECT_TRUE(SetupSendStream());
883 904
884 // opus, default bitrate == 64000. 905 // opus, default bitrate == 64000.
885 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); 906 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000);
886 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); 907 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); 980 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc)));
960 } 981 }
961 // Configure one stream to be limited by the stream config, another to be 982 // Configure one stream to be limited by the stream config, another to be
962 // limited by the global max, and the third one with no per-stream limit 983 // limited by the global max, and the third one with no per-stream limit
963 // (still subject to the global limit). 984 // (still subject to the global limit).
964 EXPECT_TRUE(SetGlobalMaxBitrate(kOpusCodec, 64000)); 985 EXPECT_TRUE(SetGlobalMaxBitrate(kOpusCodec, 64000));
965 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 48000)); 986 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 48000));
966 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 96000)); 987 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 96000));
967 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); 988 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1));
968 989
969 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); 990 CheckCodecBitrate(kSsrcs4[0], 48000);
970 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[1])); 991 CheckCodecBitrate(kSsrcs4[1], 64000);
971 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); 992 CheckCodecBitrate(kSsrcs4[2], 64000);
972 993
973 // Remove the global cap; the streams should switch to their respective 994 // Remove the global cap; the streams should switch to their respective
974 // maximums (or remain unchanged if there was no other limit on them.) 995 // maximums (or remain unchanged if there was no other limit on them.)
975 EXPECT_TRUE(SetGlobalMaxBitrate(kOpusCodec, -1)); 996 EXPECT_TRUE(SetGlobalMaxBitrate(kOpusCodec, -1));
976 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); 997 CheckCodecBitrate(kSsrcs4[0], 48000);
977 EXPECT_EQ(96000, GetCodecBitrate(kSsrcs4[1])); 998 CheckCodecBitrate(kSsrcs4[1], 96000);
978 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); 999 CheckCodecBitrate(kSsrcs4[2], 64000);
979 } 1000 }
980 1001
981 // Test that GetRtpSendParameters returns the currently configured codecs. 1002 // Test that GetRtpSendParameters returns the currently configured codecs.
982 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { 1003 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) {
983 EXPECT_TRUE(SetupSendStream()); 1004 EXPECT_TRUE(SetupSendStream());
984 cricket::AudioSendParameters parameters; 1005 cricket::AudioSendParameters parameters;
985 parameters.codecs.push_back(kIsacCodec); 1006 parameters.codecs.push_back(kIsacCodec);
986 parameters.codecs.push_back(kPcmuCodec); 1007 parameters.codecs.push_back(kPcmuCodec);
987 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1008 EXPECT_TRUE(channel_->SetSendParameters(parameters));
988 1009
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 1068
1048 // Test that we apply codecs properly. 1069 // Test that we apply codecs properly.
1049 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) { 1070 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecs) {
1050 EXPECT_TRUE(SetupSendStream()); 1071 EXPECT_TRUE(SetupSendStream());
1051 cricket::AudioSendParameters parameters; 1072 cricket::AudioSendParameters parameters;
1052 parameters.codecs.push_back(kIsacCodec); 1073 parameters.codecs.push_back(kIsacCodec);
1053 parameters.codecs.push_back(kPcmuCodec); 1074 parameters.codecs.push_back(kPcmuCodec);
1054 parameters.codecs.push_back(kCn8000Codec); 1075 parameters.codecs.push_back(kCn8000Codec);
1055 parameters.codecs[0].id = 96; 1076 parameters.codecs[0].id = 96;
1056 parameters.codecs[0].bitrate = 48000; 1077 parameters.codecs[0].bitrate = 48000;
1078 const int initial_num = call_.GetNumCreatedSendStreams();
1057 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1079 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1058 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 1080 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1059 int channel_num = voe_.GetLastChannel(); 1081 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1060 webrtc::CodecInst gcodec; 1082 auto send_codec_spec =
1061 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1083 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1062 EXPECT_EQ(96, gcodec.pltype); 1084 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1063 EXPECT_EQ(48000, gcodec.rate); 1085 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate);
1064 EXPECT_STREQ("ISAC", gcodec.plname); 1086 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1065 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1087 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1066 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1088 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
1067 EXPECT_EQ(105, voe_.GetSendCNPayloadType(channel_num, true)); 1089 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
1068 EXPECT_FALSE(channel_->CanInsertDtmf()); 1090 EXPECT_FALSE(channel_->CanInsertDtmf());
1069 } 1091 }
1070 1092
1071 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 1093 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried
1072 // to apply. 1094 // to apply.
1073 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { 1095 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) {
1074 EXPECT_TRUE(SetupSendStream()); 1096 EXPECT_TRUE(SetupSendStream());
1075 cricket::AudioSendParameters parameters; 1097 cricket::AudioSendParameters parameters;
1076 parameters.codecs.push_back(kIsacCodec); 1098 parameters.codecs.push_back(kIsacCodec);
1077 parameters.codecs.push_back(kPcmuCodec); 1099 parameters.codecs.push_back(kPcmuCodec);
1078 parameters.codecs.push_back(kCn8000Codec); 1100 parameters.codecs.push_back(kCn8000Codec);
1079 parameters.codecs[0].id = 96; 1101 parameters.codecs[0].id = 96;
1080 parameters.codecs[0].bitrate = 48000; 1102 parameters.codecs[0].bitrate = 48000;
1103 const int initial_num = call_.GetNumCreatedSendStreams();
1081 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1104 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1082 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 1105 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1083 // Calling SetSendCodec again with same codec which is already set. 1106 // Calling SetSendCodec again with same codec which is already set.
1084 // In this case media channel shouldn't send codec to VoE. 1107 // In this case media channel shouldn't send codec to VoE.
1085 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1108 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1086 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 1109 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1087 } 1110 }
1088 1111
1089 // Verify that G722 is set with 16000 samples per second to WebRTC. 1112 // Verify that G722 is set with 16000 samples per second to WebRTC.
1090 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 1113 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) {
1091 EXPECT_TRUE(SetupSendStream()); 1114 EXPECT_TRUE(SetupSendStream());
1092 int channel_num = voe_.GetLastChannel();
1093 cricket::AudioSendParameters parameters; 1115 cricket::AudioSendParameters parameters;
1094 parameters.codecs.push_back(kG722CodecSdp); 1116 parameters.codecs.push_back(kG722CodecSdp);
1095 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1117 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1096 webrtc::CodecInst gcodec; 1118 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1097 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1119 webrtc::CodecInst gcodec =
1120 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1098 EXPECT_STREQ("G722", gcodec.plname); 1121 EXPECT_STREQ("G722", gcodec.plname);
1099 EXPECT_EQ(1, gcodec.channels); 1122 EXPECT_EQ(1, gcodec.channels);
1100 EXPECT_EQ(16000, gcodec.plfreq); 1123 EXPECT_EQ(16000, gcodec.plfreq);
1101 } 1124 }
1102 1125
1103 // Test that if clockrate is not 48000 for opus, we fail. 1126 // Test that if clockrate is not 48000 for opus, we fail.
1104 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 1127 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
1105 EXPECT_TRUE(SetupSendStream()); 1128 EXPECT_TRUE(SetupSendStream());
1106 cricket::AudioSendParameters parameters; 1129 cricket::AudioSendParameters parameters;
1107 parameters.codecs.push_back(kOpusCodec); 1130 parameters.codecs.push_back(kOpusCodec);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 parameters.codecs[0].bitrate = 0; 1183 parameters.codecs[0].bitrate = 0;
1161 parameters.codecs[0].channels = 1; 1184 parameters.codecs[0].channels = 1;
1162 parameters.codecs[0].params["stereo"] = "1"; 1185 parameters.codecs[0].params["stereo"] = "1";
1163 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1186 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1164 } 1187 }
1165 1188
1166 // Test that with bitrate=0 and no stereo, 1189 // Test that with bitrate=0 and no stereo,
1167 // channels and bitrate are 1 and 32000. 1190 // channels and bitrate are 1 and 32000.
1168 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 1191 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
1169 EXPECT_TRUE(SetupSendStream()); 1192 EXPECT_TRUE(SetupSendStream());
1170 int channel_num = voe_.GetLastChannel();
1171 cricket::AudioSendParameters parameters; 1193 cricket::AudioSendParameters parameters;
1172 parameters.codecs.push_back(kOpusCodec); 1194 parameters.codecs.push_back(kOpusCodec);
1173 parameters.codecs[0].bitrate = 0; 1195 parameters.codecs[0].bitrate = 0;
1174 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1196 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1175 webrtc::CodecInst gcodec; 1197 CheckSendCodec(kSsrc1, "opus", 1, 32000);
1176 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1177 EXPECT_STREQ("opus", gcodec.plname);
1178 EXPECT_EQ(1, gcodec.channels);
1179 EXPECT_EQ(32000, gcodec.rate);
1180 } 1198 }
1181 1199
1182 // Test that with bitrate=0 and stereo=0, 1200 // Test that with bitrate=0 and stereo=0,
1183 // channels and bitrate are 1 and 32000. 1201 // channels and bitrate are 1 and 32000.
1184 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 1202 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
1185 EXPECT_TRUE(SetupSendStream()); 1203 EXPECT_TRUE(SetupSendStream());
1186 int channel_num = voe_.GetLastChannel();
1187 cricket::AudioSendParameters parameters; 1204 cricket::AudioSendParameters parameters;
1188 parameters.codecs.push_back(kOpusCodec); 1205 parameters.codecs.push_back(kOpusCodec);
1189 parameters.codecs[0].bitrate = 0; 1206 parameters.codecs[0].bitrate = 0;
1190 parameters.codecs[0].params["stereo"] = "0"; 1207 parameters.codecs[0].params["stereo"] = "0";
1191 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1208 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1192 webrtc::CodecInst gcodec; 1209 CheckSendCodec(kSsrc1, "opus", 1, 32000);
1193 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1194 EXPECT_STREQ("opus", gcodec.plname);
1195 EXPECT_EQ(1, gcodec.channels);
1196 EXPECT_EQ(32000, gcodec.rate);
1197 } 1210 }
1198 1211
1199 // Test that with bitrate=invalid and stereo=0, 1212 // Test that with bitrate=invalid and stereo=0,
1200 // channels and bitrate are 1 and 32000. 1213 // channels and bitrate are 1 and 32000.
1201 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 1214 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
1202 EXPECT_TRUE(SetupSendStream()); 1215 EXPECT_TRUE(SetupSendStream());
1203 int channel_num = voe_.GetLastChannel();
1204 cricket::AudioSendParameters parameters; 1216 cricket::AudioSendParameters parameters;
1205 parameters.codecs.push_back(kOpusCodec); 1217 parameters.codecs.push_back(kOpusCodec);
1206 parameters.codecs[0].params["stereo"] = "0"; 1218 parameters.codecs[0].params["stereo"] = "0";
1207 webrtc::CodecInst gcodec;
1208
1209 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1219 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1210 parameters.codecs[0].bitrate = 5999; 1220 parameters.codecs[0].bitrate = 5999;
1211 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1221 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1212 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1222 CheckSendCodec(kSsrc1, "opus", 1, 6000);
1213 EXPECT_STREQ("opus", gcodec.plname);
1214 EXPECT_EQ(1, gcodec.channels);
1215 EXPECT_EQ(6000, gcodec.rate);
1216 1223
1217 parameters.codecs[0].bitrate = 510001; 1224 parameters.codecs[0].bitrate = 510001;
1218 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1225 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1219 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1226 CheckSendCodec(kSsrc1, "opus", 1, 510000);
1220 EXPECT_STREQ("opus", gcodec.plname);
1221 EXPECT_EQ(1, gcodec.channels);
1222 EXPECT_EQ(510000, gcodec.rate);
1223 } 1227 }
1224 1228
1225 // Test that with bitrate=0 and stereo=1, 1229 // Test that with bitrate=0 and stereo=1,
1226 // channels and bitrate are 2 and 64000. 1230 // channels and bitrate are 2 and 64000.
1227 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 1231 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
1228 EXPECT_TRUE(SetupSendStream()); 1232 EXPECT_TRUE(SetupSendStream());
1229 int channel_num = voe_.GetLastChannel();
1230 cricket::AudioSendParameters parameters; 1233 cricket::AudioSendParameters parameters;
1231 parameters.codecs.push_back(kOpusCodec); 1234 parameters.codecs.push_back(kOpusCodec);
1232 parameters.codecs[0].bitrate = 0; 1235 parameters.codecs[0].bitrate = 0;
1233 parameters.codecs[0].params["stereo"] = "1"; 1236 parameters.codecs[0].params["stereo"] = "1";
1234 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1237 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1235 webrtc::CodecInst gcodec; 1238 CheckSendCodec(kSsrc1, "opus", 2, 64000);
1236 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1237 EXPECT_STREQ("opus", gcodec.plname);
1238 EXPECT_EQ(2, gcodec.channels);
1239 EXPECT_EQ(64000, gcodec.rate);
1240 } 1239 }
1241 1240
1242 // Test that with bitrate=invalid and stereo=1, 1241 // Test that with bitrate=invalid and stereo=1,
1243 // channels and bitrate are 2 and 64000. 1242 // channels and bitrate are 2 and 64000.
1244 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 1243 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
1245 EXPECT_TRUE(SetupSendStream()); 1244 EXPECT_TRUE(SetupSendStream());
1246 int channel_num = voe_.GetLastChannel();
1247 cricket::AudioSendParameters parameters; 1245 cricket::AudioSendParameters parameters;
1248 parameters.codecs.push_back(kOpusCodec); 1246 parameters.codecs.push_back(kOpusCodec);
1249 parameters.codecs[0].params["stereo"] = "1"; 1247 parameters.codecs[0].params["stereo"] = "1";
1250 webrtc::CodecInst gcodec;
1251
1252 // bitrate that's out of the range between 6000 and 510000 will be clamped. 1248 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1253 parameters.codecs[0].bitrate = 5999; 1249 parameters.codecs[0].bitrate = 5999;
1254 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1250 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1255 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1251 CheckSendCodec(kSsrc1, "opus", 2, 6000);
1256 EXPECT_STREQ("opus", gcodec.plname);
1257 EXPECT_EQ(2, gcodec.channels);
1258 EXPECT_EQ(6000, gcodec.rate);
1259 1252
1260 parameters.codecs[0].bitrate = 510001; 1253 parameters.codecs[0].bitrate = 510001;
1261 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1254 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1262 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1255 CheckSendCodec(kSsrc1, "opus", 2, 510000);
1263 EXPECT_STREQ("opus", gcodec.plname);
1264 EXPECT_EQ(2, gcodec.channels);
1265 EXPECT_EQ(510000, gcodec.rate);
1266 } 1256 }
1267 1257
1268 // Test that with bitrate=N and stereo unset, 1258 // Test that with bitrate=N and stereo unset,
1269 // channels and bitrate are 1 and N. 1259 // channels and bitrate are 1 and N.
1270 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 1260 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
1271 EXPECT_TRUE(SetupSendStream()); 1261 EXPECT_TRUE(SetupSendStream());
1272 int channel_num = voe_.GetLastChannel();
1273 cricket::AudioSendParameters parameters; 1262 cricket::AudioSendParameters parameters;
1274 parameters.codecs.push_back(kOpusCodec); 1263 parameters.codecs.push_back(kOpusCodec);
1275 parameters.codecs[0].bitrate = 96000; 1264 parameters.codecs[0].bitrate = 96000;
1276 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1265 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1277 webrtc::CodecInst gcodec; 1266 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1278 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1267 webrtc::CodecInst gcodec =
1268 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1279 EXPECT_EQ(111, gcodec.pltype); 1269 EXPECT_EQ(111, gcodec.pltype);
1280 EXPECT_EQ(96000, gcodec.rate); 1270 EXPECT_EQ(96000, gcodec.rate);
1281 EXPECT_STREQ("opus", gcodec.plname); 1271 EXPECT_STREQ("opus", gcodec.plname);
1282 EXPECT_EQ(1, gcodec.channels); 1272 EXPECT_EQ(1, gcodec.channels);
1283 EXPECT_EQ(48000, gcodec.plfreq); 1273 EXPECT_EQ(48000, gcodec.plfreq);
1284 } 1274 }
1285 1275
1286 // Test that with bitrate=N and stereo=0, 1276 // Test that with bitrate=N and stereo=0,
1287 // channels and bitrate are 1 and N. 1277 // channels and bitrate are 1 and N.
1288 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 1278 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
1289 EXPECT_TRUE(SetupSendStream()); 1279 EXPECT_TRUE(SetupSendStream());
1290 int channel_num = voe_.GetLastChannel();
1291 cricket::AudioSendParameters parameters; 1280 cricket::AudioSendParameters parameters;
1292 parameters.codecs.push_back(kOpusCodec); 1281 parameters.codecs.push_back(kOpusCodec);
1293 parameters.codecs[0].bitrate = 30000; 1282 parameters.codecs[0].bitrate = 30000;
1294 parameters.codecs[0].params["stereo"] = "0"; 1283 parameters.codecs[0].params["stereo"] = "0";
1295 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1284 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1296 webrtc::CodecInst gcodec; 1285 CheckSendCodec(kSsrc1, "opus", 1, 30000);
1297 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1298 EXPECT_EQ(1, gcodec.channels);
1299 EXPECT_EQ(30000, gcodec.rate);
1300 EXPECT_STREQ("opus", gcodec.plname);
1301 } 1286 }
1302 1287
1303 // Test that with bitrate=N and without any parameters, 1288 // Test that with bitrate=N and without any parameters,
1304 // channels and bitrate are 1 and N. 1289 // channels and bitrate are 1 and N.
1305 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 1290 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
1306 EXPECT_TRUE(SetupSendStream()); 1291 EXPECT_TRUE(SetupSendStream());
1307 int channel_num = voe_.GetLastChannel();
1308 cricket::AudioSendParameters parameters; 1292 cricket::AudioSendParameters parameters;
1309 parameters.codecs.push_back(kOpusCodec); 1293 parameters.codecs.push_back(kOpusCodec);
1310 parameters.codecs[0].bitrate = 30000; 1294 parameters.codecs[0].bitrate = 30000;
1311 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1295 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1312 webrtc::CodecInst gcodec; 1296 CheckSendCodec(kSsrc1, "opus", 1, 30000);
1313 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1314 EXPECT_EQ(1, gcodec.channels);
1315 EXPECT_EQ(30000, gcodec.rate);
1316 EXPECT_STREQ("opus", gcodec.plname);
1317 } 1297 }
1318 1298
1319 // Test that with bitrate=N and stereo=1, 1299 // Test that with bitrate=N and stereo=1,
1320 // channels and bitrate are 2 and N. 1300 // channels and bitrate are 2 and N.
1321 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 1301 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
1322 EXPECT_TRUE(SetupSendStream()); 1302 EXPECT_TRUE(SetupSendStream());
1323 int channel_num = voe_.GetLastChannel();
1324 cricket::AudioSendParameters parameters; 1303 cricket::AudioSendParameters parameters;
1325 parameters.codecs.push_back(kOpusCodec); 1304 parameters.codecs.push_back(kOpusCodec);
1326 parameters.codecs[0].bitrate = 30000; 1305 parameters.codecs[0].bitrate = 30000;
1327 parameters.codecs[0].params["stereo"] = "1"; 1306 parameters.codecs[0].params["stereo"] = "1";
1328 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1307 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1329 webrtc::CodecInst gcodec; 1308 CheckSendCodec(kSsrc1, "opus", 2, 30000);
1330 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1331 EXPECT_EQ(2, gcodec.channels);
1332 EXPECT_EQ(30000, gcodec.rate);
1333 EXPECT_STREQ("opus", gcodec.plname);
1334 } 1309 }
1335 1310
1336 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. 1311 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
1337 // Also test that the "maxaveragebitrate" can't be set to values outside the 1312 // Also test that the "maxaveragebitrate" can't be set to values outside the
1338 // range of 6000 and 510000 1313 // range of 6000 and 510000
1339 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { 1314 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
1340 EXPECT_TRUE(SetupSendStream()); 1315 EXPECT_TRUE(SetupSendStream());
1341 int channel_num = voe_.GetLastChannel();
1342 cricket::AudioSendParameters parameters; 1316 cricket::AudioSendParameters parameters;
1343 parameters.codecs.push_back(kOpusCodec); 1317 parameters.codecs.push_back(kOpusCodec);
1344 parameters.codecs[0].bitrate = 30000; 1318 parameters.codecs[0].bitrate = 30000;
1345 webrtc::CodecInst gcodec;
1346
1347 // Ignore if less than 6000. 1319 // Ignore if less than 6000.
1348 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; 1320 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
1349 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1321 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1350 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1322 CheckCodecBitrate(kSsrc1, 6000);
1351 EXPECT_EQ(6000, gcodec.rate);
1352 1323
1353 // Ignore if larger than 510000. 1324 // Ignore if larger than 510000.
1354 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; 1325 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1355 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1326 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1356 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1327 CheckCodecBitrate(kSsrc1, 510000);
1357 EXPECT_EQ(510000, gcodec.rate);
1358 1328
1359 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; 1329 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1360 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1330 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1361 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1331 CheckCodecBitrate(kSsrc1, 200000);
1362 EXPECT_EQ(200000, gcodec.rate);
1363 } 1332 }
1364 1333
1365 // Test that we can enable NACK with opus as caller. 1334 // Test that we can enable NACK with opus as caller.
1366 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { 1335 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) {
1367 EXPECT_TRUE(SetupSendStream()); 1336 EXPECT_TRUE(SetupSendStream());
1368 cricket::AudioSendParameters parameters; 1337 cricket::AudioSendParameters parameters;
1369 parameters.codecs.push_back(kOpusCodec); 1338 parameters.codecs.push_back(kOpusCodec);
1370 parameters.codecs[0].AddFeedbackParam( 1339 parameters.codecs[0].AddFeedbackParam(
1371 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1340 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1372 cricket::kParamValueEmpty)); 1341 cricket::kParamValueEmpty));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 1429
1461 EXPECT_TRUE(AddRecvStream(kSsrc2)); 1430 EXPECT_TRUE(AddRecvStream(kSsrc2));
1462 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1431 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1463 EXPECT_TRUE(AddRecvStream(kSsrc3)); 1432 EXPECT_TRUE(AddRecvStream(kSsrc3));
1464 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); 1433 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms);
1465 } 1434 }
1466 1435
1467 // Test that without useinbandfec, Opus FEC is off. 1436 // Test that without useinbandfec, Opus FEC is off.
1468 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { 1437 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
1469 EXPECT_TRUE(SetupSendStream()); 1438 EXPECT_TRUE(SetupSendStream());
1470 int channel_num = voe_.GetLastChannel();
1471 cricket::AudioSendParameters parameters; 1439 cricket::AudioSendParameters parameters;
1472 parameters.codecs.push_back(kOpusCodec); 1440 parameters.codecs.push_back(kOpusCodec);
1473 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1441 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1474 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1442 CheckCodecFec(kSsrc1, false);
1475 } 1443 }
1476 1444
1477 // Test that with useinbandfec=0, Opus FEC is off. 1445 // Test that with useinbandfec=0, Opus FEC is off.
1478 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { 1446 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1479 EXPECT_TRUE(SetupSendStream()); 1447 EXPECT_TRUE(SetupSendStream());
1480 int channel_num = voe_.GetLastChannel();
1481 cricket::AudioSendParameters parameters; 1448 cricket::AudioSendParameters parameters;
1482 parameters.codecs.push_back(kOpusCodec); 1449 parameters.codecs.push_back(kOpusCodec);
1483 parameters.codecs[0].bitrate = 0; 1450 parameters.codecs[0].bitrate = 0;
1484 parameters.codecs[0].params["useinbandfec"] = "0"; 1451 parameters.codecs[0].params["useinbandfec"] = "0";
1485 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1452 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1486 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1453 CheckSendCodec(kSsrc1, "opus", 1, 32000);
1487 webrtc::CodecInst gcodec;
1488 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1489 EXPECT_STREQ("opus", gcodec.plname);
1490 EXPECT_EQ(1, gcodec.channels);
1491 EXPECT_EQ(32000, gcodec.rate);
1492 } 1454 }
1493 1455
1494 // Test that with useinbandfec=1, Opus FEC is on. 1456 // Test that with useinbandfec=1, Opus FEC is on.
1495 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { 1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1496 EXPECT_TRUE(SetupSendStream()); 1458 EXPECT_TRUE(SetupSendStream());
1497 int channel_num = voe_.GetLastChannel();
1498 cricket::AudioSendParameters parameters; 1459 cricket::AudioSendParameters parameters;
1499 parameters.codecs.push_back(kOpusCodec); 1460 parameters.codecs.push_back(kOpusCodec);
1500 parameters.codecs[0].bitrate = 0; 1461 parameters.codecs[0].bitrate = 0;
1501 parameters.codecs[0].params["useinbandfec"] = "1"; 1462 parameters.codecs[0].params["useinbandfec"] = "1";
1502 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1463 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1503 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1464 CheckCodecFec(kSsrc1, true);
1504 webrtc::CodecInst gcodec; 1465 CheckSendCodec(kSsrc1, "opus", 1, 32000);
1505 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1506 EXPECT_STREQ("opus", gcodec.plname);
1507 EXPECT_EQ(1, gcodec.channels);
1508 EXPECT_EQ(32000, gcodec.rate);
1509 } 1466 }
1510 1467
1511 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. 1468 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1512 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { 1469 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1513 EXPECT_TRUE(SetupSendStream()); 1470 EXPECT_TRUE(SetupSendStream());
1514 int channel_num = voe_.GetLastChannel();
1515 cricket::AudioSendParameters parameters; 1471 cricket::AudioSendParameters parameters;
1516 parameters.codecs.push_back(kOpusCodec); 1472 parameters.codecs.push_back(kOpusCodec);
1517 parameters.codecs[0].bitrate = 0; 1473 parameters.codecs[0].bitrate = 0;
1518 parameters.codecs[0].params["stereo"] = "1"; 1474 parameters.codecs[0].params["stereo"] = "1";
1519 parameters.codecs[0].params["useinbandfec"] = "1"; 1475 parameters.codecs[0].params["useinbandfec"] = "1";
1520 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1476 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1521 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1477 CheckCodecFec(kSsrc1, true);
1522 webrtc::CodecInst gcodec; 1478 CheckSendCodec(kSsrc1, "opus", 2, 64000);
1523 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1524 EXPECT_STREQ("opus", gcodec.plname);
1525 EXPECT_EQ(2, gcodec.channels);
1526 EXPECT_EQ(64000, gcodec.rate);
1527 } 1479 }
1528 1480
1529 // Test that with non-Opus, codec FEC is off. 1481 // Test that with non-Opus, codec FEC is off.
1530 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { 1482 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1531 EXPECT_TRUE(SetupSendStream()); 1483 EXPECT_TRUE(SetupSendStream());
1532 int channel_num = voe_.GetLastChannel();
1533 cricket::AudioSendParameters parameters; 1484 cricket::AudioSendParameters parameters;
1534 parameters.codecs.push_back(kIsacCodec); 1485 parameters.codecs.push_back(kIsacCodec);
1535 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1486 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1536 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1487 CheckCodecFec(kSsrc1, false);
1537 } 1488 }
1538 1489
1539 // Test the with non-Opus, even if useinbandfec=1, FEC is off. 1490 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1540 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { 1491 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1541 EXPECT_TRUE(SetupSendStream()); 1492 EXPECT_TRUE(SetupSendStream());
1542 int channel_num = voe_.GetLastChannel();
1543 cricket::AudioSendParameters parameters; 1493 cricket::AudioSendParameters parameters;
1544 parameters.codecs.push_back(kIsacCodec); 1494 parameters.codecs.push_back(kIsacCodec);
1545 parameters.codecs[0].params["useinbandfec"] = "1"; 1495 parameters.codecs[0].params["useinbandfec"] = "1";
1546 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1496 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1547 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1497 CheckCodecFec(kSsrc1, false);
1548 } 1498 }
1549 1499
1550 // Test that Opus FEC status can be changed. 1500 // Test that Opus FEC status can be changed.
1551 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { 1501 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1552 EXPECT_TRUE(SetupSendStream()); 1502 EXPECT_TRUE(SetupSendStream());
1553 int channel_num = voe_.GetLastChannel();
1554 cricket::AudioSendParameters parameters; 1503 cricket::AudioSendParameters parameters;
1555 parameters.codecs.push_back(kOpusCodec); 1504 parameters.codecs.push_back(kOpusCodec);
1556 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1505 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1557 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1506 CheckCodecFec(kSsrc1, false);
1507
1558 parameters.codecs[0].params["useinbandfec"] = "1"; 1508 parameters.codecs[0].params["useinbandfec"] = "1";
1559 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1509 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1560 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1510 CheckCodecFec(kSsrc1, true);
1561 } 1511 }
1562 1512
1563 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { 1513 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) {
1564 EXPECT_TRUE(SetupChannel()); 1514 EXPECT_TRUE(SetupChannel());
1565 cricket::AudioSendParameters send_parameters; 1515 cricket::AudioSendParameters send_parameters;
1566 send_parameters.codecs.push_back(kOpusCodec); 1516 send_parameters.codecs.push_back(kOpusCodec);
1567 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); 1517 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty());
1568 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); 1518 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
1569 1519
1570 cricket::AudioRecvParameters recv_parameters; 1520 cricket::AudioRecvParameters recv_parameters;
1571 recv_parameters.codecs.push_back(kIsacCodec); 1521 recv_parameters.codecs.push_back(kIsacCodec);
1572 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); 1522 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
1573 EXPECT_TRUE(AddRecvStream(kSsrc1)); 1523 EXPECT_TRUE(AddRecvStream(kSsrc1));
1574 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1524 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr);
1575 EXPECT_FALSE( 1525 EXPECT_FALSE(
1576 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1526 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc);
1577 1527
1578 send_parameters.codecs = engine_->send_codecs(); 1528 send_parameters.codecs = engine_->send_codecs();
1579 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); 1529 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
1580 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1530 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr);
1581 EXPECT_TRUE( 1531 EXPECT_TRUE(
1582 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1532 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc);
1583 } 1533 }
1584 1534
1585 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. 1535 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
1586 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { 1536 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1587 EXPECT_TRUE(SetupSendStream()); 1537 EXPECT_TRUE(SetupSendStream());
1588 int channel_num = voe_.GetLastChannel();
1589 cricket::AudioSendParameters parameters; 1538 cricket::AudioSendParameters parameters;
1590 parameters.codecs.push_back(kOpusCodec); 1539 parameters.codecs.push_back(kOpusCodec);
1591 parameters.codecs[0].bitrate = 0; 1540 parameters.codecs[0].bitrate = 0;
1592 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1541 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1593 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1542 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1594 EXPECT_EQ(cricket::kOpusBandwidthNb, 1543 CheckOpusMaxPlaybackRate(kSsrc1, 8000);
1595 voe_.GetMaxEncodingBandwidth(channel_num)); 1544 CheckCodecBitrate(kSsrc1, 12000);
1596 webrtc::CodecInst gcodec;
1597 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1598 EXPECT_STREQ("opus", gcodec.plname);
1599 1545
1600 EXPECT_EQ(12000, gcodec.rate);
1601 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1546 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1602 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1547 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1603 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1548 CheckCodecBitrate(kSsrc1, 24000);
1604 EXPECT_EQ(24000, gcodec.rate);
1605 } 1549 }
1606 1550
1607 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. 1551 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1608 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { 1552 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1609 EXPECT_TRUE(SetupSendStream()); 1553 EXPECT_TRUE(SetupSendStream());
1610 int channel_num = voe_.GetLastChannel();
1611 cricket::AudioSendParameters parameters; 1554 cricket::AudioSendParameters parameters;
1612 parameters.codecs.push_back(kOpusCodec); 1555 parameters.codecs.push_back(kOpusCodec);
1613 parameters.codecs[0].bitrate = 0; 1556 parameters.codecs[0].bitrate = 0;
1614 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); 1557 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1615 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1558 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1616 EXPECT_EQ(cricket::kOpusBandwidthMb, 1559 CheckOpusMaxPlaybackRate(kSsrc1, 8001);
1617 voe_.GetMaxEncodingBandwidth(channel_num)); 1560 CheckCodecBitrate(kSsrc1, 20000);
1618 webrtc::CodecInst gcodec;
1619 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1620 EXPECT_STREQ("opus", gcodec.plname);
1621 1561
1622 EXPECT_EQ(20000, gcodec.rate);
1623 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1562 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1624 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1563 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1625 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1564 CheckCodecBitrate(kSsrc1, 40000);
1626 EXPECT_EQ(40000, gcodec.rate);
1627 } 1565 }
1628 1566
1629 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. 1567 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1630 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { 1568 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1631 EXPECT_TRUE(SetupSendStream()); 1569 EXPECT_TRUE(SetupSendStream());
1632 int channel_num = voe_.GetLastChannel();
1633 cricket::AudioSendParameters parameters; 1570 cricket::AudioSendParameters parameters;
1634 parameters.codecs.push_back(kOpusCodec); 1571 parameters.codecs.push_back(kOpusCodec);
1635 parameters.codecs[0].bitrate = 0; 1572 parameters.codecs[0].bitrate = 0;
1636 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); 1573 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1637 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1574 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1638 EXPECT_EQ(cricket::kOpusBandwidthWb, 1575 CheckOpusMaxPlaybackRate(kSsrc1, 12001);
1639 voe_.GetMaxEncodingBandwidth(channel_num)); 1576 CheckCodecBitrate(kSsrc1, 20000);
1640 webrtc::CodecInst gcodec;
1641 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1642 EXPECT_STREQ("opus", gcodec.plname);
1643 1577
1644 EXPECT_EQ(20000, gcodec.rate);
1645 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1578 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1646 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1579 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1647 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1580 CheckCodecBitrate(kSsrc1, 40000);
1648 EXPECT_EQ(40000, gcodec.rate);
1649 } 1581 }
1650 1582
1651 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. 1583 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1652 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { 1584 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1653 EXPECT_TRUE(SetupSendStream()); 1585 EXPECT_TRUE(SetupSendStream());
1654 int channel_num = voe_.GetLastChannel();
1655 cricket::AudioSendParameters parameters; 1586 cricket::AudioSendParameters parameters;
1656 parameters.codecs.push_back(kOpusCodec); 1587 parameters.codecs.push_back(kOpusCodec);
1657 parameters.codecs[0].bitrate = 0; 1588 parameters.codecs[0].bitrate = 0;
1658 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); 1589 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1659 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1590 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1660 EXPECT_EQ(cricket::kOpusBandwidthSwb, 1591 CheckOpusMaxPlaybackRate(kSsrc1, 16001);
1661 voe_.GetMaxEncodingBandwidth(channel_num)); 1592 CheckCodecBitrate(kSsrc1, 32000);
1662 webrtc::CodecInst gcodec;
1663 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1664 EXPECT_STREQ("opus", gcodec.plname);
1665 1593
1666 EXPECT_EQ(32000, gcodec.rate);
1667 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1594 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1668 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1595 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1669 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1596 CheckCodecBitrate(kSsrc1, 64000);
1670 EXPECT_EQ(64000, gcodec.rate);
1671 } 1597 }
1672 1598
1673 // Test 24000 < maxplaybackrate triggers Opus full band mode. 1599 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1674 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { 1600 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1675 EXPECT_TRUE(SetupSendStream()); 1601 EXPECT_TRUE(SetupSendStream());
1676 int channel_num = voe_.GetLastChannel();
1677 cricket::AudioSendParameters parameters; 1602 cricket::AudioSendParameters parameters;
1678 parameters.codecs.push_back(kOpusCodec); 1603 parameters.codecs.push_back(kOpusCodec);
1679 parameters.codecs[0].bitrate = 0; 1604 parameters.codecs[0].bitrate = 0;
1680 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); 1605 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1681 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1606 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1682 EXPECT_EQ(cricket::kOpusBandwidthFb, 1607 CheckOpusMaxPlaybackRate(kSsrc1, 24001);
1683 voe_.GetMaxEncodingBandwidth(channel_num)); 1608 CheckCodecBitrate(kSsrc1, 32000);
1684 webrtc::CodecInst gcodec;
1685 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1686 EXPECT_STREQ("opus", gcodec.plname);
1687 1609
1688 EXPECT_EQ(32000, gcodec.rate);
1689 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1610 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1690 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1611 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1691 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1612 CheckCodecBitrate(kSsrc1, 64000);
1692 EXPECT_EQ(64000, gcodec.rate);
1693 } 1613 }
1694 1614
1695 // Test Opus that without maxplaybackrate, default playback rate is used. 1615 // Test Opus that without maxplaybackrate, default playback rate is used.
1696 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { 1616 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1697 EXPECT_TRUE(SetupSendStream()); 1617 EXPECT_TRUE(SetupSendStream());
1698 int channel_num = voe_.GetLastChannel();
1699 cricket::AudioSendParameters parameters; 1618 cricket::AudioSendParameters parameters;
1700 parameters.codecs.push_back(kOpusCodec); 1619 parameters.codecs.push_back(kOpusCodec);
1701 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1620 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1702 EXPECT_EQ(cricket::kOpusBandwidthFb, 1621 CheckOpusMaxPlaybackRate(kSsrc1, 48000);
1703 voe_.GetMaxEncodingBandwidth(channel_num));
1704 } 1622 }
1705 1623
1706 // Test the with non-Opus, maxplaybackrate has no effect. 1624 // Test the with non-Opus, maxplaybackrate has no effect.
1707 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { 1625 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1708 EXPECT_TRUE(SetupSendStream()); 1626 EXPECT_TRUE(SetupSendStream());
1709 int channel_num = voe_.GetLastChannel();
1710 cricket::AudioSendParameters parameters; 1627 cricket::AudioSendParameters parameters;
1711 parameters.codecs.push_back(kIsacCodec); 1628 parameters.codecs.push_back(kIsacCodec);
1712 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); 1629 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1713 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1630 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1714 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num)); 1631 CheckOpusMaxPlaybackRate(kSsrc1, 0);
1715 } 1632 }
1716 1633
1717 // Test maxplaybackrate can be set on two streams. 1634 // Test maxplaybackrate can be set on two streams.
1718 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { 1635 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1719 EXPECT_TRUE(SetupSendStream()); 1636 EXPECT_TRUE(SetupSendStream());
1720 int channel_num = voe_.GetLastChannel();
1721 cricket::AudioSendParameters parameters; 1637 cricket::AudioSendParameters parameters;
1722 parameters.codecs.push_back(kOpusCodec); 1638 parameters.codecs.push_back(kOpusCodec);
1723 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1639 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1724 // Default bandwidth is 24000. 1640 CheckOpusMaxPlaybackRate(kSsrc1, 48000);
1725 EXPECT_EQ(cricket::kOpusBandwidthFb,
1726 voe_.GetMaxEncodingBandwidth(channel_num));
1727 1641
1728 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1642 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1729
1730 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1643 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1731 EXPECT_EQ(cricket::kOpusBandwidthNb, 1644 CheckOpusMaxPlaybackRate(kSsrc1, 8000);
1732 voe_.GetMaxEncodingBandwidth(channel_num));
1733 1645
1734 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); 1646 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2));
1735 channel_num = voe_.GetLastChannel(); 1647 CheckOpusMaxPlaybackRate(kSsrc2, 8000);
1736 EXPECT_EQ(cricket::kOpusBandwidthNb,
1737 voe_.GetMaxEncodingBandwidth(channel_num));
1738 } 1648 }
1739 1649
1740 // Test that with usedtx=0, Opus DTX is off. 1650 // Test that with usedtx=0, Opus DTX is off.
1741 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { 1651 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1742 EXPECT_TRUE(SetupSendStream()); 1652 EXPECT_TRUE(SetupSendStream());
1743 int channel_num = voe_.GetLastChannel();
1744 cricket::AudioSendParameters parameters; 1653 cricket::AudioSendParameters parameters;
1745 parameters.codecs.push_back(kOpusCodec); 1654 parameters.codecs.push_back(kOpusCodec);
1746 parameters.codecs[0].params["usedtx"] = "0"; 1655 parameters.codecs[0].params["usedtx"] = "0";
1747 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1656 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1748 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1657 CheckOpusDtx(kSsrc1, false);
1749 } 1658 }
1750 1659
1751 // Test that with usedtx=1, Opus DTX is on. 1660 // Test that with usedtx=1, Opus DTX is on.
1752 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { 1661 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1753 EXPECT_TRUE(SetupSendStream()); 1662 EXPECT_TRUE(SetupSendStream());
1754 int channel_num = voe_.GetLastChannel();
1755 cricket::AudioSendParameters parameters; 1663 cricket::AudioSendParameters parameters;
1756 parameters.codecs.push_back(kOpusCodec); 1664 parameters.codecs.push_back(kOpusCodec);
1757 parameters.codecs[0].params["usedtx"] = "1"; 1665 parameters.codecs[0].params["usedtx"] = "1";
1758 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1666 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1759 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1667 CheckOpusDtx(kSsrc1, true);
1760 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1761 } 1668 }
1762 1669
1763 // Test that usedtx=1 works with stereo Opus. 1670 // Test that usedtx=1 works with stereo Opus.
1764 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { 1671 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1765 EXPECT_TRUE(SetupSendStream()); 1672 EXPECT_TRUE(SetupSendStream());
1766 int channel_num = voe_.GetLastChannel();
1767 cricket::AudioSendParameters parameters; 1673 cricket::AudioSendParameters parameters;
1768 parameters.codecs.push_back(kOpusCodec); 1674 parameters.codecs.push_back(kOpusCodec);
1769 parameters.codecs[0].params["usedtx"] = "1"; 1675 parameters.codecs[0].params["usedtx"] = "1";
1770 parameters.codecs[0].params["stereo"] = "1"; 1676 parameters.codecs[0].params["stereo"] = "1";
1771 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1677 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1772 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1678 CheckOpusDtx(kSsrc1, true);
1773 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1774 } 1679 }
1775 1680
1776 // Test that usedtx=1 does not work with non Opus. 1681 // Test that usedtx=1 does not work with non Opus.
1777 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { 1682 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1778 EXPECT_TRUE(SetupSendStream()); 1683 EXPECT_TRUE(SetupSendStream());
1779 int channel_num = voe_.GetLastChannel();
1780 cricket::AudioSendParameters parameters; 1684 cricket::AudioSendParameters parameters;
1781 parameters.codecs.push_back(kIsacCodec); 1685 parameters.codecs.push_back(kIsacCodec);
1782 parameters.codecs[0].params["usedtx"] = "1"; 1686 parameters.codecs[0].params["usedtx"] = "1";
1783 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1687 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1784 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1688 CheckOpusDtx(kSsrc1, false);
1785 } 1689 }
1786 1690
1787 // Test that we can switch back and forth between Opus and ISAC with CN. 1691 // Test that we can switch back and forth between Opus and ISAC with CN.
1788 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1692 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1789 EXPECT_TRUE(SetupSendStream()); 1693 EXPECT_TRUE(SetupSendStream());
1790 int channel_num = voe_.GetLastChannel(); 1694
1791 cricket::AudioSendParameters opus_parameters; 1695 cricket::AudioSendParameters opus_parameters;
1792 opus_parameters.codecs.push_back(kOpusCodec); 1696 opus_parameters.codecs.push_back(kOpusCodec);
1793 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1697 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1794 webrtc::CodecInst gcodec; 1698 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1795 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1699 webrtc::CodecInst gcodec =
1700 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1796 EXPECT_EQ(111, gcodec.pltype); 1701 EXPECT_EQ(111, gcodec.pltype);
1797 EXPECT_STREQ("opus", gcodec.plname); 1702 EXPECT_STREQ("opus", gcodec.plname);
1798 1703
1799 cricket::AudioSendParameters isac_parameters; 1704 cricket::AudioSendParameters isac_parameters;
1800 isac_parameters.codecs.push_back(kIsacCodec); 1705 isac_parameters.codecs.push_back(kIsacCodec);
1801 isac_parameters.codecs.push_back(kCn16000Codec); 1706 isac_parameters.codecs.push_back(kCn16000Codec);
1802 isac_parameters.codecs.push_back(kOpusCodec); 1707 isac_parameters.codecs.push_back(kOpusCodec);
1803 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters)); 1708 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters));
1804 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1709 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1710 gcodec =
1711 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1805 EXPECT_EQ(103, gcodec.pltype); 1712 EXPECT_EQ(103, gcodec.pltype);
1806 EXPECT_STREQ("ISAC", gcodec.plname); 1713 EXPECT_STREQ("ISAC", gcodec.plname);
1807 1714
1808 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1715 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1809 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1716 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1717 gcodec =
1718 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1810 EXPECT_EQ(111, gcodec.pltype); 1719 EXPECT_EQ(111, gcodec.pltype);
1811 EXPECT_STREQ("opus", gcodec.plname); 1720 EXPECT_STREQ("opus", gcodec.plname);
1812 } 1721 }
1813 1722
1814 // Test that we handle various ways of specifying bitrate. 1723 // Test that we handle various ways of specifying bitrate.
1815 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1724 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1816 EXPECT_TRUE(SetupSendStream()); 1725 EXPECT_TRUE(SetupSendStream());
1817 int channel_num = voe_.GetLastChannel();
1818 cricket::AudioSendParameters parameters; 1726 cricket::AudioSendParameters parameters;
1819 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 1727 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1820 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1728 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1821 webrtc::CodecInst gcodec; 1729 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1822 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1730 webrtc::CodecInst gcodec =
1731 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1823 EXPECT_EQ(103, gcodec.pltype); 1732 EXPECT_EQ(103, gcodec.pltype);
1824 EXPECT_STREQ("ISAC", gcodec.plname); 1733 EXPECT_STREQ("ISAC", gcodec.plname);
1825 EXPECT_EQ(32000, gcodec.rate); 1734 EXPECT_EQ(32000, gcodec.rate);
1826 1735
1827 parameters.codecs[0].bitrate = 0; // bitrate == default 1736 parameters.codecs[0].bitrate = 0; // bitrate == default
1828 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1737 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1829 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1738 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1739 gcodec =
1740 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1830 EXPECT_EQ(103, gcodec.pltype); 1741 EXPECT_EQ(103, gcodec.pltype);
1831 EXPECT_STREQ("ISAC", gcodec.plname); 1742 EXPECT_STREQ("ISAC", gcodec.plname);
1832 EXPECT_EQ(-1, gcodec.rate); 1743 EXPECT_EQ(-1, gcodec.rate);
1833 1744
1834 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 1745 parameters.codecs[0].bitrate = 28000; // bitrate == 28000
1835 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1746 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1836 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1747 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1748 gcodec =
1749 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1837 EXPECT_EQ(103, gcodec.pltype); 1750 EXPECT_EQ(103, gcodec.pltype);
1838 EXPECT_STREQ("ISAC", gcodec.plname); 1751 EXPECT_STREQ("ISAC", gcodec.plname);
1839 EXPECT_EQ(28000, gcodec.rate); 1752 EXPECT_EQ(28000, gcodec.rate);
1840 1753
1841 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 1754 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000
1842 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1755 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1843 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1756 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1757 gcodec =
1758 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1844 EXPECT_EQ(0, gcodec.pltype); 1759 EXPECT_EQ(0, gcodec.pltype);
1845 EXPECT_STREQ("PCMU", gcodec.plname); 1760 EXPECT_STREQ("PCMU", gcodec.plname);
1846 EXPECT_EQ(64000, gcodec.rate); 1761 EXPECT_EQ(64000, gcodec.rate);
1847 1762
1848 parameters.codecs[0].bitrate = 0; // bitrate == default 1763 parameters.codecs[0].bitrate = 0; // bitrate == default
1849 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1764 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1850 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1765 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1766 gcodec =
1767 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1851 EXPECT_EQ(0, gcodec.pltype); 1768 EXPECT_EQ(0, gcodec.pltype);
1852 EXPECT_STREQ("PCMU", gcodec.plname); 1769 EXPECT_STREQ("PCMU", gcodec.plname);
1853 EXPECT_EQ(64000, gcodec.rate); 1770 EXPECT_EQ(64000, gcodec.rate);
1854 1771
1855 parameters.codecs[0] = kOpusCodec; 1772 parameters.codecs[0] = kOpusCodec;
1856 parameters.codecs[0].bitrate = 0; // bitrate == default 1773 parameters.codecs[0].bitrate = 0; // bitrate == default
1857 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1774 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1858 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1775 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1776 gcodec =
1777 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1859 EXPECT_EQ(111, gcodec.pltype); 1778 EXPECT_EQ(111, gcodec.pltype);
1860 EXPECT_STREQ("opus", gcodec.plname); 1779 EXPECT_STREQ("opus", gcodec.plname);
1861 EXPECT_EQ(32000, gcodec.rate); 1780 EXPECT_EQ(32000, gcodec.rate);
1862 } 1781 }
1863 1782
1864 // Test that we could set packet size specified in kCodecParamPTime. 1783 // Test that we could set packet size specified in kCodecParamPTime.
1865 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { 1784 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
1866 EXPECT_TRUE(SetupSendStream()); 1785 EXPECT_TRUE(SetupSendStream());
1867 int channel_num = voe_.GetLastChannel();
1868 cricket::AudioSendParameters parameters; 1786 cricket::AudioSendParameters parameters;
1869 parameters.codecs.push_back(kOpusCodec); 1787 parameters.codecs.push_back(kOpusCodec);
1870 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1788 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1871 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1789 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1872 webrtc::CodecInst gcodec; 1790 CheckCodecPacSize(kSsrc1, 1920); // Opus gets 40ms.
1873 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1874 EXPECT_EQ(1920, gcodec.pacsize); // Opus gets 40ms.
1875 1791
1876 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. 1792 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
1877 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1793 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1878 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1794 CheckCodecPacSize(kSsrc1, 480); // Opus gets 10ms.
1879 EXPECT_EQ(480, gcodec.pacsize); // Opus gets 10ms.
1880 1795
1881 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. 1796 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range.
1882 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1797 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1883 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1798 CheckCodecPacSize(kSsrc1, 2880); // Opus gets 60ms.
1884 EXPECT_EQ(2880, gcodec.pacsize); // Opus gets 60ms.
1885 1799
1886 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. 1800 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size.
1887 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1801 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1888 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1802 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1889 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1803 CheckCodecPacSize(kSsrc1, 480); // Isac gets 30ms as the next smallest value.
1890 EXPECT_EQ(480, gcodec.pacsize); // Isac gets 30ms as the next smallest value.
1891 1804
1892 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. 1805 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
1893 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); 1806 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
1894 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1807 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1895 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1808 CheckCodecPacSize(kSsrc1, 640); // G722 gets 40ms @16kHz as defined in VoE.
1896 EXPECT_EQ(640, gcodec.pacsize); // G722 gets 40ms @16kHz as defined in VoE.
1897 } 1809 }
1898 1810
1899 // Test that we fail if no codecs are specified. 1811 // Test that we fail if no codecs are specified.
1900 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { 1812 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
1901 EXPECT_TRUE(SetupSendStream()); 1813 EXPECT_TRUE(SetupSendStream());
1902 cricket::AudioSendParameters parameters; 1814 cricket::AudioSendParameters parameters;
1903 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1815 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1904 } 1816 }
1905 1817
1906 // Test that we can set send codecs even with telephone-event codec as the first 1818 // Test that we can set send codecs even with telephone-event codec as the first
1907 // one on the list. 1819 // one on the list.
1908 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1820 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
1909 EXPECT_TRUE(SetupSendStream()); 1821 EXPECT_TRUE(SetupSendStream());
1910 int channel_num = voe_.GetLastChannel();
1911 cricket::AudioSendParameters parameters; 1822 cricket::AudioSendParameters parameters;
1912 parameters.codecs.push_back(kTelephoneEventCodec); 1823 parameters.codecs.push_back(kTelephoneEventCodec);
1913 parameters.codecs.push_back(kIsacCodec); 1824 parameters.codecs.push_back(kIsacCodec);
1914 parameters.codecs.push_back(kPcmuCodec); 1825 parameters.codecs.push_back(kPcmuCodec);
1915 parameters.codecs[0].id = 98; // DTMF 1826 parameters.codecs[0].id = 98; // DTMF
1916 parameters.codecs[1].id = 96; 1827 parameters.codecs[1].id = 96;
1917 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1828 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1918 webrtc::CodecInst gcodec; 1829 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1919 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1830 webrtc::CodecInst gcodec =
1831 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1920 EXPECT_EQ(96, gcodec.pltype); 1832 EXPECT_EQ(96, gcodec.pltype);
1921 EXPECT_STREQ("ISAC", gcodec.plname); 1833 EXPECT_STREQ("ISAC", gcodec.plname);
1922 EXPECT_TRUE(channel_->CanInsertDtmf()); 1834 EXPECT_TRUE(channel_->CanInsertDtmf());
1923 } 1835 }
1924 1836
1925 // Test that payload type range is limited for telephone-event codec. 1837 // Test that payload type range is limited for telephone-event codec.
1926 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { 1838 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) {
1927 EXPECT_TRUE(SetupSendStream()); 1839 EXPECT_TRUE(SetupSendStream());
1928 cricket::AudioSendParameters parameters; 1840 cricket::AudioSendParameters parameters;
1929 parameters.codecs.push_back(kTelephoneEventCodec); 1841 parameters.codecs.push_back(kTelephoneEventCodec);
(...skipping 10 matching lines...) Expand all
1940 EXPECT_TRUE(channel_->CanInsertDtmf()); 1852 EXPECT_TRUE(channel_->CanInsertDtmf());
1941 parameters.codecs[0].id = -1; // DTMF 1853 parameters.codecs[0].id = -1; // DTMF
1942 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1854 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1943 EXPECT_FALSE(channel_->CanInsertDtmf()); 1855 EXPECT_FALSE(channel_->CanInsertDtmf());
1944 } 1856 }
1945 1857
1946 // Test that we can set send codecs even with CN codec as the first 1858 // Test that we can set send codecs even with CN codec as the first
1947 // one on the list. 1859 // one on the list.
1948 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 1860 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
1949 EXPECT_TRUE(SetupSendStream()); 1861 EXPECT_TRUE(SetupSendStream());
1950 int channel_num = voe_.GetLastChannel();
1951 cricket::AudioSendParameters parameters; 1862 cricket::AudioSendParameters parameters;
1952 parameters.codecs.push_back(kCn16000Codec); 1863 parameters.codecs.push_back(kCn16000Codec);
1953 parameters.codecs.push_back(kIsacCodec); 1864 parameters.codecs.push_back(kIsacCodec);
1954 parameters.codecs.push_back(kPcmuCodec); 1865 parameters.codecs.push_back(kPcmuCodec);
1955 parameters.codecs[0].id = 98; // wideband CN 1866 parameters.codecs[0].id = 98; // wideband CN
1956 parameters.codecs[1].id = 96; 1867 parameters.codecs[1].id = 96;
1957 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1868 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1958 webrtc::CodecInst gcodec; 1869 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1959 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1870 auto send_codec_spec =
1960 EXPECT_EQ(96, gcodec.pltype); 1871 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1961 EXPECT_STREQ("ISAC", gcodec.plname); 1872 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1962 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true)); 1873 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1874 EXPECT_EQ(98, send_codec_spec.cng_payload_type);
1875 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
1963 } 1876 }
1964 1877
1965 // Test that we set VAD and DTMF types correctly as caller. 1878 // Test that we set VAD and DTMF types correctly as caller.
1966 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 1879 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
1967 EXPECT_TRUE(SetupSendStream()); 1880 EXPECT_TRUE(SetupSendStream());
1968 int channel_num = voe_.GetLastChannel();
1969 cricket::AudioSendParameters parameters; 1881 cricket::AudioSendParameters parameters;
1970 parameters.codecs.push_back(kIsacCodec); 1882 parameters.codecs.push_back(kIsacCodec);
1971 parameters.codecs.push_back(kPcmuCodec); 1883 parameters.codecs.push_back(kPcmuCodec);
1972 // TODO(juberti): cn 32000 1884 // TODO(juberti): cn 32000
1973 parameters.codecs.push_back(kCn16000Codec); 1885 parameters.codecs.push_back(kCn16000Codec);
1974 parameters.codecs.push_back(kCn8000Codec); 1886 parameters.codecs.push_back(kCn8000Codec);
1975 parameters.codecs.push_back(kTelephoneEventCodec); 1887 parameters.codecs.push_back(kTelephoneEventCodec);
1976 parameters.codecs[0].id = 96; 1888 parameters.codecs[0].id = 96;
1977 parameters.codecs[2].id = 97; // wideband CN 1889 parameters.codecs[2].id = 97; // wideband CN
1978 parameters.codecs[4].id = 98; // DTMF 1890 parameters.codecs[4].id = 98; // DTMF
1979 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1891 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1980 webrtc::CodecInst gcodec; 1892 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1981 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1893 auto send_codec_spec =
1982 EXPECT_EQ(96, gcodec.pltype); 1894 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1983 EXPECT_STREQ("ISAC", gcodec.plname); 1895 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1984 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1896 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1985 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1897 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1986 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1898 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1899 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1900 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
1987 EXPECT_TRUE(channel_->CanInsertDtmf()); 1901 EXPECT_TRUE(channel_->CanInsertDtmf());
1988 } 1902 }
1989 1903
1990 // Test that we set VAD and DTMF types correctly as callee. 1904 // Test that we set VAD and DTMF types correctly as callee.
1991 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { 1905 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) {
1992 EXPECT_TRUE(SetupChannel()); 1906 EXPECT_TRUE(SetupChannel());
1993 cricket::AudioSendParameters parameters; 1907 cricket::AudioSendParameters parameters;
1994 parameters.codecs.push_back(kIsacCodec); 1908 parameters.codecs.push_back(kIsacCodec);
1995 parameters.codecs.push_back(kPcmuCodec); 1909 parameters.codecs.push_back(kPcmuCodec);
1996 // TODO(juberti): cn 32000 1910 // TODO(juberti): cn 32000
1997 parameters.codecs.push_back(kCn16000Codec); 1911 parameters.codecs.push_back(kCn16000Codec);
1998 parameters.codecs.push_back(kCn8000Codec); 1912 parameters.codecs.push_back(kCn8000Codec);
1999 parameters.codecs.push_back(kTelephoneEventCodec); 1913 parameters.codecs.push_back(kTelephoneEventCodec);
2000 parameters.codecs[0].id = 96; 1914 parameters.codecs[0].id = 96;
2001 parameters.codecs[2].id = 97; // wideband CN 1915 parameters.codecs[2].id = 97; // wideband CN
2002 parameters.codecs[4].id = 98; // DTMF 1916 parameters.codecs[4].id = 98; // DTMF
2003 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1917 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2004 EXPECT_TRUE(channel_->AddSendStream( 1918 EXPECT_TRUE(channel_->AddSendStream(
2005 cricket::StreamParams::CreateLegacy(kSsrc1))); 1919 cricket::StreamParams::CreateLegacy(kSsrc1)));
2006 int channel_num = voe_.GetLastChannel();
2007 1920
2008 webrtc::CodecInst gcodec; 1921 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2009 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1922 auto send_codec_spec =
2010 EXPECT_EQ(96, gcodec.pltype); 1923 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2011 EXPECT_STREQ("ISAC", gcodec.plname); 1924 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2012 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1925 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2013 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1926 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2014 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1927 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1928 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1929 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2015 EXPECT_TRUE(channel_->CanInsertDtmf()); 1930 EXPECT_TRUE(channel_->CanInsertDtmf());
2016 } 1931 }
2017 1932
2018 // Test that we only apply VAD if we have a CN codec that matches the 1933 // Test that we only apply VAD if we have a CN codec that matches the
2019 // send codec clockrate. 1934 // send codec clockrate.
2020 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 1935 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
2021 EXPECT_TRUE(SetupSendStream()); 1936 EXPECT_TRUE(SetupSendStream());
2022 int channel_num = voe_.GetLastChannel();
2023 cricket::AudioSendParameters parameters; 1937 cricket::AudioSendParameters parameters;
2024 // Set ISAC(16K) and CN(16K). VAD should be activated. 1938 // Set ISAC(16K) and CN(16K). VAD should be activated.
2025 parameters.codecs.push_back(kIsacCodec); 1939 parameters.codecs.push_back(kIsacCodec);
2026 parameters.codecs.push_back(kCn16000Codec); 1940 parameters.codecs.push_back(kCn16000Codec);
2027 parameters.codecs[1].id = 97; 1941 parameters.codecs[1].id = 97;
2028 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1942 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2029 webrtc::CodecInst gcodec; 1943 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2030 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1944 auto send_codec_spec =
2031 EXPECT_STREQ("ISAC", gcodec.plname); 1945 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2032 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1946 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2033 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1947 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1948 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1949 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1950 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2034 // Set PCMU(8K) and CN(16K). VAD should not be activated. 1951 // Set PCMU(8K) and CN(16K). VAD should not be activated.
2035 parameters.codecs[0] = kPcmuCodec; 1952 parameters.codecs[0] = kPcmuCodec;
2036 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1953 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2037 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1954 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2038 EXPECT_STREQ("PCMU", gcodec.plname); 1955 send_codec_spec =
2039 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1956 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1957 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
1958 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2040 // Set PCMU(8K) and CN(8K). VAD should be activated. 1959 // Set PCMU(8K) and CN(8K). VAD should be activated.
2041 parameters.codecs[1] = kCn8000Codec; 1960 parameters.codecs[1] = kCn8000Codec;
2042 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1961 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2043 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1962 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2044 EXPECT_STREQ("PCMU", gcodec.plname); 1963 send_codec_spec =
2045 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1964 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2046 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1965 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
1966 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1967 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1968 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
1969 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
2047 // Set ISAC(16K) and CN(8K). VAD should not be activated. 1970 // Set ISAC(16K) and CN(8K). VAD should not be activated.
2048 parameters.codecs[0] = kIsacCodec; 1971 parameters.codecs[0] = kIsacCodec;
2049 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1972 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2050 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1973 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2051 EXPECT_STREQ("ISAC", gcodec.plname); 1974 send_codec_spec =
2052 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1975 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1976 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1977 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2053 } 1978 }
2054 1979
2055 // Test that we perform case-insensitive matching of codec names. 1980 // Test that we perform case-insensitive matching of codec names.
2056 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 1981 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
2057 EXPECT_TRUE(SetupSendStream()); 1982 EXPECT_TRUE(SetupSendStream());
2058 int channel_num = voe_.GetLastChannel();
2059 cricket::AudioSendParameters parameters; 1983 cricket::AudioSendParameters parameters;
2060 parameters.codecs.push_back(kIsacCodec); 1984 parameters.codecs.push_back(kIsacCodec);
2061 parameters.codecs.push_back(kPcmuCodec); 1985 parameters.codecs.push_back(kPcmuCodec);
2062 parameters.codecs.push_back(kCn16000Codec); 1986 parameters.codecs.push_back(kCn16000Codec);
2063 parameters.codecs.push_back(kCn8000Codec); 1987 parameters.codecs.push_back(kCn8000Codec);
2064 parameters.codecs.push_back(kTelephoneEventCodec); 1988 parameters.codecs.push_back(kTelephoneEventCodec);
2065 parameters.codecs[0].name = "iSaC"; 1989 parameters.codecs[0].name = "iSaC";
2066 parameters.codecs[0].id = 96; 1990 parameters.codecs[0].id = 96;
2067 parameters.codecs[2].id = 97; // wideband CN 1991 parameters.codecs[2].id = 97; // wideband CN
2068 parameters.codecs[4].id = 98; // DTMF 1992 parameters.codecs[4].id = 98; // DTMF
2069 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1993 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2070 webrtc::CodecInst gcodec; 1994 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2071 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1995 auto send_codec_spec =
2072 EXPECT_EQ(96, gcodec.pltype); 1996 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2073 EXPECT_STREQ("ISAC", gcodec.plname); 1997 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2074 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1998 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2075 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1999 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2076 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 2000 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2001 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2002 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2077 EXPECT_TRUE(channel_->CanInsertDtmf()); 2003 EXPECT_TRUE(channel_->CanInsertDtmf());
2078 } 2004 }
2079 2005
2080 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { 2006 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake {
2081 public: 2007 public:
2082 WebRtcVoiceEngineWithSendSideBweTest() 2008 WebRtcVoiceEngineWithSendSideBweTest()
2083 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} 2009 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {}
2084 }; 2010 };
2085 2011
2086 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, 2012 TEST_F(WebRtcVoiceEngineWithSendSideBweTest,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2219 } 2145 }
2220 2146
2221 cricket::AudioSendParameters parameters; 2147 cricket::AudioSendParameters parameters;
2222 // Set ISAC(16K) and CN(16K). VAD should be activated. 2148 // Set ISAC(16K) and CN(16K). VAD should be activated.
2223 parameters.codecs.push_back(kIsacCodec); 2149 parameters.codecs.push_back(kIsacCodec);
2224 parameters.codecs.push_back(kCn16000Codec); 2150 parameters.codecs.push_back(kCn16000Codec);
2225 parameters.codecs[1].id = 97; 2151 parameters.codecs[1].id = 97;
2226 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2152 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2227 2153
2228 // Verify ISAC and VAD are corrected configured on all send channels. 2154 // Verify ISAC and VAD are corrected configured on all send channels.
2229 webrtc::CodecInst gcodec;
2230 for (uint32_t ssrc : kSsrcs4) { 2155 for (uint32_t ssrc : kSsrcs4) {
2231 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2156 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2232 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2157 auto send_codec_spec =
2233 EXPECT_STREQ("ISAC", gcodec.plname); 2158 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2234 EXPECT_TRUE(voe_.GetVAD(channel_num)); 2159 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2235 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 2160 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2161 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2162 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2163 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2236 } 2164 }
2237 2165
2238 // Change to PCMU(8K) and CN(16K). VAD should not be activated. 2166 // Change to PCMU(8K) and CN(16K).
2239 parameters.codecs[0] = kPcmuCodec; 2167 parameters.codecs[0] = kPcmuCodec;
2240 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2168 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2241 for (uint32_t ssrc : kSsrcs4) { 2169 for (uint32_t ssrc : kSsrcs4) {
2242 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2170 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2243 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2171 auto send_codec_spec =
2244 EXPECT_STREQ("PCMU", gcodec.plname); 2172 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2245 EXPECT_FALSE(voe_.GetVAD(channel_num)); 2173 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
2174 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2175 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2176 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2246 } 2177 }
2247 } 2178 }
2248 2179
2249 // Test we can SetSend on all send streams correctly. 2180 // Test we can SetSend on all send streams correctly.
2250 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { 2181 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) {
2251 SetupForMultiSendStream(); 2182 SetupForMultiSendStream();
2252 2183
2253 // Create the send channels and they should be a "not sending" date. 2184 // Create the send channels and they should be a "not sending" date.
2254 for (uint32_t ssrc : kSsrcs4) { 2185 for (uint32_t ssrc : kSsrcs4) {
2255 EXPECT_TRUE(channel_->AddSendStream( 2186 EXPECT_TRUE(channel_->AddSendStream(
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after
3508 cricket::WebRtcVoiceEngine engine( 3439 cricket::WebRtcVoiceEngine engine(
3509 nullptr, webrtc::CreateBuiltinAudioDecoderFactory()); 3440 nullptr, webrtc::CreateBuiltinAudioDecoderFactory());
3510 std::unique_ptr<webrtc::Call> call( 3441 std::unique_ptr<webrtc::Call> call(
3511 webrtc::Call::Create(webrtc::Call::Config())); 3442 webrtc::Call::Create(webrtc::Call::Config()));
3512 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), 3443 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
3513 cricket::AudioOptions(), call.get()); 3444 cricket::AudioOptions(), call.get());
3514 cricket::AudioRecvParameters parameters; 3445 cricket::AudioRecvParameters parameters;
3515 parameters.codecs = engine.recv_codecs(); 3446 parameters.codecs = engine.recv_codecs();
3516 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3447 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3517 } 3448 }
OLDNEW
« webrtc/audio/audio_send_stream_unittest.cc ('K') | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698