| 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("") {} | 
 |    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); | 
 |  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 |