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

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

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

Powered by Google App Engine
This is Rietveld 408576698