Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc |
diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
index 2d272fc6d4178602884bcaeb1a5df80a9e73eb87..a5991c32eca4c712b020e5418aa273ee70880896 100644 |
--- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
+++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc |
@@ -29,6 +29,8 @@ |
#include "webrtc/base/byteorder.h" |
#include "webrtc/base/gunit.h" |
#include "webrtc/call.h" |
+#include "webrtc/p2p/base/faketransportcontroller.h" |
+#include "webrtc/test/field_trial.h" |
#include "talk/media/base/constants.h" |
#include "talk/media/base/fakemediaengine.h" |
#include "talk/media/base/fakenetworkinterface.h" |
@@ -36,7 +38,6 @@ |
#include "talk/media/webrtc/fakewebrtccall.h" |
#include "talk/media/webrtc/fakewebrtcvoiceengine.h" |
#include "talk/media/webrtc/webrtcvoiceengine.h" |
-#include "webrtc/p2p/base/faketransportcontroller.h" |
#include "talk/session/media/channel.h" |
using cricket::kRtpAudioLevelHeaderExtension; |
@@ -79,10 +80,13 @@ class FakeAudioSink : public webrtc::AudioSinkInterface { |
class WebRtcVoiceEngineTestFake : public testing::Test { |
public: |
- WebRtcVoiceEngineTestFake() |
+ explicit WebRtcVoiceEngineTestFake() : WebRtcVoiceEngineTestFake("") {} |
+ |
+ explicit WebRtcVoiceEngineTestFake(const char* field_trials) |
: call_(webrtc::Call::Config()), |
engine_(new FakeVoEWrapper(&voe_)), |
- channel_(nullptr) { |
+ channel_(nullptr), |
+ override_field_trials_(field_trials) { |
send_parameters_.codecs.push_back(kPcmuCodec); |
recv_parameters_.codecs.push_back(kPcmuCodec); |
} |
@@ -410,6 +414,9 @@ class WebRtcVoiceEngineTestFake : public testing::Test { |
cricket::VoiceMediaChannel* channel_; |
cricket::AudioSendParameters send_parameters_; |
cricket::AudioRecvParameters recv_parameters_; |
+ |
+ private: |
+ webrtc::test::ScopedFieldTrials override_field_trials_; |
}; |
// Tests that our stub library "works". |
@@ -444,6 +451,18 @@ TEST_F(WebRtcVoiceEngineTestFake, CodecPreference) { |
} |
} |
+TEST_F(WebRtcVoiceEngineTestFake, OpusSupportsTransportCc) { |
+ const std::vector<cricket::AudioCodec>& codecs = engine_.codecs(); |
+ bool opus_found = false; |
+ for (cricket::AudioCodec codec : codecs) { |
+ if (codec.name == "opus") { |
+ EXPECT_TRUE(HasTransportCc(codec)); |
+ opus_found = true; |
+ } |
+ } |
+ EXPECT_TRUE(opus_found); |
+} |
+ |
// Tests that we can find codecs by name or id, and that we interpret the |
// clockrate and bitrate fields properly. |
TEST_F(WebRtcVoiceEngineTestFake, FindCodec) { |
@@ -1287,6 +1306,29 @@ TEST_F(WebRtcVoiceEngineTestFake, ChangeOpusFecStatus) { |
EXPECT_TRUE(voe_.GetCodecFEC(channel_num)); |
} |
+TEST_F(WebRtcVoiceEngineTestFake, TransportCcCanBeEnabledAndDisabled) { |
+ EXPECT_TRUE(SetupEngine()); |
+ cricket::AudioSendParameters send_parameters; |
+ send_parameters.codecs.push_back(kOpusCodec); |
+ EXPECT_TRUE(send_parameters.codecs[0].feedback_params.params().empty()); |
+ EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); |
+ |
+ cricket::AudioRecvParameters recv_parameters; |
+ recv_parameters.codecs.push_back(kOpusCodec); |
+ EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
+ EXPECT_TRUE( |
+ channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc1))); |
+ ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
+ EXPECT_FALSE( |
+ call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
+ |
+ send_parameters.codecs = engine_.codecs(); |
+ EXPECT_TRUE(channel_->SetSendParameters(send_parameters)); |
+ ASSERT_TRUE(call_.GetAudioReceiveStream(kSsrc1) != nullptr); |
+ EXPECT_TRUE( |
+ call_.GetAudioReceiveStream(kSsrc1)->GetConfig().rtp.transport_cc); |
+} |
+ |
// Test maxplaybackrate <= 8000 triggers Opus narrow band mode. |
TEST_F(WebRtcVoiceEngineTestFake, SetOpusMaxPlaybackRateNb) { |
EXPECT_TRUE(SetupEngineWithSendStream()); |
@@ -1929,6 +1971,27 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecsBadRED5) { |
EXPECT_FALSE(voe_.GetRED(channel_num)); |
} |
+class WebRtcVoiceEngineWithSendSideBweTest : public WebRtcVoiceEngineTestFake { |
+ public: |
+ WebRtcVoiceEngineWithSendSideBweTest() |
+ : WebRtcVoiceEngineTestFake("WebRTC-Audio-SendSideBwe/Enabled/") {} |
+}; |
+ |
+TEST_F(WebRtcVoiceEngineWithSendSideBweTest, |
+ SupportsTransportSequenceNumberHeaderExtension) { |
+ cricket::RtpCapabilities capabilities = engine_.GetCapabilities(); |
+ ASSERT_FALSE(capabilities.header_extensions.empty()); |
+ for (const cricket::RtpHeaderExtension& extension : |
+ capabilities.header_extensions) { |
+ if (extension.uri == cricket::kRtpTransportSequenceNumberHeaderExtension) { |
+ EXPECT_EQ(cricket::kRtpTransportSequenceNumberHeaderExtensionDefaultId, |
+ extension.id); |
+ return; |
+ } |
+ } |
+ FAIL() << "Transport sequence number extension not in header-extension list."; |
+} |
+ |
// Test support for audio level header extension. |
TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) { |
TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension); |
@@ -2928,68 +2991,6 @@ TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) { |
<< "SyncGroup should be set based on sync_label"; |
} |
-TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) { |
- // Test that changing the combined_audio_video_bwe option results in the |
- // expected state changes on an associated Call. |
- std::vector<uint32_t> ssrcs; |
- ssrcs.push_back(223); |
- ssrcs.push_back(224); |
- |
- EXPECT_TRUE(SetupEngineWithSendStream()); |
- cricket::WebRtcVoiceMediaChannel* media_channel = |
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
- for (uint32_t ssrc : ssrcs) { |
- EXPECT_TRUE(media_channel->AddRecvStream( |
- cricket::StreamParams::CreateLegacy(ssrc))); |
- } |
- EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
- |
- // Combined BWE should be disabled. |
- for (uint32_t ssrc : ssrcs) { |
- const auto* s = call_.GetAudioReceiveStream(ssrc); |
- EXPECT_NE(nullptr, s); |
- EXPECT_FALSE(s->GetConfig().combined_audio_video_bwe); |
- } |
- |
- // Enable combined BWE option - now it should be set up. |
- send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); |
- EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); |
- for (uint32_t ssrc : ssrcs) { |
- const auto* s = call_.GetAudioReceiveStream(ssrc); |
- EXPECT_NE(nullptr, s); |
- EXPECT_EQ(true, s->GetConfig().combined_audio_video_bwe); |
- } |
- |
- // Disable combined BWE option - should be disabled again. |
- send_parameters_.options.combined_audio_video_bwe = |
- rtc::Optional<bool>(false); |
- EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); |
- for (uint32_t ssrc : ssrcs) { |
- const auto* s = call_.GetAudioReceiveStream(ssrc); |
- EXPECT_NE(nullptr, s); |
- EXPECT_FALSE(s->GetConfig().combined_audio_video_bwe); |
- } |
- |
- EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
-} |
- |
-TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) { |
- // Test that adding receive streams after enabling combined bandwidth |
- // estimation will correctly configure each channel. |
- EXPECT_TRUE(SetupEngineWithSendStream()); |
- cricket::WebRtcVoiceMediaChannel* media_channel = |
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
- send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); |
- EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); |
- |
- for (uint32_t ssrc : kSsrcs4) { |
- EXPECT_TRUE(media_channel->AddRecvStream( |
- cricket::StreamParams::CreateLegacy(ssrc))); |
- EXPECT_NE(nullptr, call_.GetAudioReceiveStream(ssrc)); |
- } |
- EXPECT_EQ(arraysize(kSsrcs4), call_.GetAudioReceiveStreams().size()); |
-} |
- |
// TODO(solenberg): Remove, once recv streams are configured through Call. |
// (This is then covered by TestSetRecvRtpHeaderExtensions.) |
TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { |
@@ -3002,14 +3003,12 @@ TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) { |
EXPECT_TRUE(SetupEngineWithSendStream()); |
cricket::WebRtcVoiceMediaChannel* media_channel = |
static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
- send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); |
EXPECT_TRUE(media_channel->SetSendParameters(send_parameters_)); |
for (uint32_t ssrc : ssrcs) { |
EXPECT_TRUE(media_channel->AddRecvStream( |
cricket::StreamParams::CreateLegacy(ssrc))); |
} |
- // Combined BWE should be set up, but with no configured extensions. |
EXPECT_EQ(2, call_.GetAudioReceiveStreams().size()); |
for (uint32_t ssrc : ssrcs) { |
const auto* s = call_.GetAudioReceiveStream(ssrc); |
@@ -3061,7 +3060,6 @@ TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) { |
EXPECT_TRUE(SetupEngineWithSendStream()); |
cricket::WebRtcVoiceMediaChannel* media_channel = |
static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_); |
- send_parameters_.options.combined_audio_video_bwe = rtc::Optional<bool>(true); |
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
EXPECT_TRUE(media_channel->AddRecvStream( |
cricket::StreamParams::CreateLegacy(kAudioSsrc))); |