Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(351)

Unified Diff: talk/media/webrtc/webrtcvoiceengine_unittest.cc

Issue 1604563002: Add send-side BWE to WebRtcVoiceEngine under a finch experiment. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc
diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
index a62bcb225fc7c6111fed44c0a43507f1ecf7b353..19cceb4b99362298f5e281f6497c897f49996f0c 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;
@@ -74,10 +75,13 @@ class FakeVoEWrapper : public cricket::VoEWrapper {
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);
}
@@ -281,6 +285,29 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_EQ(0u, GetRecvStreamConfig(kSsrc2).rtp.extensions.size());
}
+ void TestExtensionFilter(const std::vector<std::string>& extensions,
+ const std::string& expected_extension) {
+ EXPECT_TRUE(SetupEngineWithSendStream());
+ cricket::AudioSendParameters parameters = send_parameters_;
+ int expected_id = -1;
+ int id = 1;
+ for (const std::string& extension : extensions) {
+ if (extension == expected_extension)
+ expected_id = id;
+ parameters.extensions.push_back(
+ cricket::RtpHeaderExtension(extension, id++));
+ }
+ EXPECT_TRUE(channel_->SetSendParameters(parameters));
+ const cricket::FakeAudioSendStream send_stream = GetSendStream(kSsrc1);
+
+ // Verify that only one of them has been set, and that it is the one with
+ // highest priority (transport sequence number).
+ ASSERT_EQ(1u, send_stream.GetConfig().rtp.extensions.size());
+ EXPECT_EQ(expected_id, send_stream.GetConfig().rtp.extensions[0].id);
+ EXPECT_EQ(expected_extension,
+ send_stream.GetConfig().rtp.extensions[0].name);
+ }
+
webrtc::AudioSendStream::Stats GetAudioSendStreamStats() const {
webrtc::AudioSendStream::Stats stats;
stats.local_ssrc = 12;
@@ -399,6 +426,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".
@@ -433,6 +463,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) {
@@ -1276,6 +1318,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());
@@ -1918,6 +1983,37 @@ 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_F(WebRtcVoiceEngineWithSendSideBweTest,
+ FiltersExtensionsPicksTransportSeqNum) {
+ // Enable three redundant extensions.
+ std::vector<std::string> extensions;
+ extensions.push_back(cricket::kRtpAbsoluteSenderTimeHeaderExtension);
+ extensions.push_back(cricket::kRtpTransportSequenceNumberHeaderExtension);
+ TestExtensionFilter(extensions,
+ cricket::kRtpTransportSequenceNumberHeaderExtension);
+}
+
// Test support for audio level header extension.
TEST_F(WebRtcVoiceEngineTestFake, SendAudioLevelHeaderExtensions) {
TestSetSendRtpHeaderExtensions(kRtpAudioLevelHeaderExtension);
« talk/media/webrtc/webrtcvoiceengine.cc ('K') | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698