Chromium Code Reviews| 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 19 matching lines...) Expand all Loading... | |
| 30 #include "webrtc/pc/channel.h" | 30 #include "webrtc/pc/channel.h" |
| 31 #include "webrtc/test/field_trial.h" | 31 #include "webrtc/test/field_trial.h" |
| 32 | 32 |
| 33 using testing::Return; | 33 using testing::Return; |
| 34 using testing::StrictMock; | 34 using testing::StrictMock; |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| 38 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); | 38 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1); |
| 39 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); | 39 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1); |
| 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2); | 40 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 32000, 2); |
| 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); | 41 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1); |
| 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); | 42 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1); |
| 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); | 43 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1); |
| 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); | 44 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1); |
| 45 const cricket::AudioCodec | 45 const cricket::AudioCodec |
| 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); | 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
| 47 const cricket::AudioCodec | 47 const cricket::AudioCodec |
| 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); | 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
| 49 | 49 |
| 50 const uint32_t kSsrc1 = 0x99; | 50 const uint32_t kSsrc1 = 0x99; |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 294 return channel_->SetRtpSendParameters(ssrc, parameters); | 294 return channel_->SetRtpSendParameters(ssrc, parameters); |
| 295 } | 295 } |
| 296 | 296 |
| 297 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { | 297 void SetGlobalMaxBitrate(const cricket::AudioCodec& codec, int bitrate) { |
| 298 cricket::AudioSendParameters send_parameters; | 298 cricket::AudioSendParameters send_parameters; |
| 299 send_parameters.codecs.push_back(codec); | 299 send_parameters.codecs.push_back(codec); |
| 300 send_parameters.max_bandwidth_bps = bitrate; | 300 send_parameters.max_bandwidth_bps = bitrate; |
| 301 SetSendParameters(send_parameters); | 301 SetSendParameters(send_parameters); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void CheckSendCodec(int32_t ssrc, | 304 void CheckSendCodecBitrate(int32_t ssrc, |
| 305 const char expected_name[], | 305 const char expected_name[], |
| 306 int expected_channels, | 306 int expected_bitrate) { |
| 307 int expected_bitrate) { | 307 const auto& spec = GetSendStreamConfig(ssrc).send_codec_spec; |
| 308 const auto& codec = GetSendStreamConfig(ssrc).send_codec_spec.codec_inst; | 308 EXPECT_EQ(expected_name, spec.format.name); |
| 309 EXPECT_STREQ(expected_name, codec.plname); | 309 EXPECT_EQ(expected_bitrate, spec.target_bitrate_bps); |
| 310 EXPECT_EQ(expected_channels, codec.channels); | |
| 311 EXPECT_EQ(expected_bitrate, codec.rate); | |
| 312 } | 310 } |
| 313 | 311 |
| 314 int GetOpusMaxPlaybackRate(int32_t ssrc) { | 312 rtc::Optional<int> GetCodecBitrate(int32_t ssrc) { |
| 315 return GetSendStreamConfig(ssrc).send_codec_spec.opus_max_playback_rate; | 313 return GetSendStreamConfig(ssrc).send_codec_spec.target_bitrate_bps; |
| 316 } | |
| 317 | |
| 318 bool GetOpusDtx(int32_t ssrc) { | |
| 319 return GetSendStreamConfig(ssrc).send_codec_spec.enable_opus_dtx; | |
| 320 } | |
| 321 | |
| 322 bool GetCodecFec(int32_t ssrc) { | |
| 323 return GetSendStreamConfig(ssrc).send_codec_spec.enable_codec_fec; | |
| 324 } | |
| 325 | |
| 326 int GetCodecBitrate(int32_t ssrc) { | |
| 327 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.rate; | |
| 328 } | |
| 329 | |
| 330 int GetCodecPacSize(int32_t ssrc) { | |
| 331 return GetSendStreamConfig(ssrc).send_codec_spec.codec_inst.pacsize; | |
| 332 } | 314 } |
| 333 | 315 |
| 334 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { | 316 const rtc::Optional<std::string>& GetAudioNetworkAdaptorConfig(int32_t ssrc) { |
| 335 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; | 317 return GetSendStreamConfig(ssrc).audio_network_adaptor_config; |
| 336 } | 318 } |
| 337 | 319 |
| 338 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, | 320 void SetAndExpectMaxBitrate(const cricket::AudioCodec& codec, |
| 339 int global_max, | 321 int global_max, |
| 340 int stream_max, | 322 int stream_max, |
| 341 bool expected_result, | 323 bool expected_result, |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 655 // Tests that the list of supported codecs is created properly and ordered | 637 // Tests that the list of supported codecs is created properly and ordered |
| 656 // correctly (such that opus appears first). | 638 // correctly (such that opus appears first). |
| 657 // TODO(ossu): This test should move into a separate builtin audio codecs | 639 // TODO(ossu): This test should move into a separate builtin audio codecs |
| 658 // module. | 640 // module. |
| 659 TEST_F(WebRtcVoiceEngineTestFake, CodecOrder) { | 641 TEST_F(WebRtcVoiceEngineTestFake, CodecOrder) { |
| 660 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); | 642 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); |
| 661 ASSERT_FALSE(codecs.empty()); | 643 ASSERT_FALSE(codecs.empty()); |
| 662 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); | 644 EXPECT_STRCASEEQ("opus", codecs[0].name.c_str()); |
| 663 EXPECT_EQ(48000, codecs[0].clockrate); | 645 EXPECT_EQ(48000, codecs[0].clockrate); |
| 664 EXPECT_EQ(2, codecs[0].channels); | 646 EXPECT_EQ(2, codecs[0].channels); |
| 665 EXPECT_EQ(64000, codecs[0].bitrate); | |
| 666 } | 647 } |
| 667 | 648 |
| 668 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { | 649 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { |
| 669 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); | 650 const std::vector<cricket::AudioCodec>& codecs = engine_->send_codecs(); |
| 670 bool opus_found = false; | 651 bool opus_found = false; |
| 671 for (cricket::AudioCodec codec : codecs) { | 652 for (cricket::AudioCodec codec : codecs) { |
| 672 if (codec.name == "opus") { | 653 if (codec.name == "opus") { |
| 673 EXPECT_TRUE(HasTransportCc(codec)); | 654 EXPECT_TRUE(HasTransportCc(codec)); |
| 674 opus_found = true; | 655 opus_found = true; |
| 675 } | 656 } |
| 676 } | 657 } |
| 677 EXPECT_TRUE(opus_found); | 658 EXPECT_TRUE(opus_found); |
| 678 } | 659 } |
| 679 | 660 |
| 680 // Tests that we can find codecs by name or id, and that we interpret the | |
| 681 // clockrate and bitrate fields properly. | |
| 682 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { | |
| 683 cricket::AudioCodec codec; | |
| 684 webrtc::CodecInst codec_inst; | |
| 685 // Find PCMU with explicit clockrate and bitrate. | |
| 686 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); | |
| 687 // Find ISAC with explicit clockrate and 0 bitrate. | |
| 688 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); | |
| 689 // Find telephone-event with explicit clockrate and 0 bitrate. | |
| 690 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec1, | |
| 691 &codec_inst)); | |
| 692 // Find telephone-event with explicit clockrate and 0 bitrate. | |
| 693 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec2, | |
| 694 &codec_inst)); | |
| 695 // Find ISAC with a different payload id. | |
| 696 codec = kIsacCodec; | |
| 697 codec.id = 127; | |
| 698 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
| 699 EXPECT_EQ(codec.id, codec_inst.pltype); | |
| 700 // Find PCMU with a 0 clockrate. | |
| 701 codec = kPcmuCodec; | |
| 702 codec.clockrate = 0; | |
| 703 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
| 704 EXPECT_EQ(codec.id, codec_inst.pltype); | |
| 705 EXPECT_EQ(8000, codec_inst.plfreq); | |
| 706 // Find PCMU with a 0 bitrate. | |
| 707 codec = kPcmuCodec; | |
| 708 codec.bitrate = 0; | |
| 709 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
| 710 EXPECT_EQ(codec.id, codec_inst.pltype); | |
| 711 EXPECT_EQ(64000, codec_inst.rate); | |
| 712 // Find ISAC with an explicit bitrate. | |
| 713 codec = kIsacCodec; | |
| 714 codec.bitrate = 32000; | |
| 715 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | |
| 716 EXPECT_EQ(codec.id, codec_inst.pltype); | |
| 717 EXPECT_EQ(32000, codec_inst.rate); | |
| 718 } | |
| 719 | |
| 720 // Test that we set our inbound codecs properly, including changing PT. | 661 // Test that we set our inbound codecs properly, including changing PT. |
| 721 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 662 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
| 722 EXPECT_TRUE(SetupChannel()); | 663 EXPECT_TRUE(SetupChannel()); |
| 723 cricket::AudioRecvParameters parameters; | 664 cricket::AudioRecvParameters parameters; |
| 724 parameters.codecs.push_back(kIsacCodec); | 665 parameters.codecs.push_back(kIsacCodec); |
| 725 parameters.codecs.push_back(kPcmuCodec); | 666 parameters.codecs.push_back(kPcmuCodec); |
| 726 parameters.codecs.push_back(kTelephoneEventCodec1); | 667 parameters.codecs.push_back(kTelephoneEventCodec1); |
| 727 parameters.codecs.push_back(kTelephoneEventCodec2); | 668 parameters.codecs.push_back(kTelephoneEventCodec2); |
| 728 parameters.codecs[0].id = 106; // collide with existing CN 32k | 669 parameters.codecs[0].id = 106; // collide with existing CN 32k |
| 729 parameters.codecs[2].id = 126; | 670 parameters.codecs[2].id = 126; |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 920 // Test that when autobw is enabled, bitrate is kept as the default | 861 // Test that when autobw is enabled, bitrate is kept as the default |
| 921 // value. autobw is enabled for the following tests because the target | 862 // value. autobw is enabled for the following tests because the target |
| 922 // bitrate is <= 0. | 863 // bitrate is <= 0. |
| 923 | 864 |
| 924 // ISAC, default bitrate == 32000. | 865 // ISAC, default bitrate == 32000. |
| 925 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000); | 866 TestMaxSendBandwidth(kIsacCodec, 0, true, 32000); |
| 926 | 867 |
| 927 // PCMU, default bitrate == 64000. | 868 // PCMU, default bitrate == 64000. |
| 928 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000); | 869 TestMaxSendBandwidth(kPcmuCodec, -1, true, 64000); |
| 929 | 870 |
| 930 // opus, default bitrate == 64000. | 871 // opus, default bitrate == 32000 in mono. |
| 931 TestMaxSendBandwidth(kOpusCodec, -1, true, 64000); | 872 TestMaxSendBandwidth(kOpusCodec, -1, true, 32000); |
| 932 } | 873 } |
| 933 | 874 |
| 934 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { | 875 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthMultiRateAsCaller) { |
| 935 EXPECT_TRUE(SetupSendStream()); | 876 EXPECT_TRUE(SetupSendStream()); |
| 936 | 877 |
| 937 // Test that the bitrate of a multi-rate codec is always the maximum. | |
| 938 | |
| 939 // ISAC, default bitrate == 32000. | 878 // ISAC, default bitrate == 32000. |
| 940 TestMaxSendBandwidth(kIsacCodec, 40000, true, 40000); | |
| 941 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000); | 879 TestMaxSendBandwidth(kIsacCodec, 16000, true, 16000); |
| 942 // Rates above the max (56000) should be capped. | 880 // Rates above the max (56000) should be capped. |
| 943 TestMaxSendBandwidth(kIsacCodec, 100000, true, 56000); | 881 TestMaxSendBandwidth(kIsacCodec, 100000, true, 32000); |
| 944 | 882 |
| 945 // opus, default bitrate == 64000. | 883 // opus, default bitrate == 64000. |
| 946 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000); | 884 TestMaxSendBandwidth(kOpusCodec, 96000, true, 96000); |
| 947 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000); | 885 TestMaxSendBandwidth(kOpusCodec, 48000, true, 48000); |
| 948 // Rates above the max (510000) should be capped. | 886 // Rates above the max (510000) should be capped. |
| 949 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000); | 887 TestMaxSendBandwidth(kOpusCodec, 600000, true, 510000); |
| 950 } | 888 } |
| 951 | 889 |
| 952 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { | 890 TEST_F(WebRtcVoiceEngineTestFake, SetMaxSendBandwidthFixedRateAsCaller) { |
| 953 EXPECT_TRUE(SetupSendStream()); | 891 EXPECT_TRUE(SetupSendStream()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 996 send_parameters_.max_bandwidth_bps = 128; | 934 send_parameters_.max_bandwidth_bps = 128; |
| 997 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 935 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
| 998 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | 936 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); |
| 999 } | 937 } |
| 1000 | 938 |
| 1001 // Test that the per-stream bitrate limit and the global | 939 // Test that the per-stream bitrate limit and the global |
| 1002 // bitrate limit both apply. | 940 // bitrate limit both apply. |
| 1003 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { | 941 TEST_F(WebRtcVoiceEngineTestFake, SetMaxBitratePerStream) { |
| 1004 EXPECT_TRUE(SetupSendStream()); | 942 EXPECT_TRUE(SetupSendStream()); |
| 1005 | 943 |
| 1006 // opus, default bitrate == 64000. | 944 // opus, default bitrate == 32000. |
| 1007 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 64000); | 945 SetAndExpectMaxBitrate(kOpusCodec, 0, 0, true, 32000); |
| 1008 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); | 946 SetAndExpectMaxBitrate(kOpusCodec, 48000, 0, true, 48000); |
| 1009 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); | 947 SetAndExpectMaxBitrate(kOpusCodec, 48000, 64000, true, 48000); |
| 1010 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); | 948 SetAndExpectMaxBitrate(kOpusCodec, 64000, 48000, true, 48000); |
| 1011 | 949 |
| 1012 // CBR codecs allow both maximums to exceed the bitrate. | 950 // CBR codecs allow both maximums to exceed the bitrate. |
| 1013 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); | 951 SetAndExpectMaxBitrate(kPcmuCodec, 0, 0, true, 64000); |
| 1014 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); | 952 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 0, true, 64000); |
| 1015 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); | 953 SetAndExpectMaxBitrate(kPcmuCodec, 0, 64001, true, 64000); |
| 1016 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); | 954 SetAndExpectMaxBitrate(kPcmuCodec, 64001, 64001, true, 64000); |
| 1017 | 955 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1082 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { | 1020 TEST_F(WebRtcVoiceEngineTestFake, RtpParametersArePerStream) { |
| 1083 SetupForMultiSendStream(); | 1021 SetupForMultiSendStream(); |
| 1084 // Create send streams. | 1022 // Create send streams. |
| 1085 for (uint32_t ssrc : kSsrcs4) { | 1023 for (uint32_t ssrc : kSsrcs4) { |
| 1086 EXPECT_TRUE( | 1024 EXPECT_TRUE( |
| 1087 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); | 1025 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(ssrc))); |
| 1088 } | 1026 } |
| 1089 // Configure one stream to be limited by the stream config, another to be | 1027 // Configure one stream to be limited by the stream config, another to be |
| 1090 // limited by the global max, and the third one with no per-stream limit | 1028 // limited by the global max, and the third one with no per-stream limit |
| 1091 // (still subject to the global limit). | 1029 // (still subject to the global limit). |
| 1092 SetGlobalMaxBitrate(kOpusCodec, 64000); | 1030 SetGlobalMaxBitrate(kOpusCodec, 32000); |
| 1093 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 48000)); | 1031 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[0], 24000)); |
| 1094 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 96000)); | 1032 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[1], 48000)); |
| 1095 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); | 1033 EXPECT_TRUE(SetMaxBitrateForStream(kSsrcs4[2], -1)); |
| 1096 | 1034 |
| 1097 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); | 1035 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0])); |
| 1098 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[1])); | 1036 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[1])); |
| 1099 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); | 1037 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2])); |
| 1100 | 1038 |
| 1101 // Remove the global cap; the streams should switch to their respective | 1039 // Remove the global cap; the streams should switch to their respective |
| 1102 // maximums (or remain unchanged if there was no other limit on them.) | 1040 // maximums (or remain unchanged if there was no other limit on them.) |
| 1103 SetGlobalMaxBitrate(kOpusCodec, -1); | 1041 SetGlobalMaxBitrate(kOpusCodec, -1); |
| 1104 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[0])); | 1042 EXPECT_EQ(24000, GetCodecBitrate(kSsrcs4[0])); |
| 1105 EXPECT_EQ(96000, GetCodecBitrate(kSsrcs4[1])); | 1043 EXPECT_EQ(48000, GetCodecBitrate(kSsrcs4[1])); |
| 1106 EXPECT_EQ(64000, GetCodecBitrate(kSsrcs4[2])); | 1044 EXPECT_EQ(32000, GetCodecBitrate(kSsrcs4[2])); |
| 1107 } | 1045 } |
| 1108 | 1046 |
| 1109 // Test that GetRtpSendParameters returns the currently configured codecs. | 1047 // Test that GetRtpSendParameters returns the currently configured codecs. |
| 1110 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { | 1048 TEST_F(WebRtcVoiceEngineTestFake, GetRtpSendParametersCodecs) { |
| 1111 EXPECT_TRUE(SetupSendStream()); | 1049 EXPECT_TRUE(SetupSendStream()); |
| 1112 cricket::AudioSendParameters parameters; | 1050 cricket::AudioSendParameters parameters; |
| 1113 parameters.codecs.push_back(kIsacCodec); | 1051 parameters.codecs.push_back(kIsacCodec); |
| 1114 parameters.codecs.push_back(kPcmuCodec); | 1052 parameters.codecs.push_back(kPcmuCodec); |
| 1115 SetSendParameters(parameters); | 1053 SetSendParameters(parameters); |
| 1116 | 1054 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1196 cricket::AudioSendParameters parameters; | 1134 cricket::AudioSendParameters parameters; |
| 1197 parameters.codecs.push_back(kIsacCodec); | 1135 parameters.codecs.push_back(kIsacCodec); |
| 1198 parameters.codecs.push_back(kPcmuCodec); | 1136 parameters.codecs.push_back(kPcmuCodec); |
| 1199 parameters.codecs.push_back(kCn8000Codec); | 1137 parameters.codecs.push_back(kCn8000Codec); |
| 1200 parameters.codecs[0].id = 96; | 1138 parameters.codecs[0].id = 96; |
| 1201 parameters.codecs[0].bitrate = 48000; | 1139 parameters.codecs[0].bitrate = 48000; |
| 1202 const int initial_num = call_.GetNumCreatedSendStreams(); | 1140 const int initial_num = call_.GetNumCreatedSendStreams(); |
| 1203 SetSendParameters(parameters); | 1141 SetSendParameters(parameters); |
| 1204 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1142 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
| 1205 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1143 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1206 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1144 EXPECT_EQ(96, send_codec_spec.payload_type); |
| 1207 EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); | 1145 // EXPECT_EQ(48000, send_codec_spec.codec_inst.rate); |
| 1208 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1146 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 1209 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1147 EXPECT_NE(send_codec_spec.format.clockrate_hz, |
| 1210 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1148 8000); |
| 1211 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | 1149 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
| 1150 // EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | |
| 1212 EXPECT_FALSE(channel_->CanInsertDtmf()); | 1151 EXPECT_FALSE(channel_->CanInsertDtmf()); |
| 1213 } | 1152 } |
| 1214 | 1153 |
| 1215 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried | 1154 // Test that VoE Channel doesn't call SetSendCodec again if same codec is tried |
| 1216 // to apply. | 1155 // to apply. |
| 1217 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { | 1156 TEST_F(WebRtcVoiceEngineTestFake, DontResetSetSendCodec) { |
| 1218 EXPECT_TRUE(SetupSendStream()); | 1157 EXPECT_TRUE(SetupSendStream()); |
| 1219 cricket::AudioSendParameters parameters; | 1158 cricket::AudioSendParameters parameters; |
| 1220 parameters.codecs.push_back(kIsacCodec); | 1159 parameters.codecs.push_back(kIsacCodec); |
| 1221 parameters.codecs.push_back(kPcmuCodec); | 1160 parameters.codecs.push_back(kPcmuCodec); |
| 1222 parameters.codecs.push_back(kCn8000Codec); | 1161 parameters.codecs.push_back(kCn8000Codec); |
| 1223 parameters.codecs[0].id = 96; | 1162 parameters.codecs[0].id = 96; |
| 1224 parameters.codecs[0].bitrate = 48000; | 1163 parameters.codecs[0].bitrate = 48000; |
| 1225 const int initial_num = call_.GetNumCreatedSendStreams(); | 1164 const int initial_num = call_.GetNumCreatedSendStreams(); |
| 1226 SetSendParameters(parameters); | 1165 SetSendParameters(parameters); |
| 1227 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1166 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
| 1228 // Calling SetSendCodec again with same codec which is already set. | 1167 // Calling SetSendCodec again with same codec which is already set. |
| 1229 // In this case media channel shouldn't send codec to VoE. | 1168 // In this case media channel shouldn't send codec to VoE. |
| 1230 SetSendParameters(parameters); | 1169 SetSendParameters(parameters); |
| 1231 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); | 1170 EXPECT_EQ(initial_num + 1, call_.GetNumCreatedSendStreams()); |
| 1232 } | 1171 } |
| 1233 | 1172 |
| 1234 // Verify that G722 is set with 16000 samples per second to WebRTC. | 1173 // TODO(ossu): Move these tests into tests for Audio{Encoder,Decoder}Opus or, |
| 1235 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecG722) { | 1174 // possibly, BuiltinAudio{Encoder,Decoder}Factory; this depends on where we move |
| 1236 EXPECT_TRUE(SetupSendStream()); | 1175 // validation. |
| 1237 cricket::AudioSendParameters parameters; | |
| 1238 parameters.codecs.push_back(kG722CodecSdp); | |
| 1239 SetSendParameters(parameters); | |
| 1240 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | |
| 1241 EXPECT_STREQ("G722", gcodec.plname); | |
| 1242 EXPECT_EQ(1, gcodec.channels); | |
| 1243 EXPECT_EQ(16000, gcodec.plfreq); | |
| 1244 } | |
| 1245 | 1176 |
| 1246 // Test that if clockrate is not 48000 for opus, we fail. | 1177 // Test that if clockrate is not 48000 for opus, we fail. |
| 1247 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { | 1178 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBadClockrate) { |
| 1248 EXPECT_TRUE(SetupSendStream()); | 1179 EXPECT_TRUE(SetupSendStream()); |
| 1249 cricket::AudioSendParameters parameters; | 1180 cricket::AudioSendParameters parameters; |
| 1250 parameters.codecs.push_back(kOpusCodec); | 1181 parameters.codecs.push_back(kOpusCodec); |
| 1251 parameters.codecs[0].bitrate = 0; | 1182 parameters.codecs[0].bitrate = 0; |
| 1252 parameters.codecs[0].clockrate = 50000; | 1183 parameters.codecs[0].clockrate = 50000; |
| 1253 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1184 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
| 1254 } | 1185 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1299 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { | 1230 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusBad1Channel1Stereo) { |
| 1300 EXPECT_TRUE(SetupSendStream()); | 1231 EXPECT_TRUE(SetupSendStream()); |
| 1301 cricket::AudioSendParameters parameters; | 1232 cricket::AudioSendParameters parameters; |
| 1302 parameters.codecs.push_back(kOpusCodec); | 1233 parameters.codecs.push_back(kOpusCodec); |
| 1303 parameters.codecs[0].bitrate = 0; | 1234 parameters.codecs[0].bitrate = 0; |
| 1304 parameters.codecs[0].channels = 1; | 1235 parameters.codecs[0].channels = 1; |
| 1305 parameters.codecs[0].params["stereo"] = "1"; | 1236 parameters.codecs[0].params["stereo"] = "1"; |
| 1306 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1237 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
| 1307 } | 1238 } |
| 1308 | 1239 |
| 1309 // Test that with bitrate=0 and no stereo, | 1240 // Test that with bitrate=0 and no stereo, bitrate is 32000. |
| 1310 // channels and bitrate are 1 and 32000. | |
| 1311 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { | 1241 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0BitrateNoStereo) { |
| 1312 EXPECT_TRUE(SetupSendStream()); | 1242 EXPECT_TRUE(SetupSendStream()); |
| 1313 cricket::AudioSendParameters parameters; | 1243 cricket::AudioSendParameters parameters; |
| 1314 parameters.codecs.push_back(kOpusCodec); | 1244 parameters.codecs.push_back(kOpusCodec); |
| 1315 parameters.codecs[0].bitrate = 0; | 1245 parameters.codecs[0].bitrate = 0; |
| 1316 SetSendParameters(parameters); | 1246 SetSendParameters(parameters); |
| 1317 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1247 CheckSendCodecBitrate(kSsrc1, "opus", 32000); |
| 1318 } | 1248 } |
| 1319 | 1249 |
| 1320 // Test that with bitrate=0 and stereo=0, | 1250 // Test that with bitrate=0 and stereo=0, bitrate is 32000. |
| 1321 // channels and bitrate are 1 and 32000. | |
| 1322 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { | 1251 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate0Stereo) { |
| 1323 EXPECT_TRUE(SetupSendStream()); | 1252 EXPECT_TRUE(SetupSendStream()); |
| 1324 cricket::AudioSendParameters parameters; | 1253 cricket::AudioSendParameters parameters; |
| 1325 parameters.codecs.push_back(kOpusCodec); | 1254 parameters.codecs.push_back(kOpusCodec); |
| 1326 parameters.codecs[0].bitrate = 0; | 1255 parameters.codecs[0].bitrate = 0; |
| 1327 parameters.codecs[0].params["stereo"] = "0"; | 1256 parameters.codecs[0].params["stereo"] = "0"; |
| 1328 SetSendParameters(parameters); | 1257 SetSendParameters(parameters); |
| 1329 CheckSendCodec(kSsrc1, "opus", 1, 32000); | 1258 CheckSendCodecBitrate(kSsrc1, "opus", 32000); |
| 1330 } | 1259 } |
| 1331 | 1260 |
| 1332 // Test that with bitrate=invalid and stereo=0, | 1261 // Test that with bitrate=invalid and stereo=0, bitrate is 32000. |
| 1333 // channels and bitrate are 1 and 32000. | |
| 1334 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { | 1262 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate0Stereo) { |
| 1335 EXPECT_TRUE(SetupSendStream()); | 1263 EXPECT_TRUE(SetupSendStream()); |
| 1336 cricket::AudioSendParameters parameters; | 1264 cricket::AudioSendParameters parameters; |
| 1337 parameters.codecs.push_back(kOpusCodec); | 1265 parameters.codecs.push_back(kOpusCodec); |
| 1338 parameters.codecs[0].params["stereo"] = "0"; | 1266 parameters.codecs[0].params["stereo"] = "0"; |
| 1339 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1267 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
| 1340 parameters.codecs[0].bitrate = 5999; | 1268 parameters.codecs[0].bitrate = 5999; |
| 1341 SetSendParameters(parameters); | 1269 SetSendParameters(parameters); |
| 1342 CheckSendCodec(kSsrc1, "opus", 1, 6000); | 1270 CheckSendCodecBitrate(kSsrc1, "opus", 6000); |
| 1343 | 1271 |
| 1344 parameters.codecs[0].bitrate = 510001; | 1272 parameters.codecs[0].bitrate = 510001; |
| 1345 SetSendParameters(parameters); | 1273 SetSendParameters(parameters); |
| 1346 CheckSendCodec(kSsrc1, "opus", 1, 510000); | 1274 CheckSendCodecBitrate(kSsrc1, "opus", 510000); |
| 1347 } | 1275 } |
| 1348 | 1276 |
| 1349 // Test that with bitrate=0 and stereo=1, | 1277 // Test that with bitrate=0 and stereo=1, bitrate is 64000. |
| 1350 // channels and bitrate are 2 and 64000. | |
| 1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { | 1278 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGood0Bitrate1Stereo) { |
| 1352 EXPECT_TRUE(SetupSendStream()); | 1279 EXPECT_TRUE(SetupSendStream()); |
| 1353 cricket::AudioSendParameters parameters; | 1280 cricket::AudioSendParameters parameters; |
| 1354 parameters.codecs.push_back(kOpusCodec); | 1281 parameters.codecs.push_back(kOpusCodec); |
| 1355 parameters.codecs[0].bitrate = 0; | 1282 parameters.codecs[0].bitrate = 0; |
| 1356 parameters.codecs[0].params["stereo"] = "1"; | 1283 parameters.codecs[0].params["stereo"] = "1"; |
| 1357 SetSendParameters(parameters); | 1284 SetSendParameters(parameters); |
| 1358 CheckSendCodec(kSsrc1, "opus", 2, 64000); | 1285 CheckSendCodecBitrate(kSsrc1, "opus", 64000); |
| 1359 } | 1286 } |
| 1360 | 1287 |
| 1361 // Test that with bitrate=invalid and stereo=1, | 1288 // Test that with bitrate=invalid and stereo=1, bitrate is 64000. |
| 1362 // channels and bitrate are 2 and 64000. | |
| 1363 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { | 1289 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodXBitrate1Stereo) { |
| 1364 EXPECT_TRUE(SetupSendStream()); | 1290 EXPECT_TRUE(SetupSendStream()); |
| 1365 cricket::AudioSendParameters parameters; | 1291 cricket::AudioSendParameters parameters; |
| 1366 parameters.codecs.push_back(kOpusCodec); | 1292 parameters.codecs.push_back(kOpusCodec); |
| 1367 parameters.codecs[0].params["stereo"] = "1"; | 1293 parameters.codecs[0].params["stereo"] = "1"; |
| 1368 // bitrate that's out of the range between 6000 and 510000 will be clamped. | 1294 // bitrate that's out of the range between 6000 and 510000 will be clamped. |
| 1369 parameters.codecs[0].bitrate = 5999; | 1295 parameters.codecs[0].bitrate = 5999; |
| 1370 SetSendParameters(parameters); | 1296 SetSendParameters(parameters); |
| 1371 CheckSendCodec(kSsrc1, "opus", 2, 6000); | 1297 CheckSendCodecBitrate(kSsrc1, "opus", 6000); |
| 1372 | 1298 |
| 1373 parameters.codecs[0].bitrate = 510001; | 1299 parameters.codecs[0].bitrate = 510001; |
| 1374 SetSendParameters(parameters); | 1300 SetSendParameters(parameters); |
| 1375 CheckSendCodec(kSsrc1, "opus", 2, 510000); | 1301 CheckSendCodecBitrate(kSsrc1, "opus", 510000); |
| 1376 } | 1302 } |
| 1377 | 1303 |
| 1378 // Test that with bitrate=N and stereo unset, | 1304 // Test that with bitrate=N and stereo unset, bitrate is N. |
| 1379 // channels and bitrate are 1 and N. | |
| 1380 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { | 1305 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoStereo) { |
| 1381 EXPECT_TRUE(SetupSendStream()); | 1306 EXPECT_TRUE(SetupSendStream()); |
| 1382 cricket::AudioSendParameters parameters; | 1307 cricket::AudioSendParameters parameters; |
| 1383 parameters.codecs.push_back(kOpusCodec); | 1308 parameters.codecs.push_back(kOpusCodec); |
| 1384 parameters.codecs[0].bitrate = 96000; | 1309 parameters.codecs[0].bitrate = 96000; |
| 1385 SetSendParameters(parameters); | 1310 SetSendParameters(parameters); |
| 1386 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1311 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1387 EXPECT_EQ(111, gcodec.pltype); | 1312 EXPECT_EQ(111, spec.payload_type); |
| 1388 EXPECT_EQ(96000, gcodec.rate); | 1313 EXPECT_EQ(96000, spec.target_bitrate_bps); |
| 1389 EXPECT_STREQ("opus", gcodec.plname); | 1314 EXPECT_EQ("opus", spec.format.name); |
| 1390 EXPECT_EQ(1, gcodec.channels); | 1315 EXPECT_EQ(2, spec.format.num_channels); |
| 1391 EXPECT_EQ(48000, gcodec.plfreq); | 1316 EXPECT_EQ(48000, spec.format.clockrate_hz); |
| 1392 } | 1317 } |
| 1393 | 1318 |
| 1394 // Test that with bitrate=N and stereo=0, | 1319 // Test that with bitrate=N and stereo=0, bitrate is N. |
| 1395 // channels and bitrate are 1 and N. | |
| 1396 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { | 1320 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate0Stereo) { |
| 1397 EXPECT_TRUE(SetupSendStream()); | 1321 EXPECT_TRUE(SetupSendStream()); |
| 1398 cricket::AudioSendParameters parameters; | 1322 cricket::AudioSendParameters parameters; |
| 1399 parameters.codecs.push_back(kOpusCodec); | 1323 parameters.codecs.push_back(kOpusCodec); |
| 1400 parameters.codecs[0].bitrate = 30000; | 1324 parameters.codecs[0].bitrate = 30000; |
| 1401 parameters.codecs[0].params["stereo"] = "0"; | 1325 parameters.codecs[0].params["stereo"] = "0"; |
| 1402 SetSendParameters(parameters); | 1326 SetSendParameters(parameters); |
| 1403 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1327 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
| 1404 } | 1328 } |
| 1405 | 1329 |
| 1406 // Test that with bitrate=N and without any parameters, | 1330 // Test that with bitrate=N and without any parameters, bitrate is N. |
| 1407 // channels and bitrate are 1 and N. | |
| 1408 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { | 1331 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrateNoParameters) { |
| 1409 EXPECT_TRUE(SetupSendStream()); | 1332 EXPECT_TRUE(SetupSendStream()); |
| 1410 cricket::AudioSendParameters parameters; | 1333 cricket::AudioSendParameters parameters; |
| 1411 parameters.codecs.push_back(kOpusCodec); | 1334 parameters.codecs.push_back(kOpusCodec); |
| 1412 parameters.codecs[0].bitrate = 30000; | 1335 parameters.codecs[0].bitrate = 30000; |
| 1413 SetSendParameters(parameters); | 1336 SetSendParameters(parameters); |
| 1414 CheckSendCodec(kSsrc1, "opus", 1, 30000); | 1337 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
| 1415 } | 1338 } |
| 1416 | 1339 |
| 1417 // Test that with bitrate=N and stereo=1, | 1340 // Test that with bitrate=N and stereo=1, bitrate is N. |
| 1418 // channels and bitrate are 2 and N. | |
| 1419 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { | 1341 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusGoodNBitrate1Stereo) { |
| 1420 EXPECT_TRUE(SetupSendStream()); | 1342 EXPECT_TRUE(SetupSendStream()); |
| 1421 cricket::AudioSendParameters parameters; | 1343 cricket::AudioSendParameters parameters; |
| 1422 parameters.codecs.push_back(kOpusCodec); | 1344 parameters.codecs.push_back(kOpusCodec); |
| 1423 parameters.codecs[0].bitrate = 30000; | 1345 parameters.codecs[0].bitrate = 30000; |
| 1424 parameters.codecs[0].params["stereo"] = "1"; | 1346 parameters.codecs[0].params["stereo"] = "1"; |
| 1425 SetSendParameters(parameters); | 1347 SetSendParameters(parameters); |
| 1426 CheckSendCodec(kSsrc1, "opus", 2, 30000); | 1348 CheckSendCodecBitrate(kSsrc1, "opus", 30000); |
| 1427 } | |
| 1428 | |
| 1429 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter. | |
| 1430 // Also test that the "maxaveragebitrate" can't be set to values outside the | |
| 1431 // range of 6000 and 510000 | |
| 1432 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusMaxAverageBitrate) { | |
| 1433 EXPECT_TRUE(SetupSendStream()); | |
| 1434 cricket::AudioSendParameters parameters; | |
| 1435 parameters.codecs.push_back(kOpusCodec); | |
| 1436 parameters.codecs[0].bitrate = 30000; | |
| 1437 // Ignore if less than 6000. | |
| 1438 parameters.codecs[0].params["maxaveragebitrate"] = "5999"; | |
| 1439 SetSendParameters(parameters); | |
| 1440 EXPECT_EQ(6000, GetCodecBitrate(kSsrc1)); | |
| 1441 | |
| 1442 // Ignore if larger than 510000. | |
| 1443 parameters.codecs[0].params["maxaveragebitrate"] = "510001"; | |
| 1444 SetSendParameters(parameters); | |
| 1445 EXPECT_EQ(510000, GetCodecBitrate(kSsrc1)); | |
| 1446 | |
| 1447 parameters.codecs[0].params["maxaveragebitrate"] = "200000"; | |
| 1448 SetSendParameters(parameters); | |
| 1449 EXPECT_EQ(200000, GetCodecBitrate(kSsrc1)); | |
| 1450 } | 1349 } |
| 1451 | 1350 |
| 1452 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { | 1351 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithBitrates) { |
| 1453 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1352 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
| 1454 200000); | 1353 200000); |
| 1455 } | 1354 } |
| 1456 | 1355 |
| 1457 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { | 1356 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsWithHighMaxBitrate) { |
| 1458 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 1357 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
| 1459 } | 1358 } |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1575 cricket::kParamValueEmpty)); | 1474 cricket::kParamValueEmpty)); |
| 1576 SetSendParameters(parameters); | 1475 SetSendParameters(parameters); |
| 1577 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); | 1476 EXPECT_EQ(kRtpHistoryMs, GetSendStreamConfig(kSsrc1).rtp.nack.rtp_history_ms); |
| 1578 | 1477 |
| 1579 EXPECT_TRUE(AddRecvStream(kSsrc2)); | 1478 EXPECT_TRUE(AddRecvStream(kSsrc2)); |
| 1580 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); | 1479 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc2).rtp.nack.rtp_history_ms); |
| 1581 EXPECT_TRUE(AddRecvStream(kSsrc3)); | 1480 EXPECT_TRUE(AddRecvStream(kSsrc3)); |
| 1582 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); | 1481 EXPECT_EQ(kRtpHistoryMs, GetRecvStreamConfig(kSsrc3).rtp.nack.rtp_history_ms); |
| 1583 } | 1482 } |
| 1584 | 1483 |
| 1585 // Test that without useinbandfec, Opus FEC is off. | |
| 1586 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecNoOpusFec) { | |
| 1587 EXPECT_TRUE(SetupSendStream()); | |
| 1588 cricket::AudioSendParameters parameters; | |
| 1589 parameters.codecs.push_back(kOpusCodec); | |
| 1590 SetSendParameters(parameters); | |
| 1591 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
| 1592 } | |
| 1593 | |
| 1594 // Test that with useinbandfec=0, Opus FEC is off. | |
| 1595 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusDisableFec) { | |
| 1596 EXPECT_TRUE(SetupSendStream()); | |
| 1597 cricket::AudioSendParameters parameters; | |
| 1598 parameters.codecs.push_back(kOpusCodec); | |
| 1599 parameters.codecs[0].bitrate = 0; | |
| 1600 parameters.codecs[0].params["useinbandfec"] = "0"; | |
| 1601 SetSendParameters(parameters); | |
| 1602 CheckSendCodec(kSsrc1, "opus", 1, 32000); | |
| 1603 } | |
| 1604 | |
| 1605 // Test that with useinbandfec=1, Opus FEC is on. | |
| 1606 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFec) { | |
| 1607 EXPECT_TRUE(SetupSendStream()); | |
| 1608 cricket::AudioSendParameters parameters; | |
| 1609 parameters.codecs.push_back(kOpusCodec); | |
| 1610 parameters.codecs[0].bitrate = 0; | |
| 1611 parameters.codecs[0].params["useinbandfec"] = "1"; | |
| 1612 SetSendParameters(parameters); | |
| 1613 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
| 1614 CheckSendCodec(kSsrc1, "opus", 1, 32000); | |
| 1615 } | |
| 1616 | |
| 1617 // Test that with useinbandfec=1, stereo=1, Opus FEC is on. | |
| 1618 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecOpusEnableFecStereo) { | |
| 1619 EXPECT_TRUE(SetupSendStream()); | |
| 1620 cricket::AudioSendParameters parameters; | |
| 1621 parameters.codecs.push_back(kOpusCodec); | |
| 1622 parameters.codecs[0].bitrate = 0; | |
| 1623 parameters.codecs[0].params["stereo"] = "1"; | |
| 1624 parameters.codecs[0].params["useinbandfec"] = "1"; | |
| 1625 SetSendParameters(parameters); | |
| 1626 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
| 1627 CheckSendCodec(kSsrc1, "opus", 2, 64000); | |
| 1628 } | |
| 1629 | |
| 1630 // Test that with non-Opus, codec FEC is off. | |
| 1631 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { | |
| 1632 EXPECT_TRUE(SetupSendStream()); | |
| 1633 cricket::AudioSendParameters parameters; | |
| 1634 parameters.codecs.push_back(kIsacCodec); | |
| 1635 SetSendParameters(parameters); | |
| 1636 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
| 1637 } | |
| 1638 | |
| 1639 // Test the with non-Opus, even if useinbandfec=1, FEC is off. | |
| 1640 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacWithParamNoFec) { | |
| 1641 EXPECT_TRUE(SetupSendStream()); | |
| 1642 cricket::AudioSendParameters parameters; | |
| 1643 parameters.codecs.push_back(kIsacCodec); | |
| 1644 parameters.codecs[0].params["useinbandfec"] = "1"; | |
| 1645 SetSendParameters(parameters); | |
| 1646 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
| 1647 } | |
| 1648 | |
| 1649 // Test that Opus FEC status can be changed. | |
| 1650 TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { | |
| 1651 EXPECT_TRUE(SetupSendStream()); | |
| 1652 cricket::AudioSendParameters parameters; | |
| 1653 parameters.codecs.push_back(kOpusCodec); | |
| 1654 SetSendParameters(parameters); | |
| 1655 EXPECT_FALSE(GetCodecFec(kSsrc1)); | |
| 1656 | |
| 1657 parameters.codecs[0].params["useinbandfec"] = "1"; | |
| 1658 SetSendParameters(parameters); | |
| 1659 EXPECT_TRUE(GetCodecFec(kSsrc1)); | |
| 1660 } | |
| 1661 | |
| 1662 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | 1484 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
| 1663 EXPECT_TRUE(SetupChannel()); | 1485 EXPECT_TRUE(SetupChannel()); |
| 1664 cricket::AudioSendParameters send_parameters; | 1486 cricket::AudioSendParameters send_parameters; |
| 1665 send_parameters.codecs.push_back(kOpusCodec); | 1487 send_parameters.codecs.push_back(kOpusCodec); |
| 1666 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | 1488 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
| 1667 SetSendParameters(send_parameters); | 1489 SetSendParameters(send_parameters); |
| 1668 | 1490 |
| 1669 cricket::AudioRecvParameters recv_parameters; | 1491 cricket::AudioRecvParameters recv_parameters; |
| 1670 recv_parameters.codecs.push_back(kIsacCodec); | 1492 recv_parameters.codecs.push_back(kIsacCodec); |
| 1671 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | 1493 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
| 1672 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 1494 EXPECT_TRUE(AddRecvStream(kSsrc1)); |
| 1673 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1495 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
| 1674 EXPECT_FALSE( | 1496 EXPECT_FALSE( |
| 1675 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1497 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
| 1676 | 1498 |
| 1677 send_parameters.codecs = engine_->send_codecs(); | 1499 send_parameters.codecs = engine_->send_codecs(); |
| 1678 SetSendParameters(send_parameters); | 1500 SetSendParameters(send_parameters); |
| 1679 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | 1501 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
| 1680 EXPECT_TRUE( | 1502 EXPECT_TRUE( |
| 1681 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | 1503 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
| 1682 } | 1504 } |
| 1683 | 1505 |
| 1684 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | |
| 1685 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | |
| 1686 EXPECT_TRUE(SetupSendStream()); | |
| 1687 cricket::AudioSendParameters parameters; | |
| 1688 parameters.codecs.push_back(kOpusCodec); | |
| 1689 parameters.codecs[0].bitrate = 0; | |
| 1690 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | |
| 1691 SetSendParameters(parameters); | |
| 1692 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1693 EXPECT_EQ(12000, GetCodecBitrate(kSsrc1)); | |
| 1694 | |
| 1695 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
| 1696 SetSendParameters(parameters); | |
| 1697 EXPECT_EQ(24000, GetCodecBitrate(kSsrc1)); | |
| 1698 } | |
| 1699 | |
| 1700 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode. | |
| 1701 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateMb) { | |
| 1702 EXPECT_TRUE(SetupSendStream()); | |
| 1703 cricket::AudioSendParameters parameters; | |
| 1704 parameters.codecs.push_back(kOpusCodec); | |
| 1705 parameters.codecs[0].bitrate = 0; | |
| 1706 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8001); | |
| 1707 SetSendParameters(parameters); | |
| 1708 EXPECT_EQ(8001, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1709 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | |
| 1710 | |
| 1711 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
| 1712 SetSendParameters(parameters); | |
| 1713 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | |
| 1714 } | |
| 1715 | |
| 1716 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode. | |
| 1717 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateWb) { | |
| 1718 EXPECT_TRUE(SetupSendStream()); | |
| 1719 cricket::AudioSendParameters parameters; | |
| 1720 parameters.codecs.push_back(kOpusCodec); | |
| 1721 parameters.codecs[0].bitrate = 0; | |
| 1722 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 12001); | |
| 1723 SetSendParameters(parameters); | |
| 1724 EXPECT_EQ(12001, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1725 EXPECT_EQ(20000, GetCodecBitrate(kSsrc1)); | |
| 1726 | |
| 1727 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
| 1728 SetSendParameters(parameters); | |
| 1729 EXPECT_EQ(40000, GetCodecBitrate(kSsrc1)); | |
| 1730 } | |
| 1731 | |
| 1732 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode. | |
| 1733 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateSwb) { | |
| 1734 EXPECT_TRUE(SetupSendStream()); | |
| 1735 cricket::AudioSendParameters parameters; | |
| 1736 parameters.codecs.push_back(kOpusCodec); | |
| 1737 parameters.codecs[0].bitrate = 0; | |
| 1738 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 16001); | |
| 1739 SetSendParameters(parameters); | |
| 1740 EXPECT_EQ(16001, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1741 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | |
| 1742 | |
| 1743 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
| 1744 SetSendParameters(parameters); | |
| 1745 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | |
| 1746 } | |
| 1747 | |
| 1748 // Test 24000 < maxplaybackrate triggers Opus full band mode. | |
| 1749 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateFb) { | |
| 1750 EXPECT_TRUE(SetupSendStream()); | |
| 1751 cricket::AudioSendParameters parameters; | |
| 1752 parameters.codecs.push_back(kOpusCodec); | |
| 1753 parameters.codecs[0].bitrate = 0; | |
| 1754 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 24001); | |
| 1755 SetSendParameters(parameters); | |
| 1756 EXPECT_EQ(24001, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1757 EXPECT_EQ(32000, GetCodecBitrate(kSsrc1)); | |
| 1758 | |
| 1759 parameters.codecs[0].SetParam(cricket::kCodecParamStereo, "1"); | |
| 1760 SetSendParameters(parameters); | |
| 1761 EXPECT_EQ(64000, GetCodecBitrate(kSsrc1)); | |
| 1762 } | |
| 1763 | |
| 1764 // Test Opus that without maxplaybackrate, default playback rate is used. | |
| 1765 TEST_F(WebRtcVoiceEngineTestFake, DefaultOpusMaxPlaybackRate) { | |
| 1766 EXPECT_TRUE(SetupSendStream()); | |
| 1767 cricket::AudioSendParameters parameters; | |
| 1768 parameters.codecs.push_back(kOpusCodec); | |
| 1769 SetSendParameters(parameters); | |
| 1770 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1771 } | |
| 1772 | |
| 1773 // Test the with non-Opus, maxplaybackrate has no effect. | |
| 1774 TEST_F(WebRtcVoiceEngineTestFake, SetNonOpusMaxPlaybackRate) { | |
| 1775 EXPECT_TRUE(SetupSendStream()); | |
| 1776 cricket::AudioSendParameters parameters; | |
| 1777 parameters.codecs.push_back(kIsacCodec); | |
| 1778 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 32000); | |
| 1779 SetSendParameters(parameters); | |
| 1780 EXPECT_EQ(0, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1781 } | |
| 1782 | |
| 1783 // Test maxplaybackrate can be set on two streams. | |
| 1784 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateOnTwoStreams) { | |
| 1785 EXPECT_TRUE(SetupSendStream()); | |
| 1786 cricket::AudioSendParameters parameters; | |
| 1787 parameters.codecs.push_back(kOpusCodec); | |
| 1788 SetSendParameters(parameters); | |
| 1789 EXPECT_EQ(48000, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1790 | |
| 1791 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | |
| 1792 SetSendParameters(parameters); | |
| 1793 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc1)); | |
| 1794 | |
| 1795 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc2)); | |
| 1796 EXPECT_EQ(8000, GetOpusMaxPlaybackRate(kSsrc2)); | |
| 1797 } | |
| 1798 | |
| 1799 // Test that with usedtx=0, Opus DTX is off. | |
| 1800 TEST_F(WebRtcVoiceEngineTestFake, DisableOpusDtxOnOpus) { | |
| 1801 EXPECT_TRUE(SetupSendStream()); | |
| 1802 cricket::AudioSendParameters parameters; | |
| 1803 parameters.codecs.push_back(kOpusCodec); | |
| 1804 parameters.codecs[0].params["usedtx"] = "0"; | |
| 1805 SetSendParameters(parameters); | |
| 1806 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | |
| 1807 } | |
| 1808 | |
| 1809 // Test that with usedtx=1, Opus DTX is on. | |
| 1810 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpus) { | |
| 1811 EXPECT_TRUE(SetupSendStream()); | |
| 1812 cricket::AudioSendParameters parameters; | |
| 1813 parameters.codecs.push_back(kOpusCodec); | |
| 1814 parameters.codecs[0].params["usedtx"] = "1"; | |
| 1815 SetSendParameters(parameters); | |
| 1816 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | |
| 1817 } | |
| 1818 | |
| 1819 // Test that usedtx=1 works with stereo Opus. | |
| 1820 TEST_F(WebRtcVoiceEngineTestFake, EnableOpusDtxOnOpusStereo) { | |
| 1821 EXPECT_TRUE(SetupSendStream()); | |
| 1822 cricket::AudioSendParameters parameters; | |
| 1823 parameters.codecs.push_back(kOpusCodec); | |
| 1824 parameters.codecs[0].params["usedtx"] = "1"; | |
| 1825 parameters.codecs[0].params["stereo"] = "1"; | |
| 1826 SetSendParameters(parameters); | |
| 1827 EXPECT_TRUE(GetOpusDtx(kSsrc1)); | |
| 1828 } | |
| 1829 | |
| 1830 // Test that usedtx=1 does not work with non Opus. | |
| 1831 TEST_F(WebRtcVoiceEngineTestFake, CannotEnableOpusDtxOnNonOpus) { | |
| 1832 EXPECT_TRUE(SetupSendStream()); | |
| 1833 cricket::AudioSendParameters parameters; | |
| 1834 parameters.codecs.push_back(kIsacCodec); | |
| 1835 parameters.codecs[0].params["usedtx"] = "1"; | |
| 1836 SetSendParameters(parameters); | |
| 1837 EXPECT_FALSE(GetOpusDtx(kSsrc1)); | |
| 1838 } | |
| 1839 | |
| 1840 // Test that we can switch back and forth between Opus and ISAC with CN. | 1506 // Test that we can switch back and forth between Opus and ISAC with CN. |
| 1841 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { | 1507 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsIsacOpusSwitching) { |
| 1842 EXPECT_TRUE(SetupSendStream()); | 1508 EXPECT_TRUE(SetupSendStream()); |
| 1843 | 1509 |
| 1844 cricket::AudioSendParameters opus_parameters; | 1510 cricket::AudioSendParameters opus_parameters; |
| 1845 opus_parameters.codecs.push_back(kOpusCodec); | 1511 opus_parameters.codecs.push_back(kOpusCodec); |
| 1846 SetSendParameters(opus_parameters); | 1512 SetSendParameters(opus_parameters); |
| 1847 { | 1513 { |
| 1848 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1514 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1849 EXPECT_EQ(111, gcodec.pltype); | 1515 EXPECT_EQ(111, spec.payload_type); |
| 1850 EXPECT_STREQ("opus", gcodec.plname); | 1516 EXPECT_STRCASEEQ("opus", spec.format.name.c_str()); |
| 1851 } | 1517 } |
| 1852 | 1518 |
| 1853 cricket::AudioSendParameters isac_parameters; | 1519 cricket::AudioSendParameters isac_parameters; |
| 1854 isac_parameters.codecs.push_back(kIsacCodec); | 1520 isac_parameters.codecs.push_back(kIsacCodec); |
| 1855 isac_parameters.codecs.push_back(kCn16000Codec); | 1521 isac_parameters.codecs.push_back(kCn16000Codec); |
| 1856 isac_parameters.codecs.push_back(kOpusCodec); | 1522 isac_parameters.codecs.push_back(kOpusCodec); |
| 1857 SetSendParameters(isac_parameters); | 1523 SetSendParameters(isac_parameters); |
| 1858 { | 1524 { |
| 1859 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1525 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1860 EXPECT_EQ(103, gcodec.pltype); | 1526 EXPECT_EQ(103, spec.payload_type); |
| 1861 EXPECT_STREQ("ISAC", gcodec.plname); | 1527 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
| 1862 } | 1528 } |
| 1863 | 1529 |
| 1864 SetSendParameters(opus_parameters); | 1530 SetSendParameters(opus_parameters); |
| 1865 { | 1531 { |
| 1866 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1532 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1867 EXPECT_EQ(111, gcodec.pltype); | 1533 EXPECT_EQ(111, spec.payload_type); |
| 1868 EXPECT_STREQ("opus", gcodec.plname); | 1534 EXPECT_STRCASEEQ("opus", spec.format.name.c_str()); |
| 1869 } | 1535 } |
| 1870 } | 1536 } |
| 1871 | 1537 |
| 1872 // Test that we handle various ways of specifying bitrate. | 1538 // Test that we handle various ways of specifying bitrate. |
| 1873 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { | 1539 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBitrate) { |
| 1874 EXPECT_TRUE(SetupSendStream()); | 1540 EXPECT_TRUE(SetupSendStream()); |
| 1875 cricket::AudioSendParameters parameters; | 1541 cricket::AudioSendParameters parameters; |
| 1876 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 | 1542 parameters.codecs.push_back(kIsacCodec); // bitrate == 32000 |
| 1877 SetSendParameters(parameters); | 1543 SetSendParameters(parameters); |
| 1878 { | 1544 { |
| 1879 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1545 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1880 EXPECT_EQ(103, gcodec.pltype); | 1546 EXPECT_EQ(103, spec.payload_type); |
| 1881 EXPECT_STREQ("ISAC", gcodec.plname); | 1547 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
| 1882 EXPECT_EQ(32000, gcodec.rate); | 1548 EXPECT_EQ(32000, spec.target_bitrate_bps); |
| 1883 } | 1549 } |
| 1884 | 1550 |
| 1885 parameters.codecs[0].bitrate = 0; // bitrate == default | 1551 parameters.codecs[0].bitrate = 0; // bitrate == default |
| 1886 SetSendParameters(parameters); | 1552 SetSendParameters(parameters); |
| 1887 { | 1553 { |
| 1888 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1554 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1889 EXPECT_EQ(103, gcodec.pltype); | 1555 EXPECT_EQ(103, spec.payload_type); |
| 1890 EXPECT_STREQ("ISAC", gcodec.plname); | 1556 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
| 1891 EXPECT_EQ(32000, gcodec.rate); | 1557 EXPECT_EQ(32000, spec.target_bitrate_bps); |
| 1892 } | 1558 } |
| 1893 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 | 1559 parameters.codecs[0].bitrate = 28000; // bitrate == 28000 |
| 1894 SetSendParameters(parameters); | 1560 SetSendParameters(parameters); |
| 1895 { | 1561 { |
| 1896 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1562 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1897 EXPECT_EQ(103, gcodec.pltype); | 1563 EXPECT_EQ(103, spec.payload_type); |
| 1898 EXPECT_STREQ("ISAC", gcodec.plname); | 1564 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
| 1899 EXPECT_EQ(28000, gcodec.rate); | 1565 EXPECT_EQ(28000, spec.target_bitrate_bps); |
| 1900 } | 1566 } |
| 1901 | 1567 |
| 1902 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 | 1568 parameters.codecs[0] = kPcmuCodec; // bitrate == 64000 |
| 1903 SetSendParameters(parameters); | 1569 SetSendParameters(parameters); |
| 1904 { | 1570 { |
| 1905 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1571 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1906 EXPECT_EQ(0, gcodec.pltype); | 1572 EXPECT_EQ(0, spec.payload_type); |
| 1907 EXPECT_STREQ("PCMU", gcodec.plname); | 1573 EXPECT_STRCASEEQ("PCMU", spec.format.name.c_str()); |
| 1908 EXPECT_EQ(64000, gcodec.rate); | 1574 EXPECT_EQ(64000, spec.target_bitrate_bps); |
| 1909 } | 1575 } |
| 1910 | 1576 |
| 1911 parameters.codecs[0].bitrate = 0; // bitrate == default | 1577 parameters.codecs[0].bitrate = 0; // bitrate == default |
| 1912 SetSendParameters(parameters); | 1578 SetSendParameters(parameters); |
| 1913 { | 1579 { |
| 1914 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1580 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1915 EXPECT_EQ(0, gcodec.pltype); | 1581 EXPECT_EQ(0, spec.payload_type); |
| 1916 EXPECT_STREQ("PCMU", gcodec.plname); | 1582 EXPECT_STREQ("PCMU", spec.format.name.c_str()); |
| 1917 EXPECT_EQ(64000, gcodec.rate); | 1583 EXPECT_EQ(64000, spec.target_bitrate_bps); |
| 1918 } | 1584 } |
| 1919 | 1585 |
| 1920 parameters.codecs[0] = kOpusCodec; | 1586 parameters.codecs[0] = kOpusCodec; |
| 1921 parameters.codecs[0].bitrate = 0; // bitrate == default | 1587 parameters.codecs[0].bitrate = 0; // bitrate == default |
| 1922 SetSendParameters(parameters); | 1588 SetSendParameters(parameters); |
| 1923 { | 1589 { |
| 1924 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1590 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1925 EXPECT_EQ(111, gcodec.pltype); | 1591 EXPECT_EQ(111, spec.payload_type); |
| 1926 EXPECT_STREQ("opus", gcodec.plname); | 1592 EXPECT_STREQ("opus", spec.format.name.c_str()); |
| 1927 EXPECT_EQ(32000, gcodec.rate); | 1593 EXPECT_EQ(32000, spec.target_bitrate_bps); |
| 1928 } | 1594 } |
| 1929 } | 1595 } |
| 1930 | 1596 |
| 1597 #if 0 | |
| 1931 // Test that we could set packet size specified in kCodecParamPTime. | 1598 // Test that we could set packet size specified in kCodecParamPTime. |
| 1932 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { | 1599 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsPTimeAsPacketSize) { |
| 1933 EXPECT_TRUE(SetupSendStream()); | 1600 EXPECT_TRUE(SetupSendStream()); |
| 1934 cricket::AudioSendParameters parameters; | 1601 cricket::AudioSendParameters parameters; |
| 1935 parameters.codecs.push_back(kOpusCodec); | 1602 parameters.codecs.push_back(kOpusCodec); |
| 1936 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1603 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
| 1937 SetSendParameters(parameters); | 1604 SetSendParameters(parameters); |
| 1938 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. | 1605 EXPECT_EQ(1920, GetCodecPacSize(kSsrc1)); // Opus gets 40ms. |
| 1939 | 1606 |
| 1940 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. | 1607 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 5); // Below range. |
| 1941 SetSendParameters(parameters); | 1608 SetSendParameters(parameters); |
| 1942 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. | 1609 EXPECT_EQ(480, GetCodecPacSize(kSsrc1)); // Opus gets 10ms. |
| 1943 | 1610 |
| 1944 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. | 1611 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 80); // Beyond range. |
| 1945 SetSendParameters(parameters); | 1612 SetSendParameters(parameters); |
| 1946 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. | 1613 EXPECT_EQ(2880, GetCodecPacSize(kSsrc1)); // Opus gets 60ms. |
| 1947 | 1614 |
| 1948 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. | 1615 parameters.codecs[0] = kIsacCodec; // Also try Isac, with unsupported size. |
| 1949 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. | 1616 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); // Within range. |
| 1950 SetSendParameters(parameters); | 1617 SetSendParameters(parameters); |
| 1951 EXPECT_EQ(480, GetCodecPacSize( | 1618 EXPECT_EQ(480, GetCodecPacSize( |
| 1952 kSsrc1)); // Isac gets 30ms as the next smallest value. | 1619 kSsrc1)); // Isac gets 30ms as the next smallest value. |
| 1953 | 1620 |
| 1954 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. | 1621 parameters.codecs[0] = kG722CodecSdp; // Try G722 @8kHz as negotiated in SDP. |
| 1955 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); | 1622 parameters.codecs[0].SetParam(cricket::kCodecParamPTime, 40); |
| 1956 SetSendParameters(parameters); | 1623 SetSendParameters(parameters); |
| 1957 EXPECT_EQ(640, GetCodecPacSize( | 1624 EXPECT_EQ(640, GetCodecPacSize( |
| 1958 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. | 1625 kSsrc1)); // G722 gets 40ms @16kHz as defined in VoE. |
| 1959 } | 1626 } |
| 1627 #endif | |
| 1960 | 1628 |
| 1961 // Test that we fail if no codecs are specified. | 1629 // Test that we fail if no codecs are specified. |
| 1962 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { | 1630 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsNoCodecs) { |
| 1963 EXPECT_TRUE(SetupSendStream()); | 1631 EXPECT_TRUE(SetupSendStream()); |
| 1964 cricket::AudioSendParameters parameters; | 1632 cricket::AudioSendParameters parameters; |
| 1965 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1633 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
| 1966 } | 1634 } |
| 1967 | 1635 |
| 1968 // Test that we can set send codecs even with telephone-event codec as the first | 1636 // Test that we can set send codecs even with telephone-event codec as the first |
| 1969 // one on the list. | 1637 // one on the list. |
| 1970 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { | 1638 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
| 1971 EXPECT_TRUE(SetupSendStream()); | 1639 EXPECT_TRUE(SetupSendStream()); |
| 1972 cricket::AudioSendParameters parameters; | 1640 cricket::AudioSendParameters parameters; |
| 1973 parameters.codecs.push_back(kTelephoneEventCodec1); | 1641 parameters.codecs.push_back(kTelephoneEventCodec1); |
| 1974 parameters.codecs.push_back(kIsacCodec); | 1642 parameters.codecs.push_back(kIsacCodec); |
| 1975 parameters.codecs.push_back(kPcmuCodec); | 1643 parameters.codecs.push_back(kPcmuCodec); |
| 1976 parameters.codecs[0].id = 98; // DTMF | 1644 parameters.codecs[0].id = 98; // DTMF |
| 1977 parameters.codecs[1].id = 96; | 1645 parameters.codecs[1].id = 96; |
| 1978 SetSendParameters(parameters); | 1646 SetSendParameters(parameters); |
| 1979 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1647 const auto& spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 1980 EXPECT_EQ(96, gcodec.pltype); | 1648 EXPECT_EQ(96, spec.payload_type); |
| 1981 EXPECT_STREQ("ISAC", gcodec.plname); | 1649 EXPECT_STRCASEEQ("ISAC", spec.format.name.c_str()); |
| 1982 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1650 EXPECT_TRUE(channel_->CanInsertDtmf()); |
| 1983 } | 1651 } |
| 1984 | 1652 |
| 1985 // Test that payload type range is limited for telephone-event codec. | 1653 // Test that payload type range is limited for telephone-event codec. |
| 1986 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { | 1654 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
| 1987 EXPECT_TRUE(SetupSendStream()); | 1655 EXPECT_TRUE(SetupSendStream()); |
| 1988 cricket::AudioSendParameters parameters; | 1656 cricket::AudioSendParameters parameters; |
| 1989 parameters.codecs.push_back(kTelephoneEventCodec2); | 1657 parameters.codecs.push_back(kTelephoneEventCodec2); |
| 1990 parameters.codecs.push_back(kIsacCodec); | 1658 parameters.codecs.push_back(kIsacCodec); |
| 1991 parameters.codecs[0].id = 0; // DTMF | 1659 parameters.codecs[0].id = 0; // DTMF |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 2008 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { | 1676 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNOnTop) { |
| 2009 EXPECT_TRUE(SetupSendStream()); | 1677 EXPECT_TRUE(SetupSendStream()); |
| 2010 cricket::AudioSendParameters parameters; | 1678 cricket::AudioSendParameters parameters; |
| 2011 parameters.codecs.push_back(kCn16000Codec); | 1679 parameters.codecs.push_back(kCn16000Codec); |
| 2012 parameters.codecs.push_back(kIsacCodec); | 1680 parameters.codecs.push_back(kIsacCodec); |
| 2013 parameters.codecs.push_back(kPcmuCodec); | 1681 parameters.codecs.push_back(kPcmuCodec); |
| 2014 parameters.codecs[0].id = 98; // wideband CN | 1682 parameters.codecs[0].id = 98; // wideband CN |
| 2015 parameters.codecs[1].id = 96; | 1683 parameters.codecs[1].id = 96; |
| 2016 SetSendParameters(parameters); | 1684 SetSendParameters(parameters); |
| 2017 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1685 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2018 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1686 EXPECT_EQ(96, send_codec_spec.payload_type); |
| 2019 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1687 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2020 EXPECT_EQ(98, send_codec_spec.cng_payload_type); | 1688 EXPECT_EQ(98, send_codec_spec.cng_payload_type); |
| 2021 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 1689 // EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
| 2022 } | 1690 } |
| 2023 | 1691 |
| 2024 // Test that we set VAD and DTMF types correctly as caller. | 1692 // Test that we set VAD and DTMF types correctly as caller. |
| 2025 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { | 1693 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
| 2026 EXPECT_TRUE(SetupSendStream()); | 1694 EXPECT_TRUE(SetupSendStream()); |
| 2027 cricket::AudioSendParameters parameters; | 1695 cricket::AudioSendParameters parameters; |
| 2028 parameters.codecs.push_back(kIsacCodec); | 1696 parameters.codecs.push_back(kIsacCodec); |
| 2029 parameters.codecs.push_back(kPcmuCodec); | 1697 parameters.codecs.push_back(kPcmuCodec); |
| 2030 // TODO(juberti): cn 32000 | 1698 // TODO(juberti): cn 32000 |
| 2031 parameters.codecs.push_back(kCn16000Codec); | 1699 parameters.codecs.push_back(kCn16000Codec); |
| 2032 parameters.codecs.push_back(kCn8000Codec); | 1700 parameters.codecs.push_back(kCn8000Codec); |
| 2033 parameters.codecs.push_back(kTelephoneEventCodec1); | 1701 parameters.codecs.push_back(kTelephoneEventCodec1); |
| 2034 parameters.codecs[0].id = 96; | 1702 parameters.codecs[0].id = 96; |
| 2035 parameters.codecs[2].id = 97; // wideband CN | 1703 parameters.codecs[2].id = 97; // wideband CN |
| 2036 parameters.codecs[4].id = 98; // DTMF | 1704 parameters.codecs[4].id = 98; // DTMF |
| 2037 SetSendParameters(parameters); | 1705 SetSendParameters(parameters); |
| 2038 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1706 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2039 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1707 EXPECT_EQ(96, send_codec_spec.payload_type); |
| 2040 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1708 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2041 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1709 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2042 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
| 2043 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1710 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
| 2044 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2045 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1711 EXPECT_TRUE(channel_->CanInsertDtmf()); |
| 2046 } | 1712 } |
| 2047 | 1713 |
| 2048 // Test that we set VAD and DTMF types correctly as callee. | 1714 // Test that we set VAD and DTMF types correctly as callee. |
| 2049 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 1715 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
| 2050 EXPECT_TRUE(SetupChannel()); | 1716 EXPECT_TRUE(SetupChannel()); |
| 2051 cricket::AudioSendParameters parameters; | 1717 cricket::AudioSendParameters parameters; |
| 2052 parameters.codecs.push_back(kIsacCodec); | 1718 parameters.codecs.push_back(kIsacCodec); |
| 2053 parameters.codecs.push_back(kPcmuCodec); | 1719 parameters.codecs.push_back(kPcmuCodec); |
| 2054 // TODO(juberti): cn 32000 | 1720 // TODO(juberti): cn 32000 |
| 2055 parameters.codecs.push_back(kCn16000Codec); | 1721 parameters.codecs.push_back(kCn16000Codec); |
| 2056 parameters.codecs.push_back(kCn8000Codec); | 1722 parameters.codecs.push_back(kCn8000Codec); |
| 2057 parameters.codecs.push_back(kTelephoneEventCodec2); | 1723 parameters.codecs.push_back(kTelephoneEventCodec2); |
| 2058 parameters.codecs[0].id = 96; | 1724 parameters.codecs[0].id = 96; |
| 2059 parameters.codecs[2].id = 97; // wideband CN | 1725 parameters.codecs[2].id = 97; // wideband CN |
| 2060 parameters.codecs[4].id = 98; // DTMF | 1726 parameters.codecs[4].id = 98; // DTMF |
| 2061 SetSendParameters(parameters); | 1727 SetSendParameters(parameters); |
| 2062 EXPECT_TRUE(channel_->AddSendStream( | 1728 EXPECT_TRUE(channel_->AddSendStream( |
| 2063 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1729 cricket::StreamParams::CreateLegacy(kSsrc1))); |
| 2064 | 1730 |
| 2065 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1731 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2066 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1732 EXPECT_EQ(96, send_codec_spec.payload_type); |
| 2067 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1733 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2068 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1734 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2069 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
| 2070 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1735 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
| 2071 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2072 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1736 EXPECT_TRUE(channel_->CanInsertDtmf()); |
| 2073 } | 1737 } |
| 2074 | 1738 |
| 2075 // Test that we only apply VAD if we have a CN codec that matches the | 1739 // Test that we only apply VAD if we have a CN codec that matches the |
| 2076 // send codec clockrate. | 1740 // send codec clockrate. |
| 2077 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { | 1741 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNNoMatch) { |
| 2078 EXPECT_TRUE(SetupSendStream()); | 1742 EXPECT_TRUE(SetupSendStream()); |
| 2079 cricket::AudioSendParameters parameters; | 1743 cricket::AudioSendParameters parameters; |
| 2080 // Set ISAC(16K) and CN(16K). VAD should be activated. | 1744 // Set ISAC(16K) and CN(16K). VAD should be activated. |
| 2081 parameters.codecs.push_back(kIsacCodec); | 1745 parameters.codecs.push_back(kIsacCodec); |
| 2082 parameters.codecs.push_back(kCn16000Codec); | 1746 parameters.codecs.push_back(kCn16000Codec); |
| 2083 parameters.codecs[1].id = 97; | 1747 parameters.codecs[1].id = 97; |
| 2084 SetSendParameters(parameters); | 1748 SetSendParameters(parameters); |
| 2085 { | 1749 { |
| 2086 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1750 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2087 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1751 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2088 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1752 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2089 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
| 2090 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1753 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
| 2091 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2092 } | 1754 } |
| 2093 // Set PCMU(8K) and CN(16K). VAD should not be activated. | 1755 // Set PCMU(8K) and CN(16K). VAD should not be activated. |
| 2094 parameters.codecs[0] = kPcmuCodec; | 1756 parameters.codecs[0] = kPcmuCodec; |
| 2095 SetSendParameters(parameters); | 1757 SetSendParameters(parameters); |
| 2096 { | 1758 { |
| 2097 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1759 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2098 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1760 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
| 2099 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1761 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
| 2100 } | 1762 } |
| 2101 // Set PCMU(8K) and CN(8K). VAD should be activated. | 1763 // Set PCMU(8K) and CN(8K). VAD should be activated. |
| 2102 parameters.codecs[1] = kCn8000Codec; | 1764 parameters.codecs[1] = kCn8000Codec; |
| 2103 SetSendParameters(parameters); | 1765 SetSendParameters(parameters); |
| 2104 { | 1766 { |
| 2105 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1767 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2106 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1768 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
| 2107 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1769 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2108 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
| 2109 EXPECT_EQ(13, send_codec_spec.cng_payload_type); | 1770 EXPECT_EQ(13, send_codec_spec.cng_payload_type); |
| 2110 EXPECT_EQ(webrtc::kFreq8000Hz, send_codec_spec.cng_plfreq); | |
| 2111 } | 1771 } |
| 2112 // Set ISAC(16K) and CN(8K). VAD should not be activated. | 1772 // Set ISAC(16K) and CN(8K). VAD should not be activated. |
| 2113 parameters.codecs[0] = kIsacCodec; | 1773 parameters.codecs[0] = kIsacCodec; |
| 2114 SetSendParameters(parameters); | 1774 SetSendParameters(parameters); |
| 2115 { | 1775 { |
| 2116 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1776 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2117 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1777 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2118 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1778 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
| 2119 } | 1779 } |
| 2120 } | 1780 } |
| 2121 | 1781 |
| 2122 // Test that we perform case-insensitive matching of codec names. | 1782 // Test that we perform case-insensitive matching of codec names. |
| 2123 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { | 1783 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
| 2124 EXPECT_TRUE(SetupSendStream()); | 1784 EXPECT_TRUE(SetupSendStream()); |
| 2125 cricket::AudioSendParameters parameters; | 1785 cricket::AudioSendParameters parameters; |
| 2126 parameters.codecs.push_back(kIsacCodec); | 1786 parameters.codecs.push_back(kIsacCodec); |
| 2127 parameters.codecs.push_back(kPcmuCodec); | 1787 parameters.codecs.push_back(kPcmuCodec); |
| 2128 parameters.codecs.push_back(kCn16000Codec); | 1788 parameters.codecs.push_back(kCn16000Codec); |
| 2129 parameters.codecs.push_back(kCn8000Codec); | 1789 parameters.codecs.push_back(kCn8000Codec); |
| 2130 parameters.codecs.push_back(kTelephoneEventCodec1); | 1790 parameters.codecs.push_back(kTelephoneEventCodec1); |
| 2131 parameters.codecs[0].name = "iSaC"; | 1791 parameters.codecs[0].name = "iSaC"; |
| 2132 parameters.codecs[0].id = 96; | 1792 parameters.codecs[0].id = 96; |
| 2133 parameters.codecs[2].id = 97; // wideband CN | 1793 parameters.codecs[2].id = 97; // wideband CN |
| 2134 parameters.codecs[4].id = 98; // DTMF | 1794 parameters.codecs[4].id = 98; // DTMF |
| 2135 SetSendParameters(parameters); | 1795 SetSendParameters(parameters); |
| 2136 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1796 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
| 2137 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1797 EXPECT_EQ(96, send_codec_spec.payload_type); |
| 2138 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1798 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2139 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1799 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2140 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | |
| 2141 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1800 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
| 2142 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2143 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1801 EXPECT_TRUE(channel_->CanInsertDtmf()); |
| 2144 } | 1802 } |
| 2145 | 1803 |
| 2146 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { | 1804 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
| 2147 public: | 1805 public: |
| 2148 WebRtcVoiceEngineWithSendSideBweTest() | 1806 WebRtcVoiceEngineWithSendSideBweTest() |
| 2149 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} | 1807 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} |
| 2150 }; | 1808 }; |
| 2151 | 1809 |
| 2152 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, | 1810 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2291 parameters.codecs.push_back(kIsacCodec); | 1949 parameters.codecs.push_back(kIsacCodec); |
| 2292 parameters.codecs.push_back(kCn16000Codec); | 1950 parameters.codecs.push_back(kCn16000Codec); |
| 2293 parameters.codecs[1].id = 97; | 1951 parameters.codecs[1].id = 97; |
| 2294 SetSendParameters(parameters); | 1952 SetSendParameters(parameters); |
| 2295 | 1953 |
| 2296 // Verify ISAC and VAD are corrected configured on all send channels. | 1954 // Verify ISAC and VAD are corrected configured on all send channels. |
| 2297 for (uint32_t ssrc : kSsrcs4) { | 1955 for (uint32_t ssrc : kSsrcs4) { |
| 2298 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); | 1956 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); |
| 2299 const auto& send_codec_spec = | 1957 const auto& send_codec_spec = |
| 2300 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; | 1958 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; |
| 2301 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1959 EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str()); |
| 2302 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1960 EXPECT_EQ(1, send_codec_spec.format.num_channels); |
| 2303 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | |
| 2304 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1961 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
| 2305 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2306 } | 1962 } |
| 2307 | 1963 |
| 2308 // Change to PCMU(8K) and CN(16K). | 1964 // Change to PCMU(8K) and CN(16K). |
| 2309 parameters.codecs[0] = kPcmuCodec; | 1965 parameters.codecs[0] = kPcmuCodec; |
| 2310 SetSendParameters(parameters); | 1966 SetSendParameters(parameters); |
| 2311 for (uint32_t ssrc : kSsrcs4) { | 1967 for (uint32_t ssrc : kSsrcs4) { |
| 2312 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); | 1968 ASSERT_TRUE(call_.GetAudioSendStream(ssrc) != nullptr); |
| 2313 const auto& send_codec_spec = | 1969 const auto& send_codec_spec = |
| 2314 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; | 1970 call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec; |
| 2315 EXPECT_STREQ("PCMU", send_codec_spec.codec_inst.plname); | 1971 EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str()); |
| 2316 EXPECT_NE(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1972 EXPECT_EQ(-1, send_codec_spec.cng_payload_type); |
| 2317 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | |
| 2318 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | |
| 2319 } | 1973 } |
| 2320 } | 1974 } |
| 2321 | 1975 |
| 2322 // Test we can SetSend on all send streams correctly. | 1976 // Test we can SetSend on all send streams correctly. |
| 2323 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { | 1977 TEST_F(WebRtcVoiceEngineTestFake, SetSendWithMultipleSendStreams) { |
| 2324 SetupForMultiSendStream(); | 1978 SetupForMultiSendStream(); |
| 2325 | 1979 |
| 2326 // Create the send channels and they should be a "not sending" date. | 1980 // Create the send channels and they should be a "not sending" date. |
| 2327 for (uint32_t ssrc : kSsrcs4) { | 1981 for (uint32_t ssrc : kSsrcs4) { |
| 2328 EXPECT_TRUE(channel_->AddSendStream( | 1982 EXPECT_TRUE(channel_->AddSendStream( |
| (...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3547 delete channel; | 3201 delete channel; |
| 3548 } | 3202 } |
| 3549 } | 3203 } |
| 3550 | 3204 |
| 3551 // Tests that the library is configured with the codecs we want. | 3205 // Tests that the library is configured with the codecs we want. |
| 3552 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { | 3206 TEST(WebRtcVoiceEngineTest, HasCorrectCodecs) { |
| 3553 // TODO(ossu): These tests should move into a future "builtin audio codecs" | 3207 // TODO(ossu): These tests should move into a future "builtin audio codecs" |
| 3554 // module. | 3208 // module. |
| 3555 | 3209 |
| 3556 // Check codecs by name. | 3210 // Check codecs by name. |
| 3557 #ifdef WEBRTC_CODEC_OPUS | 3211 #ifdef WEBRTC_CODEC_OPUS |
|
ossu
2017/03/20 18:19:48
Turns out these #ifdef'ed tests never activated, b
| |
| 3558 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3212 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3559 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr)); | 3213 cricket::AudioCodec(96, "OPUS", 48000, 0, 2), nullptr)); |
| 3560 #endif | 3214 #endif |
| 3561 #if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) | 3215 #if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) |
| 3562 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3216 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3563 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr)); | 3217 cricket::AudioCodec(96, "ISAC", 16000, 0, 1), nullptr)); |
| 3564 #endif | 3218 #endif |
| 3565 #if (defined(WEBRTC_CODEC_ISAC)) | 3219 #if (defined(WEBRTC_CODEC_ISAC)) |
| 3566 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3220 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3567 cricket::AudioCodec(96, "ISAC", 32000, 0, 1), nullptr)); | 3221 cricket::AudioCodec(96, "ISAC", 32000, 0, 1), nullptr)); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3608 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); | 3262 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); |
| 3609 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3263 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3610 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); | 3264 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); |
| 3611 | 3265 |
| 3612 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. | 3266 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. |
| 3613 // TODO(ossu): Why are the payload types of codecs with non-static payload | 3267 // TODO(ossu): Why are the payload types of codecs with non-static payload |
| 3614 // type assignments checked here? It shouldn't really matter. | 3268 // type assignments checked here? It shouldn't really matter. |
| 3615 cricket::WebRtcVoiceEngine engine( | 3269 cricket::WebRtcVoiceEngine engine( |
| 3616 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); | 3270 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr); |
| 3617 for (const cricket::AudioCodec& codec : engine.send_codecs()) { | 3271 for (const cricket::AudioCodec& codec : engine.send_codecs()) { |
| 3618 if (codec.name == "CN" && codec.clockrate == 16000) { | 3272 auto is_codec = [&codec](const char* name, int clockrate = 0) { |
| 3273 return STR_CASE_CMP(codec.name.c_str(), name) == 0 && | |
| 3274 (clockrate == 0 || codec.clockrate == clockrate); | |
| 3275 }; | |
| 3276 if (is_codec("CN", 16000)) { | |
| 3619 EXPECT_EQ(105, codec.id); | 3277 EXPECT_EQ(105, codec.id); |
| 3620 } else if (codec.name == "CN" && codec.clockrate == 32000) { | 3278 } else if (is_codec("CN", 32000)) { |
| 3621 EXPECT_EQ(106, codec.id); | 3279 EXPECT_EQ(106, codec.id); |
| 3622 } else if (codec.name == "ISAC" && codec.clockrate == 16000) { | 3280 } else if (is_codec("ISAC", 16000)) { |
| 3623 EXPECT_EQ(103, codec.id); | 3281 EXPECT_EQ(103, codec.id); |
| 3624 } else if (codec.name == "ISAC" && codec.clockrate == 32000) { | 3282 } else if (is_codec("ISAC", 32000)) { |
| 3625 EXPECT_EQ(104, codec.id); | 3283 EXPECT_EQ(104, codec.id); |
| 3626 } else if (codec.name == "G722" && codec.clockrate == 8000) { | 3284 } else if (is_codec("G722", 8000)) { |
| 3627 EXPECT_EQ(9, codec.id); | 3285 EXPECT_EQ(9, codec.id); |
| 3628 } else if (codec.name == "telephone-event" && codec.clockrate == 8000) { | 3286 } else if (is_codec("telephone-event", 8000)) { |
| 3629 EXPECT_EQ(126, codec.id); | 3287 EXPECT_EQ(126, codec.id); |
| 3630 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. | 3288 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. |
| 3631 // Remove these checks once both send and receive side assigns payload types | 3289 // Remove these checks once both send and receive side assigns payload types |
| 3632 // dynamically. | 3290 // dynamically. |
| 3633 } else if (codec.name == "telephone-event" && codec.clockrate == 16000) { | 3291 } else if (is_codec("telephone-event", 16000)) { |
| 3634 EXPECT_EQ(113, codec.id); | 3292 EXPECT_EQ(113, codec.id); |
| 3635 } else if (codec.name == "telephone-event" && codec.clockrate == 32000) { | 3293 } else if (is_codec("telephone-event", 32000)) { |
| 3636 EXPECT_EQ(112, codec.id); | 3294 EXPECT_EQ(112, codec.id); |
| 3637 } else if (codec.name == "telephone-event" && codec.clockrate == 48000) { | 3295 } else if (is_codec("telephone-event", 48000)) { |
| 3638 EXPECT_EQ(110, codec.id); | 3296 EXPECT_EQ(110, codec.id); |
| 3639 } else if (codec.name == "opus") { | 3297 } else if (is_codec("opus")) { |
| 3640 EXPECT_EQ(111, codec.id); | 3298 EXPECT_EQ(111, codec.id); |
| 3641 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); | 3299 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); |
| 3642 EXPECT_EQ("10", codec.params.find("minptime")->second); | 3300 EXPECT_EQ("10", codec.params.find("minptime")->second); |
| 3643 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); | 3301 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); |
| 3644 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); | 3302 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); |
| 3645 } | 3303 } |
| 3646 } | 3304 } |
| 3647 } | 3305 } |
| 3648 | 3306 |
| 3649 // Tests that VoE supports at least 32 channels | 3307 // Tests that VoE supports at least 32 channels |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3761 // Without this cast, the comparison turned unsigned and, thus, failed for -1. | 3419 // Without this cast, the comparison turned unsigned and, thus, failed for -1. |
| 3762 const int num_specs = static_cast<int>(specs.size()); | 3420 const int num_specs = static_cast<int>(specs.size()); |
| 3763 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); | 3421 EXPECT_GE(find_codec({"cn", 8000, 1}), num_specs); |
| 3764 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); | 3422 EXPECT_GE(find_codec({"cn", 16000, 1}), num_specs); |
| 3765 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); | 3423 EXPECT_EQ(find_codec({"cn", 32000, 1}), -1); |
| 3766 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); | 3424 EXPECT_GE(find_codec({"telephone-event", 8000, 1}), num_specs); |
| 3767 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); | 3425 EXPECT_GE(find_codec({"telephone-event", 16000, 1}), num_specs); |
| 3768 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); | 3426 EXPECT_GE(find_codec({"telephone-event", 32000, 1}), num_specs); |
| 3769 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); | 3427 EXPECT_GE(find_codec({"telephone-event", 48000, 1}), num_specs); |
| 3770 } | 3428 } |
| OLD | NEW |