OLD | NEW |
---|---|
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2008 Google Inc. | 3 * Copyright 2008 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 11 matching lines...) Expand all Loading... | |
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #include "webrtc/base/arraysize.h" | 28 #include "webrtc/base/arraysize.h" |
29 #include "webrtc/base/byteorder.h" | 29 #include "webrtc/base/byteorder.h" |
30 #include "webrtc/base/gunit.h" | 30 #include "webrtc/base/gunit.h" |
31 #include "webrtc/call.h" | 31 #include "webrtc/call.h" |
32 #include "webrtc/p2p/base/faketransportcontroller.h" | |
33 #include "webrtc/test/field_trial.h" | |
32 #include "talk/media/base/constants.h" | 34 #include "talk/media/base/constants.h" |
33 #include "talk/media/base/fakemediaengine.h" | 35 #include "talk/media/base/fakemediaengine.h" |
34 #include "talk/media/base/fakenetworkinterface.h" | 36 #include "talk/media/base/fakenetworkinterface.h" |
35 #include "talk/media/base/fakertp.h" | 37 #include "talk/media/base/fakertp.h" |
36 #include "talk/media/webrtc/fakewebrtccall.h" | 38 #include "talk/media/webrtc/fakewebrtccall.h" |
37 #include "talk/media/webrtc/fakewebrtcvoiceengine.h" | 39 #include "talk/media/webrtc/fakewebrtcvoiceengine.h" |
38 #include "talk/media/webrtc/webrtcvoiceengine.h" | 40 #include "talk/media/webrtc/webrtcvoiceengine.h" |
39 #include "webrtc/p2p/base/faketransportcontroller.h" | |
40 #include "talk/session/media/channel.h" | 41 #include "talk/session/media/channel.h" |
41 | 42 |
42 using cricket::kRtpAudioLevelHeaderExtension; | 43 using cricket::kRtpAudioLevelHeaderExtension; |
43 using cricket::kRtpAbsoluteSenderTimeHeaderExtension; | 44 using cricket::kRtpAbsoluteSenderTimeHeaderExtension; |
44 | 45 |
45 namespace { | 46 namespace { |
46 | 47 |
47 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0); | 48 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0); |
48 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); | 49 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); |
49 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); | 50 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); |
(...skipping 22 matching lines...) Expand all Loading... | |
72 }; | 73 }; |
73 } // namespace | 74 } // namespace |
74 | 75 |
75 class FakeAudioSink : public webrtc::AudioSinkInterface { | 76 class FakeAudioSink : public webrtc::AudioSinkInterface { |
76 public: | 77 public: |
77 void OnData(const Data& audio) override {} | 78 void OnData(const Data& audio) override {} |
78 }; | 79 }; |
79 | 80 |
80 class WebRtcVoiceEngineTestFake : public testing::Test { | 81 class WebRtcVoiceEngineTestFake : public testing::Test { |
81 public: | 82 public: |
82 WebRtcVoiceEngineTestFake() | 83 explicit WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} |
the sun
2016/01/26 10:26:55
no explicit
stefan-webrtc
2016/01/26 11:40:54
Done.
| |
84 | |
85 explicit WebRtcVoiceEngineTestFake(const char* field_trials) | |
83 : call_(webrtc::Call::Config()), | 86 : call_(webrtc::Call::Config()), |
84 engine_(new FakeVoEWrapper(&voe_)), | 87 engine_(new FakeVoEWrapper(&voe_)), |
85 channel_(nullptr) { | 88 channel_(nullptr), |
89 override_field_trials_(field_trials) { | |
86 send_parameters_.codecs.push_back(kPcmuCodec); | 90 send_parameters_.codecs.push_back(kPcmuCodec); |
87 recv_parameters_.codecs.push_back(kPcmuCodec); | 91 recv_parameters_.codecs.push_back(kPcmuCodec); |
88 } | 92 } |
89 bool SetupEngine() { | 93 bool SetupEngine() { |
90 if (!engine_.Init(rtc::Thread::Current())) { | 94 if (!engine_.Init(rtc::Thread::Current())) { |
91 return false; | 95 return false; |
92 } | 96 } |
93 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); | 97 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); |
94 return (channel_ != nullptr); | 98 return (channel_ != nullptr); |
95 } | 99 } |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
403 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); | 407 EXPECT_EQ(info.capture_start_ntp_time_ms, stats.capture_start_ntp_time_ms); |
404 } | 408 } |
405 | 409 |
406 protected: | 410 protected: |
407 cricket::FakeCall call_; | 411 cricket::FakeCall call_; |
408 cricket::FakeWebRtcVoiceEngine voe_; | 412 cricket::FakeWebRtcVoiceEngine voe_; |
409 cricket::WebRtcVoiceEngine engine_; | 413 cricket::WebRtcVoiceEngine engine_; |
410 cricket::VoiceMediaChannel* channel_; | 414 cricket::VoiceMediaChannel* channel_; |
411 cricket::AudioSendParameters send_parameters_; | 415 cricket::AudioSendParameters send_parameters_; |
412 cricket::AudioRecvParameters recv_parameters_; | 416 cricket::AudioRecvParameters recv_parameters_; |
417 | |
418 private: | |
419 webrtc::test::ScopedFieldTrials override_field_trials_; | |
413 }; | 420 }; |
414 | 421 |
415 // Tests that our stub library "works". | 422 // Tests that our stub library "works". |
416 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { | 423 TEST_F(WebRtcVoiceEngineTestFake, StartupShutdown) { |
417 EXPECT_FALSE(voe_.IsInited()); | 424 EXPECT_FALSE(voe_.IsInited()); |
418 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); | 425 EXPECT_TRUE(engine_.Init(rtc::Thread::Current())); |
419 EXPECT_TRUE(voe_.IsInited()); | 426 EXPECT_TRUE(voe_.IsInited()); |
420 engine_.Terminate(); | 427 engine_.Terminate(); |
421 EXPECT_FALSE(voe_.IsInited()); | 428 EXPECT_FALSE(voe_.IsInited()); |
422 } | 429 } |
(...skipping 14 matching lines...) Expand all Loading... | |
437 EXPECT_EQ(48000, codecs[0].clockrate); | 444 EXPECT_EQ(48000, codecs[0].clockrate); |
438 EXPECT_EQ(2, codecs[0].channels); | 445 EXPECT_EQ(2, codecs[0].channels); |
439 EXPECT_EQ(64000, codecs[0].bitrate); | 446 EXPECT_EQ(64000, codecs[0].bitrate); |
440 int pref = codecs[0].preference; | 447 int pref = codecs[0].preference; |
441 for (size_t i = 1; i < codecs.size(); ++i) { | 448 for (size_t i = 1; i < codecs.size(); ++i) { |
442 EXPECT_GT(pref, codecs[i].preference); | 449 EXPECT_GT(pref, codecs[i].preference); |
443 pref = codecs[i].preference; | 450 pref = codecs[i].preference; |
444 } | 451 } |
445 } | 452 } |
446 | 453 |
454 TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { | |
455 const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); | |
456 bool opus_found = false; | |
457 for (cricket::AudioCodec codec : codecs) { | |
458 if (codec.name == "opus") { | |
459 EXPECT_TRUE(HasTransportCc(codec)); | |
460 opus_found = true; | |
461 } | |
462 } | |
463 EXPECT_TRUE(opus_found); | |
464 } | |
465 | |
447 // Tests that we can find codecs by name or id, and that we interpret the | 466 // Tests that we can find codecs by name or id, and that we interpret the |
448 // clockrate and bitrate fields properly. | 467 // clockrate and bitrate fields properly. |
449 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { | 468 TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { |
450 cricket::AudioCodec codec; | 469 cricket::AudioCodec codec; |
451 webrtc::CodecInst codec_inst; | 470 webrtc::CodecInst codec_inst; |
452 // Find PCMU with explicit clockrate and bitrate. | 471 // Find PCMU with explicit clockrate and bitrate. |
453 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); | 472 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kPcmuCodec, &codec_inst)); |
454 // Find ISAC with explicit clockrate and 0 bitrate. | 473 // Find ISAC with explicit clockrate and 0 bitrate. |
455 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); | 474 EXPECT_TRUE(cricket::WebRtcVoiceEngine::ToCodecInst(kIsacCodec, &codec_inst)); |
456 // Find telephone-event with explicit clockrate and 0 bitrate. | 475 // Find telephone-event with explicit clockrate and 0 bitrate. |
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1280 int channel_num = voe_.GetLastChannel(); | 1299 int channel_num = voe_.GetLastChannel(); |
1281 cricket::AudioSendParameters parameters; | 1300 cricket::AudioSendParameters parameters; |
1282 parameters.codecs.push_back(kOpusCodec); | 1301 parameters.codecs.push_back(kOpusCodec); |
1283 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1302 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1284 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); | 1303 EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); |
1285 parameters.codecs[0].params["useinbandfec"] = "1"; | 1304 parameters.codecs[0].params["useinbandfec"] = "1"; |
1286 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1305 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1287 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); | 1306 EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); |
1288 } | 1307 } |
1289 | 1308 |
1309 TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { | |
1310 EXPECT_TRUE(SetupEngine()); | |
1311 cricket::AudioSendParameters send_parameters; | |
1312 send_parameters.codecs.push_back(kOpusCodec); | |
1313 EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); | |
1314 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); | |
1315 | |
1316 cricket::AudioRecvParameters recv_parameters; | |
1317 recv_parameters.codecs.push_back(kOpusCodec); | |
the sun
2016/01/26 10:26:55
You could set any codec here right?
stefan-webrtc
2016/01/26 11:40:54
Yes, changed to kIsacCodec to make that clear.
| |
1318 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); | |
1319 EXPECT_TRUE( | |
1320 channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); | |
1321 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | |
1322 EXPECT_FALSE( | |
1323 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | |
1324 | |
1325 send_parameters.codecs = engine_.codecs(); | |
1326 EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); | |
1327 ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); | |
1328 EXPECT_TRUE( | |
1329 call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); | |
1330 } | |
1331 | |
1290 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. | 1332 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode. |
1291 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { | 1333 TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { |
1292 EXPECT_TRUE(SetupEngineWithSendStream()); | 1334 EXPECT_TRUE(SetupEngineWithSendStream()); |
1293 int channel_num = voe_.GetLastChannel(); | 1335 int channel_num = voe_.GetLastChannel(); |
1294 cricket::AudioSendParameters parameters; | 1336 cricket::AudioSendParameters parameters; |
1295 parameters.codecs.push_back(kOpusCodec); | 1337 parameters.codecs.push_back(kOpusCodec); |
1296 parameters.codecs[0].bitrate = 0; | 1338 parameters.codecs[0].bitrate = 0; |
1297 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); | 1339 parameters.codecs[0].SetParam(cricket::kCodecParamMaxPlaybackRate, 8000); |
1298 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1340 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1299 EXPECT_EQ(cricket::kOpusBandwidthNb, | 1341 EXPECT_EQ(cricket::kOpusBandwidthNb, |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1922 parameters.codecs[0].params[""] = "97/97"; | 1964 parameters.codecs[0].params[""] = "97/97"; |
1923 parameters.codecs[1].id = 96; | 1965 parameters.codecs[1].id = 96; |
1924 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1966 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1925 webrtc::CodecInst gcodec; | 1967 webrtc::CodecInst gcodec; |
1926 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); | 1968 EXPECT_EQ(0, voe_.GetSendCodec(channel_num, gcodec)); |
1927 EXPECT_EQ(96, gcodec.pltype); | 1969 EXPECT_EQ(96, gcodec.pltype); |
1928 EXPECT_STREQ("ISAC", gcodec.plname); | 1970 EXPECT_STREQ("ISAC", gcodec.plname); |
1929 EXPECT_FALSE(voe_.GetRED(channel_num)); | 1971 EXPECT_FALSE(voe_.GetRED(channel_num)); |
1930 } | 1972 } |
1931 | 1973 |
1974 class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { | |
1975 public: | |
1976 WebRtcVoiceEngineWithSendSideBweTest() | |
1977 : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} | |
1978 }; | |
1979 | |
1980 TEST_F(WebRtcVoiceEngineWithSendSideBweTest, | |
1981 SupportsTransportSequenceNumberHeaderExtension) { | |
1982 cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); | |
1983 ASSERT_FALSE(capabilities.header_extensions.empty()); | |
1984 for (const cricket::RtpHeaderExtension& extension : | |
1985 capabilities.header_extensions) { | |
1986 if (extension.uri == cricket::kRtpTransportSequenceNumberHeaderExtension) { | |
1987 EXPECT_EQ(cricket::kRtpTransportSequenceNumberHeaderExtensionDefaultId, | |
1988 extension.id); | |
1989 return; | |
1990 } | |
1991 } | |
1992 FAIL() << "Transport sequence number extension not in header-extension list."; | |
1993 } | |
1994 | |
1932 // Test support for audio level header extension. | 1995 // Test support for audio level header extension. |
1933 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { | 1996 TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { |
1934 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); | 1997 TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); |
1935 } | 1998 } |
1936 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) { | 1999 TEST_F(WebRtcVoiceEngineTestFake, RecvAudioLevelHeaderExtensions) { |
1937 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); | 2000 TestSetRecvRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); |
1938 } | 2001 } |
1939 | 2002 |
1940 // Test support for absolute send time header extension. | 2003 // Test support for absolute send time header extension. |
1941 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { | 2004 TEST_F(WebRtcVoiceEngineTestFake, SendAbsoluteSendTimeHeaderExtensions) { |
(...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2921 | 2984 |
2922 ASSERT_EQ(2, call_.GetAudioReceiveStreams().size()); | 2985 ASSERT_EQ(2, call_.GetAudioReceiveStreams().size()); |
2923 EXPECT_EQ(kSyncLabel, | 2986 EXPECT_EQ(kSyncLabel, |
2924 call_.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group) | 2987 call_.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group) |
2925 << "SyncGroup should be set based on sync_label"; | 2988 << "SyncGroup should be set based on sync_label"; |
2926 EXPECT_EQ(kSyncLabel, | 2989 EXPECT_EQ(kSyncLabel, |
2927 call_.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group) | 2990 call_.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group) |
2928 << "SyncGroup should be set based on sync_label"; | 2991 << "SyncGroup should be set based on sync_label"; |
2929 } | 2992 } |
2930 | 2993 |
2931 TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) { | |
2932 // Test that changing the combined_audio_video_bwe option results in the | |
2933 // expected state changes on an associated Call. | |
2934 std::vector<uint32_t> ssrcs; | |
2935 ssrcs.push_back(223); | |
2936 ssrcs.push_back(224); | |
2937 | |
2938 EXPECT_TRUE(SetupEngineWithSendStream()); | |
2939 cricket::WebRtcVoiceMediaChannel* media_channel = | |
2940 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | |
2941 for (uint32_t ssrc : ssrcs) { | |
2942 EXPECT_TRUE(media_channel->AddRecvStream( | |
2943 cricket::StreamParams::CreateLegacy(ssrc))); | |
2944 } | |
2945 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); | |
2946 | |
2947 // Combined BWE should be disabled. | |
2948 for (uint32_t ssrc : ssrcs) { | |
2949 const auto* s = call_.GetAudioReceiveStream(ssrc); | |
2950 EXPECT_NE(nullptr, s); | |
2951 EXPECT_FALSE(s->GetConfig().combined_audio_video_bwe); | |
2952 } | |
2953 | |
2954 // Enable combined BWE option - now it should be set up. | |
2955 send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); | |
2956 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); | |
2957 for (uint32_t ssrc : ssrcs) { | |
2958 const auto* s = call_.GetAudioReceiveStream(ssrc); | |
2959 EXPECT_NE(nullptr, s); | |
2960 EXPECT_EQ(true, s->GetConfig().combined_audio_video_bwe); | |
2961 } | |
2962 | |
2963 // Disable combined BWE option - should be disabled again. | |
2964 send_parameters_.options.combined_audio_video_bwe = | |
2965 rtc::Optional<bool>(false); | |
2966 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); | |
2967 for (uint32_t ssrc : ssrcs) { | |
2968 const auto* s = call_.GetAudioReceiveStream(ssrc); | |
2969 EXPECT_NE(nullptr, s); | |
2970 EXPECT_FALSE(s->GetConfig().combined_audio_video_bwe); | |
2971 } | |
2972 | |
2973 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); | |
2974 } | |
2975 | |
2976 TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) { | |
2977 // Test that adding receive streams after enabling combined bandwidth | |
2978 // estimation will correctly configure each channel. | |
2979 EXPECT_TRUE(SetupEngineWithSendStream()); | |
2980 cricket::WebRtcVoiceMediaChannel* media_channel = | |
2981 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | |
2982 send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); | |
2983 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); | |
2984 | |
2985 for (uint32_t ssrc : kSsrcs4) { | |
2986 EXPECT_TRUE(media_channel->AddRecvStream( | |
2987 cricket::StreamParams::CreateLegacy(ssrc))); | |
2988 EXPECT_NE(nullptr, call_.GetAudioReceiveStream(ssrc)); | |
2989 } | |
2990 EXPECT_EQ(arraysize(kSsrcs4), call_.GetAudioReceiveStreams().size()); | |
2991 } | |
2992 | |
2993 // TODO(solenberg): Remove, once recv streams are configured through Call. | 2994 // TODO(solenberg): Remove, once recv streams are configured through Call. |
2994 // (This is then covered by TestSetRecvRtpHeaderExtensions.) | 2995 // (This is then covered by TestSetRecvRtpHeaderExtensions.) |
2995 TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { | 2996 TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { |
2996 // Test that setting the header extensions results in the expected state | 2997 // Test that setting the header extensions results in the expected state |
2997 // changes on an associated Call. | 2998 // changes on an associated Call. |
2998 std::vector<uint32_t> ssrcs; | 2999 std::vector<uint32_t> ssrcs; |
2999 ssrcs.push_back(223); | 3000 ssrcs.push_back(223); |
3000 ssrcs.push_back(224); | 3001 ssrcs.push_back(224); |
3001 | 3002 |
3002 EXPECT_TRUE(SetupEngineWithSendStream()); | 3003 EXPECT_TRUE(SetupEngineWithSendStream()); |
3003 cricket::WebRtcVoiceMediaChannel* media_channel = | 3004 cricket::WebRtcVoiceMediaChannel* media_channel = |
3004 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3005 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3005 send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); | |
3006 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); | 3006 EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); |
3007 for (uint32_t ssrc : ssrcs) { | 3007 for (uint32_t ssrc : ssrcs) { |
3008 EXPECT_TRUE(media_channel->AddRecvStream( | 3008 EXPECT_TRUE(media_channel->AddRecvStream( |
3009 cricket::StreamParams::CreateLegacy(ssrc))); | 3009 cricket::StreamParams::CreateLegacy(ssrc))); |
3010 } | 3010 } |
3011 | 3011 |
3012 // Combined BWE should be set up, but with no configured extensions. | |
3013 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); | 3012 EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
3014 for (uint32_t ssrc : ssrcs) { | 3013 for (uint32_t ssrc : ssrcs) { |
3015 const auto* s = call_.GetAudioReceiveStream(ssrc); | 3014 const auto* s = call_.GetAudioReceiveStream(ssrc); |
3016 EXPECT_NE(nullptr, s); | 3015 EXPECT_NE(nullptr, s); |
3017 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size()); | 3016 EXPECT_EQ(0, s->GetConfig().rtp.extensions.size()); |
3018 } | 3017 } |
3019 | 3018 |
3020 // Set up receive extensions. | 3019 // Set up receive extensions. |
3021 cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); | 3020 cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); |
3022 cricket::AudioRecvParameters recv_parameters; | 3021 cricket::AudioRecvParameters recv_parameters; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3054 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, | 3053 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, |
3055 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | 3054 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, |
3056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 3055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
3057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | 3056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
3058 }; | 3057 }; |
3059 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp)); | 3058 rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp)); |
3060 | 3059 |
3061 EXPECT_TRUE(SetupEngineWithSendStream()); | 3060 EXPECT_TRUE(SetupEngineWithSendStream()); |
3062 cricket::WebRtcVoiceMediaChannel* media_channel = | 3061 cricket::WebRtcVoiceMediaChannel* media_channel = |
3063 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); | 3062 static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
3064 send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); | |
3065 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 3063 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
3066 EXPECT_TRUE(media_channel->AddRecvStream( | 3064 EXPECT_TRUE(media_channel->AddRecvStream( |
3067 cricket::StreamParams::CreateLegacy(kAudioSsrc))); | 3065 cricket::StreamParams::CreateLegacy(kAudioSsrc))); |
3068 | 3066 |
3069 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); | 3067 EXPECT_EQ(1, call_.GetAudioReceiveStreams().size()); |
3070 const cricket::FakeAudioReceiveStream* s = | 3068 const cricket::FakeAudioReceiveStream* s = |
3071 call_.GetAudioReceiveStream(kAudioSsrc); | 3069 call_.GetAudioReceiveStream(kAudioSsrc); |
3072 EXPECT_EQ(0, s->received_packets()); | 3070 EXPECT_EQ(0, s->received_packets()); |
3073 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); | 3071 channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime()); |
3074 EXPECT_EQ(1, s->received_packets()); | 3072 EXPECT_EQ(1, s->received_packets()); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3295 cricket::WebRtcVoiceEngine engine; | 3293 cricket::WebRtcVoiceEngine engine; |
3296 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3294 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); |
3297 rtc::scoped_ptr<webrtc::Call> call( | 3295 rtc::scoped_ptr<webrtc::Call> call( |
3298 webrtc::Call::Create(webrtc::Call::Config())); | 3296 webrtc::Call::Create(webrtc::Call::Config())); |
3299 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), | 3297 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), |
3300 call.get()); | 3298 call.get()); |
3301 cricket::AudioRecvParameters parameters; | 3299 cricket::AudioRecvParameters parameters; |
3302 parameters.codecs = engine.codecs(); | 3300 parameters.codecs = engine.codecs(); |
3303 EXPECT_TRUE(channel.SetRecvParameters(parameters)); | 3301 EXPECT_TRUE(channel.SetRecvParameters(parameters)); |
3304 } | 3302 } |
OLD | NEW |