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