diff options
author | stefan <stefan@webrtc.org> | 2015-11-20 18:05:48 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-21 02:05:53 +0000 |
commit | 43edf0ffb91a50e2efa01c7befe4d188a7e30ea2 (patch) | |
tree | 4e23fe1baa1938e2b0abe869312ba1a66b8f9a6b /webrtc | |
parent | bd13838ccc87f94d1e951bcf780979622b020359 (diff) | |
download | webrtc-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.cc | 24 | ||||
-rw-r--r-- | webrtc/video/rampup_tests.cc | 5 | ||||
-rw-r--r-- | webrtc/video/video_quality_test.cc | 1 | ||||
-rw-r--r-- | webrtc/video/video_receive_stream.cc | 4 | ||||
-rw-r--r-- | webrtc/video_receive_stream.h | 3 |
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; |