OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2008 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |