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

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

Issue 2405183002: Moving WebRtcVoiceMediaChannel::SendSetCodec to AudioSendStream. (Closed)
Patch Set: fixing unittests 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;
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);
1090 // It does not make sense to check this. So removed.
1091 // EXPECT_EQ(105, send_codec_spec.cng_payload_type);
1068 EXPECT_FALSE(channel_->CanInsertDtmf()); 1092 EXPECT_FALSE(channel_->CanInsertDtmf());
1069 } 1093 }
1070 1094
1071 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried 1095 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried
1072 // to apply. 1096 // to apply.
1073 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { 1097 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) {
1074 EXPECT_TRUE(SetupSendStream()); 1098 EXPECT_TRUE(SetupSendStream());
1075 cricket::AudioSendParameters parameters; 1099 cricket::AudioSendParameters parameters;
1076 parameters.codecs.push_back(kIsacCodec); 1100 parameters.codecs.push_back(kIsacCodec);
1077 parameters.codecs.push_back(kPcmuCodec); 1101 parameters.codecs.push_back(kPcmuCodec);
1078 parameters.codecs.push_back(kCn8000Codec); 1102 parameters.codecs.push_back(kCn8000Codec);
1079 parameters.codecs[0].id = 96; 1103 parameters.codecs[0].id = 96;
1080 parameters.codecs[0].bitrate = 48000; 1104 parameters.codecs[0].bitrate = 48000;
1105 const int initial_num = call_.GetNumCreatedSendStreams();
1081 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1106 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1082 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 1107 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1083 // Calling SetSendCodec again with same codec which is already set. 1108 // Calling SetSendCodec again with same codec which is already set.
1084 // In this case media channel shouldn't send codec to VoE. 1109 // In this case media channel shouldn't send codec to VoE.
1085 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1110 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1086 EXPECT_EQ(1, voe_.GetNumSetSendCodecs()); 1111 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams());
1087 } 1112 }
1088 1113
1089 // Verify that G722 is set with 16000 samples per second to WebRTC. 1114 // Verify that G722 is set with 16000 samples per second to WebRTC.
1090 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { 1115 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) {
1091 EXPECT_TRUE(SetupSendStream()); 1116 EXPECT_TRUE(SetupSendStream());
1092 int channel_num = voe_.GetLastChannel();
1093 cricket::AudioSendParameters parameters; 1117 cricket::AudioSendParameters parameters;
1094 parameters.codecs.push_back(kG722CodecSdp); 1118 parameters.codecs.push_back(kG722CodecSdp);
1095 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1119 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1096 webrtc::CodecInst gcodec; 1120 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1097 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1121 webrtc::CodecInst gcodec =
1122 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1098 EXPECT_STREQ("G722", gcodec.plname); 1123 EXPECT_STREQ("G722", gcodec.plname);
1099 EXPECT_EQ(1, gcodec.channels); 1124 EXPECT_EQ(1, gcodec.channels);
1100 EXPECT_EQ(16000, gcodec.plfreq); 1125 EXPECT_EQ(16000, gcodec.plfreq);
1101 } 1126 }
1102 1127
1103 // Test that if clockrate is not 48000 for opus, we fail. 1128 // Test that if clockrate is not 48000 for opus, we fail.
1104 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { 1129 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) {
1105 EXPECT_TRUE(SetupSendStream()); 1130 EXPECT_TRUE(SetupSendStream());
1106 cricket::AudioSendParameters parameters; 1131 cricket::AudioSendParameters parameters;
1107 parameters.codecs.push_back(kOpusCodec); 1132 parameters.codecs.push_back(kOpusCodec);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 parameters.codecs[0].bitrate = 0; 1185 parameters.codecs[0].bitrate = 0;
1161 parameters.codecs[0].channels = 1; 1186 parameters.codecs[0].channels = 1;
1162 parameters.codecs[0].params["stereo"] = "1"; 1187 parameters.codecs[0].params["stereo"] = "1";
1163 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1188 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1164 } 1189 }
1165 1190
1166 // Test that with bitrate=0 and no stereo, 1191 // Test that with bitrate=0 and no stereo,
1167 // channels and bitrate are 1 and 32000. 1192 // channels and bitrate are 1 and 32000.
1168 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { 1193 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) {
1169 EXPECT_TRUE(SetupSendStream()); 1194 EXPECT_TRUE(SetupSendStream());
1170 int channel_num = voe_.GetLastChannel();
1171 cricket::AudioSendParameters parameters; 1195 cricket::AudioSendParameters parameters;
1172 parameters.codecs.push_back(kOpusCodec); 1196 parameters.codecs.push_back(kOpusCodec);
1173 parameters.codecs[0].bitrate = 0; 1197 parameters.codecs[0].bitrate = 0;
1174 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1198 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1175 webrtc::CodecInst gcodec; 1199 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 } 1200 }
1181 1201
1182 // Test that with bitrate=0 and stereo=0, 1202 // Test that with bitrate=0 and stereo=0,
1183 // channels and bitrate are 1 and 32000. 1203 // channels and bitrate are 1 and 32000.
1184 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { 1204 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) {
1185 EXPECT_TRUE(SetupSendStream()); 1205 EXPECT_TRUE(SetupSendStream());
1186 int channel_num = voe_.GetLastChannel();
1187 cricket::AudioSendParameters parameters; 1206 cricket::AudioSendParameters parameters;
1188 parameters.codecs.push_back(kOpusCodec); 1207 parameters.codecs.push_back(kOpusCodec);
1189 parameters.codecs[0].bitrate = 0; 1208 parameters.codecs[0].bitrate = 0;
1190 parameters.codecs[0].params["stereo"] = "0"; 1209 parameters.codecs[0].params["stereo"] = "0";
1191 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1210 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1192 webrtc::CodecInst gcodec; 1211 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 } 1212 }
1198 1213
1199 // Test that with bitrate=invalid and stereo=0, 1214 // Test that with bitrate=invalid and stereo=0,
1200 // channels and bitrate are 1 and 32000. 1215 // channels and bitrate are 1 and 32000.
1201 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { 1216 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) {
1202 EXPECT_TRUE(SetupSendStream()); 1217 EXPECT_TRUE(SetupSendStream());
1203 int channel_num = voe_.GetLastChannel();
1204 cricket::AudioSendParameters parameters; 1218 cricket::AudioSendParameters parameters;
1205 parameters.codecs.push_back(kOpusCodec); 1219 parameters.codecs.push_back(kOpusCodec);
1206 parameters.codecs[0].params["stereo"] = "0"; 1220 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. 1221 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1210 parameters.codecs[0].bitrate = 5999; 1222 parameters.codecs[0].bitrate = 5999;
1211 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1223 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1212 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1224 CheckSendCodec(kSsrc1, "opus", 1, 6000);
1213 EXPECT_STREQ("opus", gcodec.plname);
1214 EXPECT_EQ(1, gcodec.channels);
1215 EXPECT_EQ(6000, gcodec.rate);
1216 1225
1217 parameters.codecs[0].bitrate = 510001; 1226 parameters.codecs[0].bitrate = 510001;
1218 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1227 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1219 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1228 CheckSendCodec(kSsrc1, "opus", 1, 510000);
1220 EXPECT_STREQ("opus", gcodec.plname);
1221 EXPECT_EQ(1, gcodec.channels);
1222 EXPECT_EQ(510000, gcodec.rate);
1223 } 1229 }
1224 1230
1225 // Test that with bitrate=0 and stereo=1, 1231 // Test that with bitrate=0 and stereo=1,
1226 // channels and bitrate are 2 and 64000. 1232 // channels and bitrate are 2 and 64000.
1227 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { 1233 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) {
1228 EXPECT_TRUE(SetupSendStream()); 1234 EXPECT_TRUE(SetupSendStream());
1229 int channel_num = voe_.GetLastChannel();
1230 cricket::AudioSendParameters parameters; 1235 cricket::AudioSendParameters parameters;
1231 parameters.codecs.push_back(kOpusCodec); 1236 parameters.codecs.push_back(kOpusCodec);
1232 parameters.codecs[0].bitrate = 0; 1237 parameters.codecs[0].bitrate = 0;
1233 parameters.codecs[0].params["stereo"] = "1"; 1238 parameters.codecs[0].params["stereo"] = "1";
1234 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1239 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1235 webrtc::CodecInst gcodec; 1240 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 } 1241 }
1241 1242
1242 // Test that with bitrate=invalid and stereo=1, 1243 // Test that with bitrate=invalid and stereo=1,
1243 // channels and bitrate are 2 and 64000. 1244 // channels and bitrate are 2 and 64000.
1244 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { 1245 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) {
1245 EXPECT_TRUE(SetupSendStream()); 1246 EXPECT_TRUE(SetupSendStream());
1246 int channel_num = voe_.GetLastChannel();
1247 cricket::AudioSendParameters parameters; 1247 cricket::AudioSendParameters parameters;
1248 parameters.codecs.push_back(kOpusCodec); 1248 parameters.codecs.push_back(kOpusCodec);
1249 parameters.codecs[0].params["stereo"] = "1"; 1249 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. 1250 // bitrate that's out of the range between 6000 and 510000 will be clamped.
1253 parameters.codecs[0].bitrate = 5999; 1251 parameters.codecs[0].bitrate = 5999;
1254 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1252 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1255 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1253 CheckSendCodec(kSsrc1, "opus", 2, 6000);
1256 EXPECT_STREQ("opus", gcodec.plname);
1257 EXPECT_EQ(2, gcodec.channels);
1258 EXPECT_EQ(6000, gcodec.rate);
1259 1254
1260 parameters.codecs[0].bitrate = 510001; 1255 parameters.codecs[0].bitrate = 510001;
1261 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1256 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1262 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1257 CheckSendCodec(kSsrc1, "opus", 2, 510000);
1263 EXPECT_STREQ("opus", gcodec.plname);
1264 EXPECT_EQ(2, gcodec.channels);
1265 EXPECT_EQ(510000, gcodec.rate);
1266 } 1258 }
1267 1259
1268 // Test that with bitrate=N and stereo unset, 1260 // Test that with bitrate=N and stereo unset,
1269 // channels and bitrate are 1 and N. 1261 // channels and bitrate are 1 and N.
1270 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { 1262 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) {
1271 EXPECT_TRUE(SetupSendStream()); 1263 EXPECT_TRUE(SetupSendStream());
1272 int channel_num = voe_.GetLastChannel();
1273 cricket::AudioSendParameters parameters; 1264 cricket::AudioSendParameters parameters;
1274 parameters.codecs.push_back(kOpusCodec); 1265 parameters.codecs.push_back(kOpusCodec);
1275 parameters.codecs[0].bitrate = 96000; 1266 parameters.codecs[0].bitrate = 96000;
1276 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1267 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1277 webrtc::CodecInst gcodec; 1268 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1278 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1269 webrtc::CodecInst gcodec =
1270 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1279 EXPECT_EQ(111, gcodec.pltype); 1271 EXPECT_EQ(111, gcodec.pltype);
1280 EXPECT_EQ(96000, gcodec.rate); 1272 EXPECT_EQ(96000, gcodec.rate);
1281 EXPECT_STREQ("opus", gcodec.plname); 1273 EXPECT_STREQ("opus", gcodec.plname);
1282 EXPECT_EQ(1, gcodec.channels); 1274 EXPECT_EQ(1, gcodec.channels);
1283 EXPECT_EQ(48000, gcodec.plfreq); 1275 EXPECT_EQ(48000, gcodec.plfreq);
1284 } 1276 }
1285 1277
1286 // Test that with bitrate=N and stereo=0, 1278 // Test that with bitrate=N and stereo=0,
1287 // channels and bitrate are 1 and N. 1279 // channels and bitrate are 1 and N.
1288 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { 1280 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) {
1289 EXPECT_TRUE(SetupSendStream()); 1281 EXPECT_TRUE(SetupSendStream());
1290 int channel_num = voe_.GetLastChannel();
1291 cricket::AudioSendParameters parameters; 1282 cricket::AudioSendParameters parameters;
1292 parameters.codecs.push_back(kOpusCodec); 1283 parameters.codecs.push_back(kOpusCodec);
1293 parameters.codecs[0].bitrate = 30000; 1284 parameters.codecs[0].bitrate = 30000;
1294 parameters.codecs[0].params["stereo"] = "0"; 1285 parameters.codecs[0].params["stereo"] = "0";
1295 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1286 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1296 webrtc::CodecInst gcodec; 1287 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 } 1288 }
1302 1289
1303 // Test that with bitrate=N and without any parameters, 1290 // Test that with bitrate=N and without any parameters,
1304 // channels and bitrate are 1 and N. 1291 // channels and bitrate are 1 and N.
1305 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { 1292 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) {
1306 EXPECT_TRUE(SetupSendStream()); 1293 EXPECT_TRUE(SetupSendStream());
1307 int channel_num = voe_.GetLastChannel();
1308 cricket::AudioSendParameters parameters; 1294 cricket::AudioSendParameters parameters;
1309 parameters.codecs.push_back(kOpusCodec); 1295 parameters.codecs.push_back(kOpusCodec);
1310 parameters.codecs[0].bitrate = 30000; 1296 parameters.codecs[0].bitrate = 30000;
1311 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1297 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1312 webrtc::CodecInst gcodec; 1298 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 } 1299 }
1318 1300
1319 // Test that with bitrate=N and stereo=1, 1301 // Test that with bitrate=N and stereo=1,
1320 // channels and bitrate are 2 and N. 1302 // channels and bitrate are 2 and N.
1321 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { 1303 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) {
1322 EXPECT_TRUE(SetupSendStream()); 1304 EXPECT_TRUE(SetupSendStream());
1323 int channel_num = voe_.GetLastChannel();
1324 cricket::AudioSendParameters parameters; 1305 cricket::AudioSendParameters parameters;
1325 parameters.codecs.push_back(kOpusCodec); 1306 parameters.codecs.push_back(kOpusCodec);
1326 parameters.codecs[0].bitrate = 30000; 1307 parameters.codecs[0].bitrate = 30000;
1327 parameters.codecs[0].params["stereo"] = "1"; 1308 parameters.codecs[0].params["stereo"] = "1";
1328 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1309 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1329 webrtc::CodecInst gcodec; 1310 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 } 1311 }
1335 1312
1336 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. 1313 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
1337 // Also test that the "maxaveragebitrate" can't be set to values outside the 1314 // Also test that the "maxaveragebitrate" can't be set to values outside the
1338 // range of 6000 and 510000 1315 // range of 6000 and 510000
1339 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { 1316 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) {
1340 EXPECT_TRUE(SetupSendStream()); 1317 EXPECT_TRUE(SetupSendStream());
1341 int channel_num = voe_.GetLastChannel();
1342 cricket::AudioSendParameters parameters; 1318 cricket::AudioSendParameters parameters;
1343 parameters.codecs.push_back(kOpusCodec); 1319 parameters.codecs.push_back(kOpusCodec);
1344 parameters.codecs[0].bitrate = 30000; 1320 parameters.codecs[0].bitrate = 30000;
1345 webrtc::CodecInst gcodec;
1346
1347 // Ignore if less than 6000. 1321 // Ignore if less than 6000.
1348 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; 1322 parameters.codecs[0].params["maxaveragebitrate"] = "5999";
1349 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1323 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1350 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1324 CheckCodecBitrate(kSsrc1, 6000);
1351 EXPECT_EQ(6000, gcodec.rate);
1352 1325
1353 // Ignore if larger than 510000. 1326 // Ignore if larger than 510000.
1354 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; 1327 parameters.codecs[0].params["maxaveragebitrate"] = "510001";
1355 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1328 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1356 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1329 CheckCodecBitrate(kSsrc1, 510000);
1357 EXPECT_EQ(510000, gcodec.rate);
1358 1330
1359 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; 1331 parameters.codecs[0].params["maxaveragebitrate"] = "200000";
1360 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1332 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1361 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1333 CheckCodecBitrate(kSsrc1, 200000);
1362 EXPECT_EQ(200000, gcodec.rate);
1363 } 1334 }
1364 1335
1365 // Test that we can enable NACK with opus as caller. 1336 // Test that we can enable NACK with opus as caller.
1366 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) { 1337 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecEnableNackAsCaller) {
1367 EXPECT_TRUE(SetupSendStream()); 1338 EXPECT_TRUE(SetupSendStream());
1368 cricket::AudioSendParameters parameters; 1339 cricket::AudioSendParameters parameters;
1369 parameters.codecs.push_back(kOpusCodec); 1340 parameters.codecs.push_back(kOpusCodec);
1370 parameters.codecs[0].AddFeedbackParam( 1341 parameters.codecs[0].AddFeedbackParam(
1371 cricket::FeedbackParam(cricket::kRtcpFbParamNack, 1342 cricket::FeedbackParam(cricket::kRtcpFbParamNack,
1372 cricket::kParamValueEmpty)); 1343 cricket::kParamValueEmpty));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 1431
1461 EXPECT_TRUE(AddRecvStream(kSsrc2)); 1432 EXPECT_TRUE(AddRecvStream(kSsrc2));
1462 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); 1433 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms);
1463 EXPECT_TRUE(AddRecvStream(kSsrc3)); 1434 EXPECT_TRUE(AddRecvStream(kSsrc3));
1464 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); 1435 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms);
1465 } 1436 }
1466 1437
1467 // Test that without useinbandfec, Opus FEC is off. 1438 // Test that without useinbandfec, Opus FEC is off.
1468 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { 1439 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) {
1469 EXPECT_TRUE(SetupSendStream()); 1440 EXPECT_TRUE(SetupSendStream());
1470 int channel_num = voe_.GetLastChannel();
1471 cricket::AudioSendParameters parameters; 1441 cricket::AudioSendParameters parameters;
1472 parameters.codecs.push_back(kOpusCodec); 1442 parameters.codecs.push_back(kOpusCodec);
1473 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1443 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1474 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1444 CheckCodecFec(kSsrc1, false);
1475 } 1445 }
1476 1446
1477 // Test that with useinbandfec=0, Opus FEC is off. 1447 // Test that with useinbandfec=0, Opus FEC is off.
1478 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { 1448 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) {
1479 EXPECT_TRUE(SetupSendStream()); 1449 EXPECT_TRUE(SetupSendStream());
1480 int channel_num = voe_.GetLastChannel();
1481 cricket::AudioSendParameters parameters; 1450 cricket::AudioSendParameters parameters;
1482 parameters.codecs.push_back(kOpusCodec); 1451 parameters.codecs.push_back(kOpusCodec);
1483 parameters.codecs[0].bitrate = 0; 1452 parameters.codecs[0].bitrate = 0;
1484 parameters.codecs[0].params["useinbandfec"] = "0"; 1453 parameters.codecs[0].params["useinbandfec"] = "0";
1485 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1454 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1486 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1455 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 } 1456 }
1493 1457
1494 // Test that with useinbandfec=1, Opus FEC is on. 1458 // Test that with useinbandfec=1, Opus FEC is on.
1495 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { 1459 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) {
1496 EXPECT_TRUE(SetupSendStream()); 1460 EXPECT_TRUE(SetupSendStream());
1497 int channel_num = voe_.GetLastChannel();
1498 cricket::AudioSendParameters parameters; 1461 cricket::AudioSendParameters parameters;
1499 parameters.codecs.push_back(kOpusCodec); 1462 parameters.codecs.push_back(kOpusCodec);
1500 parameters.codecs[0].bitrate = 0; 1463 parameters.codecs[0].bitrate = 0;
1501 parameters.codecs[0].params["useinbandfec"] = "1"; 1464 parameters.codecs[0].params["useinbandfec"] = "1";
1502 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1465 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1503 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1466 CheckCodecFec(kSsrc1, true);
1504 webrtc::CodecInst gcodec; 1467 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 } 1468 }
1510 1469
1511 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. 1470 // Test that with useinbandfec=1, stereo=1, Opus FEC is on.
1512 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { 1471 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) {
1513 EXPECT_TRUE(SetupSendStream()); 1472 EXPECT_TRUE(SetupSendStream());
1514 int channel_num = voe_.GetLastChannel();
1515 cricket::AudioSendParameters parameters; 1473 cricket::AudioSendParameters parameters;
1516 parameters.codecs.push_back(kOpusCodec); 1474 parameters.codecs.push_back(kOpusCodec);
1517 parameters.codecs[0].bitrate = 0; 1475 parameters.codecs[0].bitrate = 0;
1518 parameters.codecs[0].params["stereo"] = "1"; 1476 parameters.codecs[0].params["stereo"] = "1";
1519 parameters.codecs[0].params["useinbandfec"] = "1"; 1477 parameters.codecs[0].params["useinbandfec"] = "1";
1520 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1478 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1521 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1479 CheckCodecFec(kSsrc1, true);
1522 webrtc::CodecInst gcodec; 1480 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 } 1481 }
1528 1482
1529 // Test that with non-Opus, codec FEC is off. 1483 // Test that with non-Opus, codec FEC is off.
1530 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { 1484 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) {
1531 EXPECT_TRUE(SetupSendStream()); 1485 EXPECT_TRUE(SetupSendStream());
1532 int channel_num = voe_.GetLastChannel();
1533 cricket::AudioSendParameters parameters; 1486 cricket::AudioSendParameters parameters;
1534 parameters.codecs.push_back(kIsacCodec); 1487 parameters.codecs.push_back(kIsacCodec);
1535 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1488 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1536 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1489 CheckCodecFec(kSsrc1, false);
1537 } 1490 }
1538 1491
1539 // Test the with non-Opus, even if useinbandfec=1, FEC is off. 1492 // Test the with non-Opus, even if useinbandfec=1, FEC is off.
1540 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { 1493 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) {
1541 EXPECT_TRUE(SetupSendStream()); 1494 EXPECT_TRUE(SetupSendStream());
1542 int channel_num = voe_.GetLastChannel();
1543 cricket::AudioSendParameters parameters; 1495 cricket::AudioSendParameters parameters;
1544 parameters.codecs.push_back(kIsacCodec); 1496 parameters.codecs.push_back(kIsacCodec);
1545 parameters.codecs[0].params["useinbandfec"] = "1"; 1497 parameters.codecs[0].params["useinbandfec"] = "1";
1546 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1498 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1547 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1499 CheckCodecFec(kSsrc1, false);
1548 } 1500 }
1549 1501
1550 // Test that Opus FEC status can be changed. 1502 // Test that Opus FEC status can be changed.
1551 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { 1503 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) {
1552 EXPECT_TRUE(SetupSendStream()); 1504 EXPECT_TRUE(SetupSendStream());
1553 int channel_num = voe_.GetLastChannel();
1554 cricket::AudioSendParameters parameters; 1505 cricket::AudioSendParameters parameters;
1555 parameters.codecs.push_back(kOpusCodec); 1506 parameters.codecs.push_back(kOpusCodec);
1556 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1507 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1557 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); 1508 CheckCodecFec(kSsrc1, false);
1509
1558 parameters.codecs[0].params["useinbandfec"] = "1"; 1510 parameters.codecs[0].params["useinbandfec"] = "1";
1559 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1511 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1560 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); 1512 CheckCodecFec(kSsrc1, true);
1561 } 1513 }
1562 1514
1563 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { 1515 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) {
1564 EXPECT_TRUE(SetupChannel()); 1516 EXPECT_TRUE(SetupChannel());
1565 cricket::AudioSendParameters send_parameters; 1517 cricket::AudioSendParameters send_parameters;
1566 send_parameters.codecs.push_back(kOpusCodec); 1518 send_parameters.codecs.push_back(kOpusCodec);
1567 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); 1519 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty());
1568 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); 1520 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
1569 1521
1570 cricket::AudioRecvParameters recv_parameters; 1522 cricket::AudioRecvParameters recv_parameters;
1571 recv_parameters.codecs.push_back(kIsacCodec); 1523 recv_parameters.codecs.push_back(kIsacCodec);
1572 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); 1524 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters));
1573 EXPECT_TRUE(AddRecvStream(kSsrc1)); 1525 EXPECT_TRUE(AddRecvStream(kSsrc1));
1574 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1526 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr);
1575 EXPECT_FALSE( 1527 EXPECT_FALSE(
1576 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1528 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc);
1577 1529
1578 send_parameters.codecs = engine_->send_codecs(); 1530 send_parameters.codecs = engine_->send_codecs();
1579 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); 1531 EXPECT_TRUE(channel_->SetSendParameters(send_parameters));
1580 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); 1532 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr);
1581 EXPECT_TRUE( 1533 EXPECT_TRUE(
1582 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); 1534 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc);
1583 } 1535 }
1584 1536
1585 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. 1537 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
1586 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { 1538 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) {
1587 EXPECT_TRUE(SetupSendStream()); 1539 EXPECT_TRUE(SetupSendStream());
1588 int channel_num = voe_.GetLastChannel();
1589 cricket::AudioSendParameters parameters; 1540 cricket::AudioSendParameters parameters;
1590 parameters.codecs.push_back(kOpusCodec); 1541 parameters.codecs.push_back(kOpusCodec);
1591 parameters.codecs[0].bitrate = 0; 1542 parameters.codecs[0].bitrate = 0;
1592 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1543 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1593 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1544 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1594 EXPECT_EQ(cricket::kOpusBandwidthNb, 1545 CheckOpusMaxPlaybackRate(kSsrc1, 8000);
1595 voe_.GetMaxEncodingBandwidth(channel_num)); 1546 CheckCodecBitrate(kSsrc1, 12000);
1596 webrtc::CodecInst gcodec;
1597 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1598 EXPECT_STREQ("opus", gcodec.plname);
1599 1547
1600 EXPECT_EQ(12000, gcodec.rate);
1601 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1548 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1602 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1549 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1603 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1550 CheckCodecBitrate(kSsrc1, 24000);
1604 EXPECT_EQ(24000, gcodec.rate);
1605 } 1551 }
1606 1552
1607 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. 1553 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
1608 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { 1554 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) {
1609 EXPECT_TRUE(SetupSendStream()); 1555 EXPECT_TRUE(SetupSendStream());
1610 int channel_num = voe_.GetLastChannel();
1611 cricket::AudioSendParameters parameters; 1556 cricket::AudioSendParameters parameters;
1612 parameters.codecs.push_back(kOpusCodec); 1557 parameters.codecs.push_back(kOpusCodec);
1613 parameters.codecs[0].bitrate = 0; 1558 parameters.codecs[0].bitrate = 0;
1614 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); 1559 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001);
1615 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1560 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1616 EXPECT_EQ(cricket::kOpusBandwidthMb, 1561 CheckOpusMaxPlaybackRate(kSsrc1, 8001);
1617 voe_.GetMaxEncodingBandwidth(channel_num)); 1562 CheckCodecBitrate(kSsrc1, 20000);
1618 webrtc::CodecInst gcodec;
1619 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1620 EXPECT_STREQ("opus", gcodec.plname);
1621 1563
1622 EXPECT_EQ(20000, gcodec.rate);
1623 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1564 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1624 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1565 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1625 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1566 CheckCodecBitrate(kSsrc1, 40000);
1626 EXPECT_EQ(40000, gcodec.rate);
1627 } 1567 }
1628 1568
1629 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. 1569 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
1630 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { 1570 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) {
1631 EXPECT_TRUE(SetupSendStream()); 1571 EXPECT_TRUE(SetupSendStream());
1632 int channel_num = voe_.GetLastChannel();
1633 cricket::AudioSendParameters parameters; 1572 cricket::AudioSendParameters parameters;
1634 parameters.codecs.push_back(kOpusCodec); 1573 parameters.codecs.push_back(kOpusCodec);
1635 parameters.codecs[0].bitrate = 0; 1574 parameters.codecs[0].bitrate = 0;
1636 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); 1575 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001);
1637 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1576 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1638 EXPECT_EQ(cricket::kOpusBandwidthWb, 1577 CheckOpusMaxPlaybackRate(kSsrc1, 12001);
1639 voe_.GetMaxEncodingBandwidth(channel_num)); 1578 CheckCodecBitrate(kSsrc1, 20000);
1640 webrtc::CodecInst gcodec;
1641 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1642 EXPECT_STREQ("opus", gcodec.plname);
1643 1579
1644 EXPECT_EQ(20000, gcodec.rate);
1645 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1580 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1646 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1581 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1647 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1582 CheckCodecBitrate(kSsrc1, 40000);
1648 EXPECT_EQ(40000, gcodec.rate);
1649 } 1583 }
1650 1584
1651 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. 1585 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
1652 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { 1586 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) {
1653 EXPECT_TRUE(SetupSendStream()); 1587 EXPECT_TRUE(SetupSendStream());
1654 int channel_num = voe_.GetLastChannel();
1655 cricket::AudioSendParameters parameters; 1588 cricket::AudioSendParameters parameters;
1656 parameters.codecs.push_back(kOpusCodec); 1589 parameters.codecs.push_back(kOpusCodec);
1657 parameters.codecs[0].bitrate = 0; 1590 parameters.codecs[0].bitrate = 0;
1658 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); 1591 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001);
1659 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1592 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1660 EXPECT_EQ(cricket::kOpusBandwidthSwb, 1593 CheckOpusMaxPlaybackRate(kSsrc1, 16001);
1661 voe_.GetMaxEncodingBandwidth(channel_num)); 1594 CheckCodecBitrate(kSsrc1, 32000);
1662 webrtc::CodecInst gcodec;
1663 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1664 EXPECT_STREQ("opus", gcodec.plname);
1665 1595
1666 EXPECT_EQ(32000, gcodec.rate);
1667 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1596 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1668 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1597 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1669 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1598 CheckCodecBitrate(kSsrc1, 64000);
1670 EXPECT_EQ(64000, gcodec.rate);
1671 } 1599 }
1672 1600
1673 // Test 24000 < maxplaybackrate triggers Opus full band mode. 1601 // Test 24000 < maxplaybackrate triggers Opus full band mode.
1674 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { 1602 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) {
1675 EXPECT_TRUE(SetupSendStream()); 1603 EXPECT_TRUE(SetupSendStream());
1676 int channel_num = voe_.GetLastChannel();
1677 cricket::AudioSendParameters parameters; 1604 cricket::AudioSendParameters parameters;
1678 parameters.codecs.push_back(kOpusCodec); 1605 parameters.codecs.push_back(kOpusCodec);
1679 parameters.codecs[0].bitrate = 0; 1606 parameters.codecs[0].bitrate = 0;
1680 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); 1607 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001);
1681 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1608 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1682 EXPECT_EQ(cricket::kOpusBandwidthFb, 1609 CheckOpusMaxPlaybackRate(kSsrc1, 24001);
1683 voe_.GetMaxEncodingBandwidth(channel_num)); 1610 CheckCodecBitrate(kSsrc1, 32000);
1684 webrtc::CodecInst gcodec;
1685 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec));
1686 EXPECT_STREQ("opus", gcodec.plname);
1687 1611
1688 EXPECT_EQ(32000, gcodec.rate);
1689 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); 1612 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1");
1690 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1613 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1691 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1614 CheckCodecBitrate(kSsrc1, 64000);
1692 EXPECT_EQ(64000, gcodec.rate);
1693 } 1615 }
1694 1616
1695 // Test Opus that without maxplaybackrate, default playback rate is used. 1617 // Test Opus that without maxplaybackrate, default playback rate is used.
1696 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { 1618 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) {
1697 EXPECT_TRUE(SetupSendStream()); 1619 EXPECT_TRUE(SetupSendStream());
1698 int channel_num = voe_.GetLastChannel();
1699 cricket::AudioSendParameters parameters; 1620 cricket::AudioSendParameters parameters;
1700 parameters.codecs.push_back(kOpusCodec); 1621 parameters.codecs.push_back(kOpusCodec);
1701 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1622 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1702 EXPECT_EQ(cricket::kOpusBandwidthFb, 1623 CheckOpusMaxPlaybackRate(kSsrc1, 48000);
1703 voe_.GetMaxEncodingBandwidth(channel_num));
1704 } 1624 }
1705 1625
1706 // Test the with non-Opus, maxplaybackrate has no effect. 1626 // Test the with non-Opus, maxplaybackrate has no effect.
1707 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { 1627 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) {
1708 EXPECT_TRUE(SetupSendStream()); 1628 EXPECT_TRUE(SetupSendStream());
1709 int channel_num = voe_.GetLastChannel();
1710 cricket::AudioSendParameters parameters; 1629 cricket::AudioSendParameters parameters;
1711 parameters.codecs.push_back(kIsacCodec); 1630 parameters.codecs.push_back(kIsacCodec);
1712 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); 1631 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000);
1713 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1632 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1714 EXPECT_EQ(0, voe_.GetMaxEncodingBandwidth(channel_num)); 1633 CheckOpusMaxPlaybackRate(kSsrc1, 0);
1715 } 1634 }
1716 1635
1717 // Test maxplaybackrate can be set on two streams. 1636 // Test maxplaybackrate can be set on two streams.
1718 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { 1637 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) {
1719 EXPECT_TRUE(SetupSendStream()); 1638 EXPECT_TRUE(SetupSendStream());
1720 int channel_num = voe_.GetLastChannel();
1721 cricket::AudioSendParameters parameters; 1639 cricket::AudioSendParameters parameters;
1722 parameters.codecs.push_back(kOpusCodec); 1640 parameters.codecs.push_back(kOpusCodec);
1723 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1641 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1724 // Default bandwidth is 24000. 1642 CheckOpusMaxPlaybackRate(kSsrc1, 48000);
1725 EXPECT_EQ(cricket::kOpusBandwidthFb,
1726 voe_.GetMaxEncodingBandwidth(channel_num));
1727 1643
1728 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); 1644 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000);
1729
1730 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1645 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1731 EXPECT_EQ(cricket::kOpusBandwidthNb, 1646 CheckOpusMaxPlaybackRate(kSsrc1, 8000);
1732 voe_.GetMaxEncodingBandwidth(channel_num));
1733 1647
1734 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); 1648 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2));
1735 channel_num = voe_.GetLastChannel(); 1649 CheckOpusMaxPlaybackRate(kSsrc2, 8000);
1736 EXPECT_EQ(cricket::kOpusBandwidthNb,
1737 voe_.GetMaxEncodingBandwidth(channel_num));
1738 } 1650 }
1739 1651
1740 // Test that with usedtx=0, Opus DTX is off. 1652 // Test that with usedtx=0, Opus DTX is off.
1741 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { 1653 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) {
1742 EXPECT_TRUE(SetupSendStream()); 1654 EXPECT_TRUE(SetupSendStream());
1743 int channel_num = voe_.GetLastChannel();
1744 cricket::AudioSendParameters parameters; 1655 cricket::AudioSendParameters parameters;
1745 parameters.codecs.push_back(kOpusCodec); 1656 parameters.codecs.push_back(kOpusCodec);
1746 parameters.codecs[0].params["usedtx"] = "0"; 1657 parameters.codecs[0].params["usedtx"] = "0";
1747 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1658 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1748 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1659 CheckOpusDtx(kSsrc1, false);
1749 } 1660 }
1750 1661
1751 // Test that with usedtx=1, Opus DTX is on. 1662 // Test that with usedtx=1, Opus DTX is on.
1752 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { 1663 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) {
1753 EXPECT_TRUE(SetupSendStream()); 1664 EXPECT_TRUE(SetupSendStream());
1754 int channel_num = voe_.GetLastChannel();
1755 cricket::AudioSendParameters parameters; 1665 cricket::AudioSendParameters parameters;
1756 parameters.codecs.push_back(kOpusCodec); 1666 parameters.codecs.push_back(kOpusCodec);
1757 parameters.codecs[0].params["usedtx"] = "1"; 1667 parameters.codecs[0].params["usedtx"] = "1";
1758 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1668 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1759 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1669 CheckOpusDtx(kSsrc1, true);
1760 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1670 // It does not make sense to check the VAD, since VAD doss not rely on Opus.
1671 // EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD.
1761 } 1672 }
1762 1673
1763 // Test that usedtx=1 works with stereo Opus. 1674 // Test that usedtx=1 works with stereo Opus.
1764 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { 1675 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) {
1765 EXPECT_TRUE(SetupSendStream()); 1676 EXPECT_TRUE(SetupSendStream());
1766 int channel_num = voe_.GetLastChannel();
1767 cricket::AudioSendParameters parameters; 1677 cricket::AudioSendParameters parameters;
1768 parameters.codecs.push_back(kOpusCodec); 1678 parameters.codecs.push_back(kOpusCodec);
1769 parameters.codecs[0].params["usedtx"] = "1"; 1679 parameters.codecs[0].params["usedtx"] = "1";
1770 parameters.codecs[0].params["stereo"] = "1"; 1680 parameters.codecs[0].params["stereo"] = "1";
1771 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1681 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1772 EXPECT_TRUE(voe_.GetOpusDtx(channel_num)); 1682 CheckOpusDtx(kSsrc1, true);
1773 EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect VAD. 1683 // It does not make sense to check the VAD, since VAD doss not rely on Opus.
1684 // EXPECT_FALSE(voe_.GetVAD(channel_num)); // Opus DTX should not affect
1685 // VAD.
1774 } 1686 }
1775 1687
1776 // Test that usedtx=1 does not work with non Opus. 1688 // Test that usedtx=1 does not work with non Opus.
1777 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { 1689 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) {
1778 EXPECT_TRUE(SetupSendStream()); 1690 EXPECT_TRUE(SetupSendStream());
1779 int channel_num = voe_.GetLastChannel();
1780 cricket::AudioSendParameters parameters; 1691 cricket::AudioSendParameters parameters;
1781 parameters.codecs.push_back(kIsacCodec); 1692 parameters.codecs.push_back(kIsacCodec);
1782 parameters.codecs[0].params["usedtx"] = "1"; 1693 parameters.codecs[0].params["usedtx"] = "1";
1783 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1694 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1784 EXPECT_FALSE(voe_.GetOpusDtx(channel_num)); 1695 CheckOpusDtx(kSsrc1, false);
1785 } 1696 }
1786 1697
1787 // Test that we can switch back and forth between Opus and ISAC with CN. 1698 // Test that we can switch back and forth between Opus and ISAC with CN.
1788 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { 1699 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) {
1789 EXPECT_TRUE(SetupSendStream()); 1700 EXPECT_TRUE(SetupSendStream());
1790 int channel_num = voe_.GetLastChannel(); 1701
1791 cricket::AudioSendParameters opus_parameters; 1702 cricket::AudioSendParameters opus_parameters;
1792 opus_parameters.codecs.push_back(kOpusCodec); 1703 opus_parameters.codecs.push_back(kOpusCodec);
1793 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1704 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1794 webrtc::CodecInst gcodec; 1705 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1795 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1706 webrtc::CodecInst gcodec =
1707 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1796 EXPECT_EQ(111, gcodec.pltype); 1708 EXPECT_EQ(111, gcodec.pltype);
1797 EXPECT_STREQ("opus", gcodec.plname); 1709 EXPECT_STREQ("opus", gcodec.plname);
1798 1710
1799 cricket::AudioSendParameters isac_parameters; 1711 cricket::AudioSendParameters isac_parameters;
1800 isac_parameters.codecs.push_back(kIsacCodec); 1712 isac_parameters.codecs.push_back(kIsacCodec);
1801 isac_parameters.codecs.push_back(kCn16000Codec); 1713 isac_parameters.codecs.push_back(kCn16000Codec);
1802 isac_parameters.codecs.push_back(kOpusCodec); 1714 isac_parameters.codecs.push_back(kOpusCodec);
1803 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters)); 1715 EXPECT_TRUE(channel_->SetSendParameters(isac_parameters));
1804 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;
1805 EXPECT_EQ(103, gcodec.pltype); 1719 EXPECT_EQ(103, gcodec.pltype);
1806 EXPECT_STREQ("ISAC", gcodec.plname); 1720 EXPECT_STREQ("ISAC", gcodec.plname);
1807 1721
1808 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters)); 1722 EXPECT_TRUE(channel_->SetSendParameters(opus_parameters));
1809 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1723 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1724 gcodec =
1725 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1810 EXPECT_EQ(111, gcodec.pltype); 1726 EXPECT_EQ(111, gcodec.pltype);
1811 EXPECT_STREQ("opus", gcodec.plname); 1727 EXPECT_STREQ("opus", gcodec.plname);
1812 } 1728 }
1813 1729
1814 // Test that we handle various ways of specifying bitrate. 1730 // Test that we handle various ways of specifying bitrate.
1815 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { 1731 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) {
1816 EXPECT_TRUE(SetupSendStream()); 1732 EXPECT_TRUE(SetupSendStream());
1817 int channel_num = voe_.GetLastChannel();
1818 cricket::AudioSendParameters parameters; 1733 cricket::AudioSendParameters parameters;
1819 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 1734 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000
1820 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1735 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1821 webrtc::CodecInst gcodec; 1736 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1822 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1737 webrtc::CodecInst gcodec =
1738 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1823 EXPECT_EQ(103, gcodec.pltype); 1739 EXPECT_EQ(103, gcodec.pltype);
1824 EXPECT_STREQ("ISAC", gcodec.plname); 1740 EXPECT_STREQ("ISAC", gcodec.plname);
1825 EXPECT_EQ(32000, gcodec.rate); 1741 EXPECT_EQ(32000, gcodec.rate);
1826 1742
1827 parameters.codecs[0].bitrate = 0; // bitrate == default 1743 parameters.codecs[0].bitrate = 0; // bitrate == default
1828 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1744 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1829 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1745 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1746 gcodec =
1747 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1830 EXPECT_EQ(103, gcodec.pltype); 1748 EXPECT_EQ(103, gcodec.pltype);
1831 EXPECT_STREQ("ISAC", gcodec.plname); 1749 EXPECT_STREQ("ISAC", gcodec.plname);
1832 EXPECT_EQ(-1, gcodec.rate); 1750 EXPECT_EQ(-1, gcodec.rate);
1833 1751
1834 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 1752 parameters.codecs[0].bitrate = 28000; // bitrate == 28000
1835 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1753 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1836 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1754 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1755 gcodec =
1756 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1837 EXPECT_EQ(103, gcodec.pltype); 1757 EXPECT_EQ(103, gcodec.pltype);
1838 EXPECT_STREQ("ISAC", gcodec.plname); 1758 EXPECT_STREQ("ISAC", gcodec.plname);
1839 EXPECT_EQ(28000, gcodec.rate); 1759 EXPECT_EQ(28000, gcodec.rate);
1840 1760
1841 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 1761 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000
1842 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1762 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1843 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1763 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1764 gcodec =
1765 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1844 EXPECT_EQ(0, gcodec.pltype); 1766 EXPECT_EQ(0, gcodec.pltype);
1845 EXPECT_STREQ("PCMU", gcodec.plname); 1767 EXPECT_STREQ("PCMU", gcodec.plname);
1846 EXPECT_EQ(64000, gcodec.rate); 1768 EXPECT_EQ(64000, gcodec.rate);
1847 1769
1848 parameters.codecs[0].bitrate = 0; // bitrate == default 1770 parameters.codecs[0].bitrate = 0; // bitrate == default
1849 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1771 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1850 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1772 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1773 gcodec =
1774 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1851 EXPECT_EQ(0, gcodec.pltype); 1775 EXPECT_EQ(0, gcodec.pltype);
1852 EXPECT_STREQ("PCMU", gcodec.plname); 1776 EXPECT_STREQ("PCMU", gcodec.plname);
1853 EXPECT_EQ(64000, gcodec.rate); 1777 EXPECT_EQ(64000, gcodec.rate);
1854 1778
1855 parameters.codecs[0] = kOpusCodec; 1779 parameters.codecs[0] = kOpusCodec;
1856 parameters.codecs[0].bitrate = 0; // bitrate == default 1780 parameters.codecs[0].bitrate = 0; // bitrate == default
1857 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1781 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1858 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1782 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1783 gcodec =
1784 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1859 EXPECT_EQ(111, gcodec.pltype); 1785 EXPECT_EQ(111, gcodec.pltype);
1860 EXPECT_STREQ("opus", gcodec.plname); 1786 EXPECT_STREQ("opus", gcodec.plname);
1861 EXPECT_EQ(32000, gcodec.rate); 1787 EXPECT_EQ(32000, gcodec.rate);
1862 } 1788 }
1863 1789
1864 // Test that we could set packet size specified in kCodecParamPTime. 1790 // Test that we could set packet size specified in kCodecParamPTime.
1865 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { 1791 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) {
1866 EXPECT_TRUE(SetupSendStream()); 1792 EXPECT_TRUE(SetupSendStream());
1867 int channel_num = voe_.GetLastChannel();
1868 cricket::AudioSendParameters parameters; 1793 cricket::AudioSendParameters parameters;
1869 parameters.codecs.push_back(kOpusCodec); 1794 parameters.codecs.push_back(kOpusCodec);
1870 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1795 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1871 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1796 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1872 webrtc::CodecInst gcodec; 1797 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 1798
1876 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. 1799 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range.
1877 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1800 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1878 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1801 CheckCodecPacSize(kSsrc1, 480); // Opus gets 10ms.
1879 EXPECT_EQ(480, gcodec.pacsize); // Opus gets 10ms.
1880 1802
1881 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. 1803 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range.
1882 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1804 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1883 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1805 CheckCodecPacSize(kSsrc1, 2880); // Opus gets 60ms.
1884 EXPECT_EQ(2880, gcodec.pacsize); // Opus gets 60ms.
1885 1806
1886 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. 1807 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size.
1887 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. 1808 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range.
1888 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1809 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1889 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1810 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 1811
1892 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. 1812 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP.
1893 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); 1813 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40);
1894 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1814 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1895 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1815 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 } 1816 }
1898 1817
1899 // Test that we fail if no codecs are specified. 1818 // Test that we fail if no codecs are specified.
1900 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { 1819 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) {
1901 EXPECT_TRUE(SetupSendStream()); 1820 EXPECT_TRUE(SetupSendStream());
1902 cricket::AudioSendParameters parameters; 1821 cricket::AudioSendParameters parameters;
1903 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1822 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1904 } 1823 }
1905 1824
1906 // Test that we can set send codecs even with telephone-event codec as the first 1825 // Test that we can set send codecs even with telephone-event codec as the first
1907 // one on the list. 1826 // one on the list.
1908 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { 1827 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) {
1909 EXPECT_TRUE(SetupSendStream()); 1828 EXPECT_TRUE(SetupSendStream());
1910 int channel_num = voe_.GetLastChannel();
1911 cricket::AudioSendParameters parameters; 1829 cricket::AudioSendParameters parameters;
1912 parameters.codecs.push_back(kTelephoneEventCodec); 1830 parameters.codecs.push_back(kTelephoneEventCodec);
1913 parameters.codecs.push_back(kIsacCodec); 1831 parameters.codecs.push_back(kIsacCodec);
1914 parameters.codecs.push_back(kPcmuCodec); 1832 parameters.codecs.push_back(kPcmuCodec);
1915 parameters.codecs[0].id = 98; // DTMF 1833 parameters.codecs[0].id = 98; // DTMF
1916 parameters.codecs[1].id = 96; 1834 parameters.codecs[1].id = 96;
1917 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1835 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1918 webrtc::CodecInst gcodec; 1836 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1919 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1837 webrtc::CodecInst gcodec =
1838 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec.codec_inst;
1920 EXPECT_EQ(96, gcodec.pltype); 1839 EXPECT_EQ(96, gcodec.pltype);
1921 EXPECT_STREQ("ISAC", gcodec.plname); 1840 EXPECT_STREQ("ISAC", gcodec.plname);
1922 EXPECT_TRUE(channel_->CanInsertDtmf()); 1841 EXPECT_TRUE(channel_->CanInsertDtmf());
1923 } 1842 }
1924 1843
1925 // Test that payload type range is limited for telephone-event codec. 1844 // Test that payload type range is limited for telephone-event codec.
1926 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { 1845 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) {
1927 EXPECT_TRUE(SetupSendStream()); 1846 EXPECT_TRUE(SetupSendStream());
1928 cricket::AudioSendParameters parameters; 1847 cricket::AudioSendParameters parameters;
1929 parameters.codecs.push_back(kTelephoneEventCodec); 1848 parameters.codecs.push_back(kTelephoneEventCodec);
(...skipping 10 matching lines...) Expand all
1940 EXPECT_TRUE(channel_->CanInsertDtmf()); 1859 EXPECT_TRUE(channel_->CanInsertDtmf());
1941 parameters.codecs[0].id = -1; // DTMF 1860 parameters.codecs[0].id = -1; // DTMF
1942 EXPECT_FALSE(channel_->SetSendParameters(parameters)); 1861 EXPECT_FALSE(channel_->SetSendParameters(parameters));
1943 EXPECT_FALSE(channel_->CanInsertDtmf()); 1862 EXPECT_FALSE(channel_->CanInsertDtmf());
1944 } 1863 }
1945 1864
1946 // Test that we can set send codecs even with CN codec as the first 1865 // Test that we can set send codecs even with CN codec as the first
1947 // one on the list. 1866 // one on the list.
1948 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { 1867 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) {
1949 EXPECT_TRUE(SetupSendStream()); 1868 EXPECT_TRUE(SetupSendStream());
1950 int channel_num = voe_.GetLastChannel();
1951 cricket::AudioSendParameters parameters; 1869 cricket::AudioSendParameters parameters;
1952 parameters.codecs.push_back(kCn16000Codec); 1870 parameters.codecs.push_back(kCn16000Codec);
1953 parameters.codecs.push_back(kIsacCodec); 1871 parameters.codecs.push_back(kIsacCodec);
1954 parameters.codecs.push_back(kPcmuCodec); 1872 parameters.codecs.push_back(kPcmuCodec);
1955 parameters.codecs[0].id = 98; // wideband CN 1873 parameters.codecs[0].id = 98; // wideband CN
1956 parameters.codecs[1].id = 96; 1874 parameters.codecs[1].id = 96;
1957 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1875 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1958 webrtc::CodecInst gcodec; 1876 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1959 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1877 auto send_codec_spec =
1960 EXPECT_EQ(96, gcodec.pltype); 1878 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1961 EXPECT_STREQ("ISAC", gcodec.plname); 1879 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1962 EXPECT_EQ(98, voe_.GetSendCNPayloadType(channel_num, true)); 1880 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1881 EXPECT_EQ(98, send_codec_spec.cng_payload_type);
1882 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
1963 } 1883 }
1964 1884
1965 // Test that we set VAD and DTMF types correctly as caller. 1885 // Test that we set VAD and DTMF types correctly as caller.
1966 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { 1886 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) {
1967 EXPECT_TRUE(SetupSendStream()); 1887 EXPECT_TRUE(SetupSendStream());
1968 int channel_num = voe_.GetLastChannel();
1969 cricket::AudioSendParameters parameters; 1888 cricket::AudioSendParameters parameters;
1970 parameters.codecs.push_back(kIsacCodec); 1889 parameters.codecs.push_back(kIsacCodec);
1971 parameters.codecs.push_back(kPcmuCodec); 1890 parameters.codecs.push_back(kPcmuCodec);
1972 // TODO(juberti): cn 32000 1891 // TODO(juberti): cn 32000
1973 parameters.codecs.push_back(kCn16000Codec); 1892 parameters.codecs.push_back(kCn16000Codec);
1974 parameters.codecs.push_back(kCn8000Codec); 1893 parameters.codecs.push_back(kCn8000Codec);
1975 parameters.codecs.push_back(kTelephoneEventCodec); 1894 parameters.codecs.push_back(kTelephoneEventCodec);
1976 parameters.codecs[0].id = 96; 1895 parameters.codecs[0].id = 96;
1977 parameters.codecs[2].id = 97; // wideband CN 1896 parameters.codecs[2].id = 97; // wideband CN
1978 parameters.codecs[4].id = 98; // DTMF 1897 parameters.codecs[4].id = 98; // DTMF
1979 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1898 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1980 webrtc::CodecInst gcodec; 1899 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
1981 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1900 auto send_codec_spec =
1982 EXPECT_EQ(96, gcodec.pltype); 1901 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1983 EXPECT_STREQ("ISAC", gcodec.plname); 1902 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
1984 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1903 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1985 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1904 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1986 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1905 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1906 // It does not make sense to check this. So removed.
1907 // EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1908 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1909 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
1987 EXPECT_TRUE(channel_->CanInsertDtmf()); 1910 EXPECT_TRUE(channel_->CanInsertDtmf());
1988 } 1911 }
1989 1912
1990 // Test that we set VAD and DTMF types correctly as callee. 1913 // Test that we set VAD and DTMF types correctly as callee.
1991 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { 1914 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) {
1992 EXPECT_TRUE(SetupChannel()); 1915 EXPECT_TRUE(SetupChannel());
1993 cricket::AudioSendParameters parameters; 1916 cricket::AudioSendParameters parameters;
1994 parameters.codecs.push_back(kIsacCodec); 1917 parameters.codecs.push_back(kIsacCodec);
1995 parameters.codecs.push_back(kPcmuCodec); 1918 parameters.codecs.push_back(kPcmuCodec);
1996 // TODO(juberti): cn 32000 1919 // TODO(juberti): cn 32000
1997 parameters.codecs.push_back(kCn16000Codec); 1920 parameters.codecs.push_back(kCn16000Codec);
1998 parameters.codecs.push_back(kCn8000Codec); 1921 parameters.codecs.push_back(kCn8000Codec);
1999 parameters.codecs.push_back(kTelephoneEventCodec); 1922 parameters.codecs.push_back(kTelephoneEventCodec);
2000 parameters.codecs[0].id = 96; 1923 parameters.codecs[0].id = 96;
2001 parameters.codecs[2].id = 97; // wideband CN 1924 parameters.codecs[2].id = 97; // wideband CN
2002 parameters.codecs[4].id = 98; // DTMF 1925 parameters.codecs[4].id = 98; // DTMF
2003 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1926 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2004 EXPECT_TRUE(channel_->AddSendStream( 1927 EXPECT_TRUE(channel_->AddSendStream(
2005 cricket::StreamParams::CreateLegacy(kSsrc1))); 1928 cricket::StreamParams::CreateLegacy(kSsrc1)));
2006 int channel_num = voe_.GetLastChannel();
2007 1929
2008 webrtc::CodecInst gcodec; 1930 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2009 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1931 auto send_codec_spec =
2010 EXPECT_EQ(96, gcodec.pltype); 1932 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2011 EXPECT_STREQ("ISAC", gcodec.plname); 1933 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2012 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1934 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2013 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1935 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2014 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1936 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1937 // It does not make sense to check this. So removed.
1938 // EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
1939 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1940 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2015 EXPECT_TRUE(channel_->CanInsertDtmf()); 1941 EXPECT_TRUE(channel_->CanInsertDtmf());
2016 } 1942 }
2017 1943
2018 // Test that we only apply VAD if we have a CN codec that matches the 1944 // Test that we only apply VAD if we have a CN codec that matches the
2019 // send codec clockrate. 1945 // send codec clockrate.
2020 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { 1946 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) {
2021 EXPECT_TRUE(SetupSendStream()); 1947 EXPECT_TRUE(SetupSendStream());
2022 int channel_num = voe_.GetLastChannel();
2023 cricket::AudioSendParameters parameters; 1948 cricket::AudioSendParameters parameters;
2024 // Set ISAC(16K) and CN(16K). VAD should be activated. 1949 // Set ISAC(16K) and CN(16K). VAD should be activated.
2025 parameters.codecs.push_back(kIsacCodec); 1950 parameters.codecs.push_back(kIsacCodec);
2026 parameters.codecs.push_back(kCn16000Codec); 1951 parameters.codecs.push_back(kCn16000Codec);
2027 parameters.codecs[1].id = 97; 1952 parameters.codecs[1].id = 97;
2028 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1953 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2029 webrtc::CodecInst gcodec; 1954 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2030 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1955 auto send_codec_spec =
2031 EXPECT_STREQ("ISAC", gcodec.plname); 1956 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2032 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1957 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2033 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 1958 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1959 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1960 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
1961 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2034 // Set PCMU(8K) and CN(16K). VAD should not be activated. 1962 // Set PCMU(8K) and CN(16K). VAD should not be activated.
2035 parameters.codecs[0] = kPcmuCodec; 1963 parameters.codecs[0] = kPcmuCodec;
2036 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1964 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2037 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1965 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2038 EXPECT_STREQ("PCMU", gcodec.plname); 1966 send_codec_spec =
2039 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1967 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1968 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
1969 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2040 // Set PCMU(8K) and CN(8K). VAD should be activated. 1970 // Set PCMU(8K) and CN(8K). VAD should be activated.
2041 parameters.codecs[1] = kCn8000Codec; 1971 parameters.codecs[1] = kCn8000Codec;
2042 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1972 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2043 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1973 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2044 EXPECT_STREQ("PCMU", gcodec.plname); 1974 send_codec_spec =
2045 EXPECT_TRUE(voe_.GetVAD(channel_num)); 1975 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2046 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 1976 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
1977 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
1978 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
1979 EXPECT_EQ(13, send_codec_spec.cng_payload_type);
1980 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq);
2047 // Set ISAC(16K) and CN(8K). VAD should not be activated. 1981 // Set ISAC(16K) and CN(8K). VAD should not be activated.
2048 parameters.codecs[0] = kIsacCodec; 1982 parameters.codecs[0] = kIsacCodec;
2049 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1983 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2050 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 1984 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2051 EXPECT_STREQ("ISAC", gcodec.plname); 1985 send_codec_spec =
2052 EXPECT_FALSE(voe_.GetVAD(channel_num)); 1986 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
1987 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
1988 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2053 } 1989 }
2054 1990
2055 // Test that we perform case-insensitive matching of codec names. 1991 // Test that we perform case-insensitive matching of codec names.
2056 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { 1992 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) {
2057 EXPECT_TRUE(SetupSendStream()); 1993 EXPECT_TRUE(SetupSendStream());
2058 int channel_num = voe_.GetLastChannel();
2059 cricket::AudioSendParameters parameters; 1994 cricket::AudioSendParameters parameters;
2060 parameters.codecs.push_back(kIsacCodec); 1995 parameters.codecs.push_back(kIsacCodec);
2061 parameters.codecs.push_back(kPcmuCodec); 1996 parameters.codecs.push_back(kPcmuCodec);
2062 parameters.codecs.push_back(kCn16000Codec); 1997 parameters.codecs.push_back(kCn16000Codec);
2063 parameters.codecs.push_back(kCn8000Codec); 1998 parameters.codecs.push_back(kCn8000Codec);
2064 parameters.codecs.push_back(kTelephoneEventCodec); 1999 parameters.codecs.push_back(kTelephoneEventCodec);
2065 parameters.codecs[0].name = "iSaC"; 2000 parameters.codecs[0].name = "iSaC";
2066 parameters.codecs[0].id = 96; 2001 parameters.codecs[0].id = 96;
2067 parameters.codecs[2].id = 97; // wideband CN 2002 parameters.codecs[2].id = 97; // wideband CN
2068 parameters.codecs[4].id = 98; // DTMF 2003 parameters.codecs[4].id = 98; // DTMF
2069 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2004 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2070 webrtc::CodecInst gcodec; 2005 ASSERT_TRUE(call_.GetAudioSendStream(kSsrc1) != nullptr);
2071 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2006 auto send_codec_spec =
2072 EXPECT_EQ(96, gcodec.pltype); 2007 call_.GetAudioSendStream(kSsrc1)->GetConfig().send_codec_spec;
2073 EXPECT_STREQ("ISAC", gcodec.plname); 2008 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype);
2074 EXPECT_TRUE(voe_.GetVAD(channel_num)); 2009 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2075 EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false)); 2010 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2076 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 2011 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2012 // It does not make sense to check this. So removed.
2013 // EXPECT_EQ(13, voe_.GetSendCNPayloadType(channel_num, false));
2014 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2015 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2077 EXPECT_TRUE(channel_->CanInsertDtmf()); 2016 EXPECT_TRUE(channel_->CanInsertDtmf());
2078 } 2017 }
2079 2018
2080 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { 2019 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake {
2081 public: 2020 public:
2082 WebRtcVoiceEngineWithSendSideBweTest() 2021 WebRtcVoiceEngineWithSendSideBweTest()
2083 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} 2022 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {}
2084 }; 2023 };
2085 2024
2086 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, 2025 TEST_F(WebRtcVoiceEngineWithSendSideBweTest,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2219 } 2158 }
2220 2159
2221 cricket::AudioSendParameters parameters; 2160 cricket::AudioSendParameters parameters;
2222 // Set ISAC(16K) and CN(16K). VAD should be activated. 2161 // Set ISAC(16K) and CN(16K). VAD should be activated.
2223 parameters.codecs.push_back(kIsacCodec); 2162 parameters.codecs.push_back(kIsacCodec);
2224 parameters.codecs.push_back(kCn16000Codec); 2163 parameters.codecs.push_back(kCn16000Codec);
2225 parameters.codecs[1].id = 97; 2164 parameters.codecs[1].id = 97;
2226 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2165 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2227 2166
2228 // Verify ISAC and VAD are corrected configured on all send channels. 2167 // Verify ISAC and VAD are corrected configured on all send channels.
2229 webrtc::CodecInst gcodec;
2230 for (uint32_t ssrc : kSsrcs4) { 2168 for (uint32_t ssrc : kSsrcs4) {
2231 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2169 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2232 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2170 auto send_codec_spec =
2233 EXPECT_STREQ("ISAC", gcodec.plname); 2171 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2234 EXPECT_TRUE(voe_.GetVAD(channel_num)); 2172 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname);
2235 EXPECT_EQ(97, voe_.GetSendCNPayloadType(channel_num, true)); 2173 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2174 EXPECT_EQ(1, send_codec_spec.codec_inst.channels);
2175 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2176 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2236 } 2177 }
2237 2178
2238 // Change to PCMU(8K) and CN(16K). VAD should not be activated. 2179 // Change to PCMU(8K) and CN(16K).
2239 parameters.codecs[0] = kPcmuCodec; 2180 parameters.codecs[0] = kPcmuCodec;
2240 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2181 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2241 for (uint32_t ssrc : kSsrcs4) { 2182 for (uint32_t ssrc : kSsrcs4) {
2242 int channel_num = GetSendStreamConfig(ssrc).voe_channel_id; 2183 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr);
2243 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); 2184 auto send_codec_spec =
2244 EXPECT_STREQ("PCMU", gcodec.plname); 2185 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
2245 EXPECT_FALSE(voe_.GetVAD(channel_num)); 2186 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname);
2187 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq);
2188 EXPECT_EQ(97, send_codec_spec.cng_payload_type);
2189 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq);
2246 } 2190 }
2247 } 2191 }
2248 2192
2249 // Test we can SetSend on all send streams correctly. 2193 // Test we can SetSend on all send streams correctly.
2250 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { 2194 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) {
2251 SetupForMultiSendStream(); 2195 SetupForMultiSendStream();
2252 2196
2253 // Create the send channels and they should be a "not sending" date. 2197 // Create the send channels and they should be a "not sending" date.
2254 for (uint32_t ssrc : kSsrcs4) { 2198 for (uint32_t ssrc : kSsrcs4) {
2255 EXPECT_TRUE(channel_->AddSendStream( 2199 EXPECT_TRUE(channel_->AddSendStream(
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after
3508 cricket::WebRtcVoiceEngine engine( 3452 cricket::WebRtcVoiceEngine engine(
3509 nullptr, webrtc::CreateBuiltinAudioDecoderFactory()); 3453 nullptr, webrtc::CreateBuiltinAudioDecoderFactory());
3510 std::unique_ptr<webrtc::Call> call( 3454 std::unique_ptr<webrtc::Call> call(
3511 webrtc::Call::Create(webrtc::Call::Config())); 3455 webrtc::Call::Create(webrtc::Call::Config()));
3512 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), 3456 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(),
3513 cricket::AudioOptions(), call.get()); 3457 cricket::AudioOptions(), call.get());
3514 cricket::AudioRecvParameters parameters; 3458 cricket::AudioRecvParameters parameters;
3515 parameters.codecs = engine.recv_codecs(); 3459 parameters.codecs = engine.recv_codecs();
3516 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3460 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3517 } 3461 }
OLDNEW
« webrtc/media/engine/webrtcvoiceengine.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