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 24 matching lines...) Expand all Loading... |
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, 64000, 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 kTelephoneEventCodec(106, | 45 const cricket::AudioCodec |
46 "telephone-event", | 46 kTelephoneEventCodec1(106, "telephone-event", 8000, 0, 1); |
47 8000, | 47 const cricket::AudioCodec |
48 0, | 48 kTelephoneEventCodec2(107, "telephone-event", 32000, 0, 1); |
49 1); | 49 |
50 const uint32_t kSsrc1 = 0x99; | 50 const uint32_t kSsrc1 = 0x99; |
51 const uint32_t kSsrc2 = 2; | 51 const uint32_t kSsrc2 = 2; |
52 const uint32_t kSsrc3 = 3; | 52 const uint32_t kSsrc3 = 3; |
53 const uint32_t kSsrc4 = 0x42; | 53 const uint32_t kSsrc4 = 0x42; |
54 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; | 54 const uint32_t kSsrcs4[] = { 1, 2, 3, 4 }; |
55 | 55 |
56 constexpr int kRtpHistoryMs = 5000; | 56 constexpr int kRtpHistoryMs = 5000; |
57 | 57 |
58 class FakeVoEWrapper : public cricket::VoEWrapper { | 58 class FakeVoEWrapper : public cricket::VoEWrapper { |
59 public: | 59 public: |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 // send stream. | 228 // send stream. |
229 EXPECT_TRUE(channel_->AddSendStream( | 229 EXPECT_TRUE(channel_->AddSendStream( |
230 cricket::StreamParams::CreateLegacy(kSsrc1))); | 230 cricket::StreamParams::CreateLegacy(kSsrc1))); |
231 } | 231 } |
232 | 232 |
233 // Test we can only InsertDtmf when the other side supports telephone-event. | 233 // Test we can only InsertDtmf when the other side supports telephone-event. |
234 SetSendParameters(send_parameters_); | 234 SetSendParameters(send_parameters_); |
235 SetSend(true); | 235 SetSend(true); |
236 EXPECT_FALSE(channel_->CanInsertDtmf()); | 236 EXPECT_FALSE(channel_->CanInsertDtmf()); |
237 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); | 237 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 1, 111)); |
238 send_parameters_.codecs.push_back(kTelephoneEventCodec); | 238 send_parameters_.codecs.push_back(kTelephoneEventCodec1); |
239 SetSendParameters(send_parameters_); | 239 SetSendParameters(send_parameters_); |
240 EXPECT_TRUE(channel_->CanInsertDtmf()); | 240 EXPECT_TRUE(channel_->CanInsertDtmf()); |
241 | 241 |
242 if (!caller) { | 242 if (!caller) { |
243 // If this is callee, there's no active send channel yet. | 243 // If this is callee, there's no active send channel yet. |
244 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); | 244 EXPECT_FALSE(channel_->InsertDtmf(ssrc, 2, 123)); |
245 EXPECT_TRUE(channel_->AddSendStream( | 245 EXPECT_TRUE(channel_->AddSendStream( |
246 cricket::StreamParams::CreateLegacy(kSsrc1))); | 246 cricket::StreamParams::CreateLegacy(kSsrc1))); |
247 } | 247 } |
248 | 248 |
249 // Check we fail if the ssrc is invalid. | 249 // Check we fail if the ssrc is invalid. |
250 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); | 250 EXPECT_FALSE(channel_->InsertDtmf(-1, 1, 111)); |
251 | 251 |
252 // Test send. | 252 // Test send. |
253 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = | 253 cricket::FakeAudioSendStream::TelephoneEvent telephone_event = |
254 GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 254 GetSendStream(kSsrc1).GetLatestTelephoneEvent(); |
255 EXPECT_EQ(-1, telephone_event.payload_type); | 255 EXPECT_EQ(-1, telephone_event.payload_type); |
256 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); | 256 EXPECT_TRUE(channel_->InsertDtmf(ssrc, 2, 123)); |
257 telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); | 257 telephone_event = GetSendStream(kSsrc1).GetLatestTelephoneEvent(); |
258 EXPECT_EQ(kTelephoneEventCodec.id, telephone_event.payload_type); | 258 EXPECT_EQ(kTelephoneEventCodec1.id, telephone_event.payload_type); |
259 EXPECT_EQ(2, telephone_event.event_code); | 259 EXPECT_EQ(2, telephone_event.event_code); |
260 EXPECT_EQ(123, telephone_event.duration_ms); | 260 EXPECT_EQ(123, telephone_event.duration_ms); |
261 } | 261 } |
262 | 262 |
263 // Test that send bandwidth is set correctly. | 263 // Test that send bandwidth is set correctly. |
264 // |codec| is the codec under test. | 264 // |codec| is the codec under test. |
265 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). | 265 // |max_bitrate| is a parameter to set to SetMaxSendBandwidth(). |
266 // |expected_result| is the expected result from SetMaxSendBandwidth(). | 266 // |expected_result| is the expected result from SetMaxSendBandwidth(). |
267 // |expected_bitrate| is the expected audio bitrate afterward. | 267 // |expected_bitrate| is the expected audio bitrate afterward. |
268 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, | 268 void TestMaxSendBandwidth(const cricket::AudioCodec& codec, |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 // Tests that we can find codecs by name or id, and that we interpret the | 627 // Tests that we can find codecs by name or id, and that we interpret the |
628 // clockrate and bitrate fields properly. | 628 // clockrate and bitrate fields properly. |
629 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { | 629 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { |
630 cricket::AudioCodec codec; | 630 cricket::AudioCodec codec; |
631 webrtc::CodecInst codec_inst; | 631 webrtc::CodecInst codec_inst; |
632 // Find PCMU with explicit clockrate and bitrate. | 632 // Find PCMU with explicit clockrate and bitrate. |
633 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); | 633 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); |
634 // Find ISAC with explicit clockrate and 0 bitrate. | 634 // Find ISAC with explicit clockrate and 0 bitrate. |
635 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); | 635 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); |
636 // Find telephone-event with explicit clockrate and 0 bitrate. | 636 // Find telephone-event with explicit clockrate and 0 bitrate. |
637 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec, | 637 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec1, |
| 638 &codec_inst)); |
| 639 // Find telephone-event with explicit clockrate and 0 bitrate. |
| 640 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kTelephoneEventCodec2, |
638 &codec_inst)); | 641 &codec_inst)); |
639 // Find ISAC with a different payload id. | 642 // Find ISAC with a different payload id. |
640 codec = kIsacCodec; | 643 codec = kIsacCodec; |
641 codec.id = 127; | 644 codec.id = 127; |
642 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | 645 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); |
643 EXPECT_EQ(codec.id, codec_inst.pltype); | 646 EXPECT_EQ(codec.id, codec_inst.pltype); |
644 // Find PCMU with a 0 clockrate. | 647 // Find PCMU with a 0 clockrate. |
645 codec = kPcmuCodec; | 648 codec = kPcmuCodec; |
646 codec.clockrate = 0; | 649 codec.clockrate = 0; |
647 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); | 650 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(codec, &codec_inst)); |
(...skipping 12 matching lines...) Expand all Loading... |
660 EXPECT_EQ(codec.id, codec_inst.pltype); | 663 EXPECT_EQ(codec.id, codec_inst.pltype); |
661 EXPECT_EQ(32000, codec_inst.rate); | 664 EXPECT_EQ(32000, codec_inst.rate); |
662 } | 665 } |
663 | 666 |
664 // Test that we set our inbound codecs properly, including changing PT. | 667 // Test that we set our inbound codecs properly, including changing PT. |
665 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { | 668 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecs) { |
666 EXPECT_TRUE(SetupChannel()); | 669 EXPECT_TRUE(SetupChannel()); |
667 cricket::AudioRecvParameters parameters; | 670 cricket::AudioRecvParameters parameters; |
668 parameters.codecs.push_back(kIsacCodec); | 671 parameters.codecs.push_back(kIsacCodec); |
669 parameters.codecs.push_back(kPcmuCodec); | 672 parameters.codecs.push_back(kPcmuCodec); |
670 parameters.codecs.push_back(kTelephoneEventCodec); | 673 parameters.codecs.push_back(kTelephoneEventCodec1); |
671 parameters.codecs[0].id = 106; // collide with existing telephone-event | 674 parameters.codecs.push_back(kTelephoneEventCodec2); |
| 675 parameters.codecs[0].id = 106; // collide with existing CN 32k |
672 parameters.codecs[2].id = 126; | 676 parameters.codecs[2].id = 126; |
673 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 677 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
674 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 678 EXPECT_TRUE(AddRecvStream(kSsrc1)); |
675 int channel_num = voe_.GetLastChannel(); | 679 int channel_num = voe_.GetLastChannel(); |
| 680 |
676 webrtc::CodecInst gcodec; | 681 webrtc::CodecInst gcodec; |
677 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 682 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
678 gcodec.plfreq = 16000; | 683 gcodec.plfreq = 16000; |
679 gcodec.channels = 1; | 684 gcodec.channels = 1; |
680 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 685 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
681 EXPECT_EQ(106, gcodec.pltype); | 686 EXPECT_EQ(106, gcodec.pltype); |
682 EXPECT_STREQ("ISAC", gcodec.plname); | 687 EXPECT_STREQ("ISAC", gcodec.plname); |
| 688 |
683 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); | 689 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); |
684 gcodec.plfreq = 8000; | 690 gcodec.plfreq = 8000; |
685 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); | 691 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
686 EXPECT_EQ(126, gcodec.pltype); | 692 EXPECT_EQ(126, gcodec.pltype); |
687 EXPECT_STREQ("telephone-event", gcodec.plname); | 693 EXPECT_STREQ("telephone-event", gcodec.plname); |
| 694 |
| 695 gcodec.plfreq = 32000; |
| 696 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num, gcodec)); |
| 697 EXPECT_EQ(107, gcodec.pltype); |
| 698 EXPECT_STREQ("telephone-event", gcodec.plname); |
688 } | 699 } |
689 | 700 |
690 // Test that we fail to set an unknown inbound codec. | 701 // Test that we fail to set an unknown inbound codec. |
691 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) { | 702 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) { |
692 EXPECT_TRUE(SetupChannel()); | 703 EXPECT_TRUE(SetupChannel()); |
693 cricket::AudioRecvParameters parameters; | 704 cricket::AudioRecvParameters parameters; |
694 parameters.codecs.push_back(kIsacCodec); | 705 parameters.codecs.push_back(kIsacCodec); |
695 parameters.codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1)); | 706 parameters.codecs.push_back(cricket::AudioCodec(127, "XYZ", 32000, 0, 1)); |
696 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); | 707 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
697 } | 708 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); | 780 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, opus)); |
770 EXPECT_EQ(111, opus.pltype); | 781 EXPECT_EQ(111, opus.pltype); |
771 } | 782 } |
772 | 783 |
773 // Test that changes to recv codecs are applied to all streams. | 784 // Test that changes to recv codecs are applied to all streams. |
774 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { | 785 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsWithMultipleStreams) { |
775 EXPECT_TRUE(SetupChannel()); | 786 EXPECT_TRUE(SetupChannel()); |
776 cricket::AudioRecvParameters parameters; | 787 cricket::AudioRecvParameters parameters; |
777 parameters.codecs.push_back(kIsacCodec); | 788 parameters.codecs.push_back(kIsacCodec); |
778 parameters.codecs.push_back(kPcmuCodec); | 789 parameters.codecs.push_back(kPcmuCodec); |
779 parameters.codecs.push_back(kTelephoneEventCodec); | 790 parameters.codecs.push_back(kTelephoneEventCodec1); |
780 parameters.codecs[0].id = 106; // collide with existing telephone-event | 791 parameters.codecs.push_back(kTelephoneEventCodec2); |
| 792 parameters.codecs[0].id = 106; // collide with existing CN 32k |
781 parameters.codecs[2].id = 126; | 793 parameters.codecs[2].id = 126; |
782 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 794 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
783 EXPECT_TRUE(AddRecvStream(kSsrc1)); | 795 EXPECT_TRUE(AddRecvStream(kSsrc1)); |
784 int channel_num2 = voe_.GetLastChannel(); | 796 int channel_num2 = voe_.GetLastChannel(); |
| 797 |
785 webrtc::CodecInst gcodec; | 798 webrtc::CodecInst gcodec; |
786 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 799 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
787 gcodec.plfreq = 16000; | 800 gcodec.plfreq = 16000; |
788 gcodec.channels = 1; | 801 gcodec.channels = 1; |
789 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); | 802 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
790 EXPECT_EQ(106, gcodec.pltype); | 803 EXPECT_EQ(106, gcodec.pltype); |
791 EXPECT_STREQ("ISAC", gcodec.plname); | 804 EXPECT_STREQ("ISAC", gcodec.plname); |
| 805 |
792 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); | 806 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "telephone-event"); |
793 gcodec.plfreq = 8000; | 807 gcodec.plfreq = 8000; |
794 gcodec.channels = 1; | 808 gcodec.channels = 1; |
795 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); | 809 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
796 EXPECT_EQ(126, gcodec.pltype); | 810 EXPECT_EQ(126, gcodec.pltype); |
797 EXPECT_STREQ("telephone-event", gcodec.plname); | 811 EXPECT_STREQ("telephone-event", gcodec.plname); |
| 812 |
| 813 gcodec.plfreq = 32000; |
| 814 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
| 815 EXPECT_EQ(107, gcodec.pltype); |
| 816 EXPECT_STREQ("telephone-event", gcodec.plname); |
798 } | 817 } |
799 | 818 |
800 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { | 819 TEST_F(WebRtcVoiceEngineTestFake, SetRecvCodecsAfterAddingStreams) { |
801 EXPECT_TRUE(SetupRecvStream()); | 820 EXPECT_TRUE(SetupRecvStream()); |
802 cricket::AudioRecvParameters parameters; | 821 cricket::AudioRecvParameters parameters; |
803 parameters.codecs.push_back(kIsacCodec); | 822 parameters.codecs.push_back(kIsacCodec); |
804 parameters.codecs[0].id = 106; // collide with existing telephone-event | 823 parameters.codecs[0].id = 106; // collide with existing CN 32k |
805 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 824 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
806 | 825 |
807 int channel_num2 = voe_.GetLastChannel(); | 826 int channel_num2 = voe_.GetLastChannel(); |
808 webrtc::CodecInst gcodec; | 827 webrtc::CodecInst gcodec; |
809 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); | 828 rtc::strcpyn(gcodec.plname, arraysize(gcodec.plname), "ISAC"); |
810 gcodec.plfreq = 16000; | 829 gcodec.plfreq = 16000; |
811 gcodec.channels = 1; | 830 gcodec.channels = 1; |
812 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); | 831 EXPECT_EQ(0, voe_.GetRecPayloadType(channel_num2, gcodec)); |
813 EXPECT_EQ(106, gcodec.pltype); | 832 EXPECT_EQ(106, gcodec.pltype); |
814 EXPECT_STREQ("ISAC", gcodec.plname); | 833 EXPECT_STREQ("ISAC", gcodec.plname); |
(...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1842 EXPECT_TRUE(SetupSendStream()); | 1861 EXPECT_TRUE(SetupSendStream()); |
1843 cricket::AudioSendParameters parameters; | 1862 cricket::AudioSendParameters parameters; |
1844 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1863 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1845 } | 1864 } |
1846 | 1865 |
1847 // Test that we can set send codecs even with telephone-event codec as the first | 1866 // Test that we can set send codecs even with telephone-event codec as the first |
1848 // one on the list. | 1867 // one on the list. |
1849 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { | 1868 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFOnTop) { |
1850 EXPECT_TRUE(SetupSendStream()); | 1869 EXPECT_TRUE(SetupSendStream()); |
1851 cricket::AudioSendParameters parameters; | 1870 cricket::AudioSendParameters parameters; |
1852 parameters.codecs.push_back(kTelephoneEventCodec); | 1871 parameters.codecs.push_back(kTelephoneEventCodec1); |
1853 parameters.codecs.push_back(kIsacCodec); | 1872 parameters.codecs.push_back(kIsacCodec); |
1854 parameters.codecs.push_back(kPcmuCodec); | 1873 parameters.codecs.push_back(kPcmuCodec); |
1855 parameters.codecs[0].id = 98; // DTMF | 1874 parameters.codecs[0].id = 98; // DTMF |
1856 parameters.codecs[1].id = 96; | 1875 parameters.codecs[1].id = 96; |
1857 SetSendParameters(parameters); | 1876 SetSendParameters(parameters); |
1858 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; | 1877 const auto& gcodec = GetSendStreamConfig(kSsrc1).send_codec_spec.codec_inst; |
1859 EXPECT_EQ(96, gcodec.pltype); | 1878 EXPECT_EQ(96, gcodec.pltype); |
1860 EXPECT_STREQ("ISAC", gcodec.plname); | 1879 EXPECT_STREQ("ISAC", gcodec.plname); |
1861 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1880 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1862 } | 1881 } |
1863 | 1882 |
1864 // Test that payload type range is limited for telephone-event codec. | 1883 // Test that payload type range is limited for telephone-event codec. |
1865 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { | 1884 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsDTMFPayloadTypeOutOfRange) { |
1866 EXPECT_TRUE(SetupSendStream()); | 1885 EXPECT_TRUE(SetupSendStream()); |
1867 cricket::AudioSendParameters parameters; | 1886 cricket::AudioSendParameters parameters; |
1868 parameters.codecs.push_back(kTelephoneEventCodec); | 1887 parameters.codecs.push_back(kTelephoneEventCodec1); |
1869 parameters.codecs.push_back(kIsacCodec); | 1888 parameters.codecs.push_back(kIsacCodec); |
1870 parameters.codecs[0].id = 0; // DTMF | 1889 parameters.codecs[0].id = 0; // DTMF |
1871 parameters.codecs[1].id = 96; | 1890 parameters.codecs[1].id = 96; |
1872 SetSendParameters(parameters); | 1891 SetSendParameters(parameters); |
1873 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1892 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1874 parameters.codecs[0].id = 128; // DTMF | 1893 parameters.codecs[0].id = 128; // DTMF |
1875 EXPECT_FALSE(channel_->SetSendParameters(parameters)); | 1894 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1876 EXPECT_FALSE(channel_->CanInsertDtmf()); | 1895 EXPECT_FALSE(channel_->CanInsertDtmf()); |
1877 parameters.codecs[0].id = 127; | 1896 parameters.codecs[0].id = 127; |
1878 SetSendParameters(parameters); | 1897 SetSendParameters(parameters); |
(...skipping 23 matching lines...) Expand all Loading... |
1902 | 1921 |
1903 // Test that we set VAD and DTMF types correctly as caller. | 1922 // Test that we set VAD and DTMF types correctly as caller. |
1904 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { | 1923 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCaller) { |
1905 EXPECT_TRUE(SetupSendStream()); | 1924 EXPECT_TRUE(SetupSendStream()); |
1906 cricket::AudioSendParameters parameters; | 1925 cricket::AudioSendParameters parameters; |
1907 parameters.codecs.push_back(kIsacCodec); | 1926 parameters.codecs.push_back(kIsacCodec); |
1908 parameters.codecs.push_back(kPcmuCodec); | 1927 parameters.codecs.push_back(kPcmuCodec); |
1909 // TODO(juberti): cn 32000 | 1928 // TODO(juberti): cn 32000 |
1910 parameters.codecs.push_back(kCn16000Codec); | 1929 parameters.codecs.push_back(kCn16000Codec); |
1911 parameters.codecs.push_back(kCn8000Codec); | 1930 parameters.codecs.push_back(kCn8000Codec); |
1912 parameters.codecs.push_back(kTelephoneEventCodec); | 1931 parameters.codecs.push_back(kTelephoneEventCodec1); |
1913 parameters.codecs[0].id = 96; | 1932 parameters.codecs[0].id = 96; |
1914 parameters.codecs[2].id = 97; // wideband CN | 1933 parameters.codecs[2].id = 97; // wideband CN |
1915 parameters.codecs[4].id = 98; // DTMF | 1934 parameters.codecs[4].id = 98; // DTMF |
1916 SetSendParameters(parameters); | 1935 SetSendParameters(parameters); |
1917 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1936 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1918 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1937 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
1919 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1938 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
1920 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 1939 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
1921 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 1940 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
1922 EXPECT_EQ(97, send_codec_spec.cng_payload_type); | 1941 EXPECT_EQ(97, send_codec_spec.cng_payload_type); |
1923 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); | 1942 EXPECT_EQ(webrtc::kFreq16000Hz, send_codec_spec.cng_plfreq); |
1924 EXPECT_TRUE(channel_->CanInsertDtmf()); | 1943 EXPECT_TRUE(channel_->CanInsertDtmf()); |
1925 } | 1944 } |
1926 | 1945 |
1927 // Test that we set VAD and DTMF types correctly as callee. | 1946 // Test that we set VAD and DTMF types correctly as callee. |
1928 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { | 1947 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCNandDTMFAsCallee) { |
1929 EXPECT_TRUE(SetupChannel()); | 1948 EXPECT_TRUE(SetupChannel()); |
1930 cricket::AudioSendParameters parameters; | 1949 cricket::AudioSendParameters parameters; |
1931 parameters.codecs.push_back(kIsacCodec); | 1950 parameters.codecs.push_back(kIsacCodec); |
1932 parameters.codecs.push_back(kPcmuCodec); | 1951 parameters.codecs.push_back(kPcmuCodec); |
1933 // TODO(juberti): cn 32000 | 1952 // TODO(juberti): cn 32000 |
1934 parameters.codecs.push_back(kCn16000Codec); | 1953 parameters.codecs.push_back(kCn16000Codec); |
1935 parameters.codecs.push_back(kCn8000Codec); | 1954 parameters.codecs.push_back(kCn8000Codec); |
1936 parameters.codecs.push_back(kTelephoneEventCodec); | 1955 parameters.codecs.push_back(kTelephoneEventCodec1); |
1937 parameters.codecs[0].id = 96; | 1956 parameters.codecs[0].id = 96; |
1938 parameters.codecs[2].id = 97; // wideband CN | 1957 parameters.codecs[2].id = 97; // wideband CN |
1939 parameters.codecs[4].id = 98; // DTMF | 1958 parameters.codecs[4].id = 98; // DTMF |
1940 SetSendParameters(parameters); | 1959 SetSendParameters(parameters); |
1941 EXPECT_TRUE(channel_->AddSendStream( | 1960 EXPECT_TRUE(channel_->AddSendStream( |
1942 cricket::StreamParams::CreateLegacy(kSsrc1))); | 1961 cricket::StreamParams::CreateLegacy(kSsrc1))); |
1943 | 1962 |
1944 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 1963 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
1945 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 1964 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
1946 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 1965 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1999 } | 2018 } |
2000 | 2019 |
2001 // Test that we perform case-insensitive matching of codec names. | 2020 // Test that we perform case-insensitive matching of codec names. |
2002 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { | 2021 TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsCaseInsensitive) { |
2003 EXPECT_TRUE(SetupSendStream()); | 2022 EXPECT_TRUE(SetupSendStream()); |
2004 cricket::AudioSendParameters parameters; | 2023 cricket::AudioSendParameters parameters; |
2005 parameters.codecs.push_back(kIsacCodec); | 2024 parameters.codecs.push_back(kIsacCodec); |
2006 parameters.codecs.push_back(kPcmuCodec); | 2025 parameters.codecs.push_back(kPcmuCodec); |
2007 parameters.codecs.push_back(kCn16000Codec); | 2026 parameters.codecs.push_back(kCn16000Codec); |
2008 parameters.codecs.push_back(kCn8000Codec); | 2027 parameters.codecs.push_back(kCn8000Codec); |
2009 parameters.codecs.push_back(kTelephoneEventCodec); | 2028 parameters.codecs.push_back(kTelephoneEventCodec1); |
2010 parameters.codecs[0].name = "iSaC"; | 2029 parameters.codecs[0].name = "iSaC"; |
2011 parameters.codecs[0].id = 96; | 2030 parameters.codecs[0].id = 96; |
2012 parameters.codecs[2].id = 97; // wideband CN | 2031 parameters.codecs[2].id = 97; // wideband CN |
2013 parameters.codecs[4].id = 98; // DTMF | 2032 parameters.codecs[4].id = 98; // DTMF |
2014 SetSendParameters(parameters); | 2033 SetSendParameters(parameters); |
2015 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; | 2034 const auto& send_codec_spec = GetSendStreamConfig(kSsrc1).send_codec_spec; |
2016 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); | 2035 EXPECT_EQ(96, send_codec_spec.codec_inst.pltype); |
2017 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); | 2036 EXPECT_STREQ("ISAC", send_codec_spec.codec_inst.plname); |
2018 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); | 2037 EXPECT_EQ(1, send_codec_spec.codec_inst.channels); |
2019 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); | 2038 EXPECT_EQ(send_codec_spec.codec_inst.plfreq, send_codec_spec.cng_plfreq); |
(...skipping 1377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3397 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3416 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3398 cricket::AudioCodec(96, "ILBC", 8000, 0, 1), nullptr)); | 3417 cricket::AudioCodec(96, "ILBC", 8000, 0, 1), nullptr)); |
3399 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3418 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3400 cricket::AudioCodec(96, "iLBC", 8000, 0, 1), nullptr)); | 3419 cricket::AudioCodec(96, "iLBC", 8000, 0, 1), nullptr)); |
3401 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3420 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3402 cricket::AudioCodec(96, "CN", 32000, 0, 1), nullptr)); | 3421 cricket::AudioCodec(96, "CN", 32000, 0, 1), nullptr)); |
3403 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3422 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3404 cricket::AudioCodec(96, "CN", 16000, 0, 1), nullptr)); | 3423 cricket::AudioCodec(96, "CN", 16000, 0, 1), nullptr)); |
3405 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3424 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3406 cricket::AudioCodec(96, "telephone-event", 8000, 0, 1), nullptr)); | 3425 cricket::AudioCodec(96, "telephone-event", 8000, 0, 1), nullptr)); |
| 3426 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3427 cricket::AudioCodec(96, "telephone-event", 16000, 0, 1), nullptr)); |
| 3428 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3429 cricket::AudioCodec(96, "telephone-event", 32000, 0, 1), nullptr)); |
| 3430 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
| 3431 cricket::AudioCodec(96, "telephone-event", 48000, 0, 1), nullptr)); |
3407 // Check codecs with an id by id. | 3432 // Check codecs with an id by id. |
3408 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3433 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3409 cricket::AudioCodec(0, "", 8000, 0, 1), nullptr)); // PCMU | 3434 cricket::AudioCodec(0, "", 8000, 0, 1), nullptr)); // PCMU |
3410 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3435 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3411 cricket::AudioCodec(8, "", 8000, 0, 1), nullptr)); // PCMA | 3436 cricket::AudioCodec(8, "", 8000, 0, 1), nullptr)); // PCMA |
3412 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3437 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3413 cricket::AudioCodec(9, "", 8000, 0, 1), nullptr)); // G722 | 3438 cricket::AudioCodec(9, "", 8000, 0, 1), nullptr)); // G722 |
3414 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3439 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3415 cricket::AudioCodec(13, "", 8000, 0, 1), nullptr)); // CN | 3440 cricket::AudioCodec(13, "", 8000, 0, 1), nullptr)); // CN |
3416 // Check sample/bitrate matching. | 3441 // Check sample/bitrate matching. |
3417 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3442 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3418 cricket::AudioCodec(0, "PCMU", 8000, 64000, 1), nullptr)); | 3443 cricket::AudioCodec(0, "PCMU", 8000, 64000, 1), nullptr)); |
3419 // Check that bad codecs fail. | 3444 // Check that bad codecs fail. |
3420 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3445 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3421 cricket::AudioCodec(99, "ABCD", 0, 0, 1), nullptr)); | 3446 cricket::AudioCodec(99, "ABCD", 0, 0, 1), nullptr)); |
3422 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3447 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3423 cricket::AudioCodec(88, "", 0, 0, 1), nullptr)); | 3448 cricket::AudioCodec(88, "", 0, 0, 1), nullptr)); |
3424 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3449 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3425 cricket::AudioCodec(0, "", 0, 0, 2), nullptr)); | 3450 cricket::AudioCodec(0, "", 0, 0, 2), nullptr)); |
3426 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3451 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3427 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); | 3452 cricket::AudioCodec(0, "", 5000, 0, 1), nullptr)); |
3428 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( | 3453 EXPECT_FALSE(cricket::WebRtcVoiceEngine::ToCodecInst( |
3429 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); | 3454 cricket::AudioCodec(0, "", 0, 5000, 1), nullptr)); |
3430 | 3455 |
3431 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. | 3456 // Verify the payload id of common audio codecs, including CN, ISAC, and G722. |
3432 // TODO(ossu): Why are the payload types of codecs with non-static payload | 3457 // TODO(ossu): Why are the payload types of codecs with non-static payload |
3433 // type assignments checked here? It shouldn't really matter. | 3458 // type assignments checked here? It shouldn't really matter. |
3434 cricket::WebRtcVoiceEngine engine( | 3459 cricket::WebRtcVoiceEngine engine( |
3435 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory()); | 3460 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory()); |
3436 for (std::vector<cricket::AudioCodec>::const_iterator it = | 3461 for (const cricket::AudioCodec& codec : engine.send_codecs()) { |
3437 engine.send_codecs().begin(); | 3462 if (codec.name == "CN" && codec.clockrate == 16000) { |
3438 it != engine.send_codecs().end(); ++it) { | 3463 EXPECT_EQ(105, codec.id); |
3439 if (it->name == "CN" && it->clockrate == 16000) { | 3464 } else if (codec.name == "CN" && codec.clockrate == 32000) { |
3440 EXPECT_EQ(105, it->id); | 3465 EXPECT_EQ(106, codec.id); |
3441 } else if (it->name == "CN" && it->clockrate == 32000) { | 3466 } else if (codec.name == "ISAC" && codec.clockrate == 16000) { |
3442 EXPECT_EQ(106, it->id); | 3467 EXPECT_EQ(103, codec.id); |
3443 } else if (it->name == "ISAC" && it->clockrate == 16000) { | 3468 } else if (codec.name == "ISAC" && codec.clockrate == 32000) { |
3444 EXPECT_EQ(103, it->id); | 3469 EXPECT_EQ(104, codec.id); |
3445 } else if (it->name == "ISAC" && it->clockrate == 32000) { | 3470 } else if (codec.name == "G722" && codec.clockrate == 8000) { |
3446 EXPECT_EQ(104, it->id); | 3471 EXPECT_EQ(9, codec.id); |
3447 } else if (it->name == "G722" && it->clockrate == 8000) { | 3472 } else if (codec.name == "telephone-event" && codec.clockrate == 8000) { |
3448 EXPECT_EQ(9, it->id); | 3473 EXPECT_EQ(126, codec.id); |
3449 } else if (it->name == "telephone-event") { | 3474 // TODO(solenberg): 16k, 32k, 48k DTMF should be dynamically assigned. |
3450 EXPECT_EQ(126, it->id); | 3475 // Remove these checks once both send and receive side assigns payload types |
3451 } else if (it->name == "opus") { | 3476 // dynamically. |
3452 EXPECT_EQ(111, it->id); | 3477 } else if (codec.name == "telephone-event" && codec.clockrate == 16000) { |
3453 ASSERT_TRUE(it->params.find("minptime") != it->params.end()); | 3478 EXPECT_EQ(113, codec.id); |
3454 EXPECT_EQ("10", it->params.find("minptime")->second); | 3479 } else if (codec.name == "telephone-event" && codec.clockrate == 32000) { |
3455 ASSERT_TRUE(it->params.find("useinbandfec") != it->params.end()); | 3480 EXPECT_EQ(112, codec.id); |
3456 EXPECT_EQ("1", it->params.find("useinbandfec")->second); | 3481 } else if (codec.name == "telephone-event" && codec.clockrate == 48000) { |
| 3482 EXPECT_EQ(110, codec.id); |
| 3483 } else if (codec.name == "opus") { |
| 3484 EXPECT_EQ(111, codec.id); |
| 3485 ASSERT_TRUE(codec.params.find("minptime") != codec.params.end()); |
| 3486 EXPECT_EQ("10", codec.params.find("minptime")->second); |
| 3487 ASSERT_TRUE(codec.params.find("useinbandfec") != codec.params.end()); |
| 3488 EXPECT_EQ("1", codec.params.find("useinbandfec")->second); |
3457 } | 3489 } |
3458 } | 3490 } |
3459 } | 3491 } |
3460 | 3492 |
3461 // Tests that VoE supports at least 32 channels | 3493 // Tests that VoE supports at least 32 channels |
3462 TEST(WebRtcVoiceEngineTest, Has32Channels) { | 3494 TEST(WebRtcVoiceEngineTest, Has32Channels) { |
3463 cricket::WebRtcVoiceEngine engine( | 3495 cricket::WebRtcVoiceEngine engine( |
3464 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory()); | 3496 nullptr, webrtc::MockAudioDecoderFactory::CreateUnusedFactory()); |
3465 webrtc::RtcEventLogNullImpl event_log; | 3497 webrtc::RtcEventLogNullImpl event_log; |
3466 std::unique_ptr<webrtc::Call> call( | 3498 std::unique_ptr<webrtc::Call> call( |
(...skipping 30 matching lines...) Expand all Loading... |
3497 nullptr, webrtc::CreateBuiltinAudioDecoderFactory()); | 3529 nullptr, webrtc::CreateBuiltinAudioDecoderFactory()); |
3498 webrtc::RtcEventLogNullImpl event_log; | 3530 webrtc::RtcEventLogNullImpl event_log; |
3499 std::unique_ptr<webrtc::Call> call( | 3531 std::unique_ptr<webrtc::Call> call( |
3500 webrtc::Call::Create(webrtc::Call::Config(&event_log))); | 3532 webrtc::Call::Create(webrtc::Call::Config(&event_log))); |
3501 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), | 3533 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::MediaConfig(), |
3502 cricket::AudioOptions(), call.get()); | 3534 cricket::AudioOptions(), call.get()); |
3503 cricket::AudioRecvParameters parameters; | 3535 cricket::AudioRecvParameters parameters; |
3504 parameters.codecs = engine.recv_codecs(); | 3536 parameters.codecs = engine.recv_codecs(); |
3505 EXPECT_TRUE(channel.SetRecvParameters(parameters)); | 3537 EXPECT_TRUE(channel.SetRecvParameters(parameters)); |
3506 } | 3538 } |
OLD | NEW |