aboutsummaryrefslogtreecommitdiff
path: root/webrtc
diff options
context:
space:
mode:
authorstefan <stefan@webrtc.org>2015-11-20 18:05:48 -0800
committerCommit bot <commit-bot@chromium.org>2015-11-21 02:05:53 +0000
commit43edf0ffb91a50e2efa01c7befe4d188a7e30ea2 (patch)
tree4e23fe1baa1938e2b0abe869312ba1a66b8f9a6b /webrtc
parentbd13838ccc87f94d1e951bcf780979622b020359 (diff)
downloadwebrtc-43edf0ffb91a50e2efa01c7befe4d188a7e30ea2.tar.gz
Require negotiation to send transport cc feedback over RTCP.
BUG=4312 Review URL: https://codereview.webrtc.org/1452883002 Cr-Commit-Position: refs/heads/master@{#10735}
Diffstat (limited to 'webrtc')
-rw-r--r--webrtc/video/end_to_end_tests.cc24
-rw-r--r--webrtc/video/rampup_tests.cc5
-rw-r--r--webrtc/video/video_quality_test.cc1
-rw-r--r--webrtc/video/video_receive_stream.cc4
-rw-r--r--webrtc/video_receive_stream.h3
5 files changed, 31 insertions, 6 deletions
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index e2450d9c7d..e541d370d8 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -1533,9 +1533,8 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
tester.RunTest();
}
-TEST_F(EndToEndTest, ReceivesTransportFeedback) {
+void TransportFeedbackTest(bool feedback_enabled) {
static const int kExtensionId = 5;
-
class TransportFeedbackObserver : public test::DirectTransport {
public:
TransportFeedbackObserver(Call* receiver_call, rtc::Event* done_event)
@@ -1563,12 +1562,16 @@ TEST_F(EndToEndTest, ReceivesTransportFeedback) {
class TransportFeedbackTester : public MultiStreamTest {
public:
- TransportFeedbackTester() : done_(false, false) {}
+ explicit TransportFeedbackTester(bool feedback_enabled)
+ : feedback_enabled_(feedback_enabled), done_(false, false) {}
virtual ~TransportFeedbackTester() {}
protected:
void Wait() override {
- EXPECT_TRUE(done_.Wait(CallTest::kDefaultTimeoutMs));
+ const int64_t kDisabledFeedbackTimeoutMs = 5000;
+ EXPECT_EQ(feedback_enabled_, done_.Wait(feedback_enabled_
+ ? test::CallTest::kDefaultTimeoutMs
+ : kDisabledFeedbackTimeoutMs));
}
void UpdateSendConfig(
@@ -1585,6 +1588,7 @@ TEST_F(EndToEndTest, ReceivesTransportFeedback) {
VideoReceiveStream::Config* receive_config) override {
receive_config->rtp.extensions.push_back(
RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
+ receive_config->rtp.transport_cc = feedback_enabled_;
}
test::DirectTransport* CreateReceiveTransport(
@@ -1593,10 +1597,20 @@ TEST_F(EndToEndTest, ReceivesTransportFeedback) {
}
private:
+ const bool feedback_enabled_;
rtc::Event done_;
- } tester;
+ } tester(feedback_enabled);
tester.RunTest();
}
+
+TEST_F(EndToEndTest, ReceivesTransportFeedback) {
+ TransportFeedbackTest(true);
+}
+
+TEST_F(EndToEndTest, TransportFeedbackNotConfigured) {
+ TransportFeedbackTest(false);
+}
+
TEST_F(EndToEndTest, ObserversEncodedFrames) {
class EncodedFrameTestObserver : public EncodedFrameObserver {
public:
diff --git a/webrtc/video/rampup_tests.cc b/webrtc/video/rampup_tests.cc
index 6450e0290d..c9b8e11122 100644
--- a/webrtc/video/rampup_tests.cc
+++ b/webrtc/video/rampup_tests.cc
@@ -124,16 +124,20 @@ void RampUpTester::ModifyConfigs(
send_config->rtp.extensions.clear();
bool remb;
+ bool transport_cc;
if (extension_type_ == RtpExtension::kAbsSendTime) {
remb = true;
+ transport_cc = false;
send_config->rtp.extensions.push_back(
RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
} else if (extension_type_ == RtpExtension::kTransportSequenceNumber) {
remb = false;
+ transport_cc = true;
send_config->rtp.extensions.push_back(RtpExtension(
extension_type_.c_str(), kTransportSequenceNumberExtensionId));
} else {
remb = true;
+ transport_cc = false;
send_config->rtp.extensions.push_back(RtpExtension(
extension_type_.c_str(), kTransmissionTimeOffsetExtensionId));
}
@@ -153,6 +157,7 @@ void RampUpTester::ModifyConfigs(
size_t i = 0;
for (VideoReceiveStream::Config& recv_config : *receive_configs) {
recv_config.rtp.remb = remb;
+ recv_config.rtp.transport_cc = transport_cc;
recv_config.rtp.extensions = send_config->rtp.extensions;
recv_config.rtp.remote_ssrc = ssrcs_[i];
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index ebceb5642b..a46fe1bd7c 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -828,6 +828,7 @@ void VideoQualityTest::SetupCommon(Transport* send_transport,
receive_configs_[i].rtp.rtx[kSendRtxPayloadType].ssrc = kSendRtxSsrcs[i];
receive_configs_[i].rtp.rtx[kSendRtxPayloadType].payload_type =
kSendRtxPayloadType;
+ receive_configs_[i].rtp.transport_cc = params_.common.send_side_bwe;
}
}
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index 287f5355dc..683e89aa97 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -81,6 +81,7 @@ std::string VideoReceiveStream::Config::Rtp::ToString() const {
<< (rtcp_xr.receiver_reference_time_report ? "on" : "off");
ss << '}';
ss << ", remb: " << (remb ? "on" : "off");
+ ss << ", transport_cc: " << (transport_cc ? "on" : "off");
ss << ", nack: {rtp_history_ms: " << nack.rtp_history_ms << '}';
ss << ", fec: " << fec.ToString();
ss << ", rtx: {";
@@ -153,7 +154,8 @@ VideoReceiveStream::VideoReceiveStream(
call_stats_(call_stats) {
LOG(LS_INFO) << "VideoReceiveStream: " << config_.ToString();
- bool send_side_bwe = UseSendSideBwe(config_.rtp.extensions);
+ bool send_side_bwe =
+ config.rtp.transport_cc && UseSendSideBwe(config_.rtp.extensions);
RemoteBitrateEstimator* bitrate_estimator =
congestion_controller_->GetRemoteBitrateEstimator(send_side_bwe);
diff --git a/webrtc/video_receive_stream.h b/webrtc/video_receive_stream.h
index 275162ca1c..6be2c5a86e 100644
--- a/webrtc/video_receive_stream.h
+++ b/webrtc/video_receive_stream.h
@@ -113,6 +113,9 @@ class VideoReceiveStream : public ReceiveStream {
// See draft-alvestrand-rmcat-remb for information.
bool remb = false;
+ // See draft-holmer-rmcat-transport-wide-cc-extensions for details.
+ bool transport_cc = false;
+
// See NackConfig for description.
NackConfig nack;