Plumbing of feedback on request setting
Bug: webrtc:10263
Change-Id: I23c09e680d6381598e4172b76025ff84f33aa4de
Reviewed-on: https://webrtc-review.googlesource.com/c/121422
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Johannes Kron <kron@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26606}
diff --git a/api/rtp_parameters.cc b/api/rtp_parameters.cc
index c4fd112..6de14da 100644
--- a/api/rtp_parameters.cc
+++ b/api/rtp_parameters.cc
@@ -108,6 +108,8 @@
const char RtpExtension::kTransportSequenceNumberUri[] =
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
+const char RtpExtension::kTransportSequenceNumberV2Uri[] =
+ "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-02";
const int RtpExtension::kTransportSequenceNumberDefaultId = 5;
// This extension allows applications to adaptively limit the playout delay
diff --git a/api/rtp_parameters.h b/api/rtp_parameters.h
index 25a21c1..90e4a4c 100644
--- a/api/rtp_parameters.h
+++ b/api/rtp_parameters.h
@@ -295,6 +295,7 @@
// Header extension for transport sequence number, see url for details:
// http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
static const char kTransportSequenceNumberUri[];
+ static const char kTransportSequenceNumberV2Uri[];
static const int kTransportSequenceNumberDefaultId;
static const char kPlayoutDelayUri[];
diff --git a/call/call.cc b/call/call.cc
index f3f6cd3..5baf425 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -68,13 +68,22 @@
namespace webrtc {
namespace {
+bool SendFeedbackOnRequestOnly(const std::vector<RtpExtension>& extensions) {
+ for (const auto& extension : extensions) {
+ if (extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
+ return true;
+ }
+ return false;
+}
+
// TODO(nisse): This really begs for a shared context struct.
bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
bool transport_cc) {
if (!transport_cc)
return false;
for (const auto& extension : extensions) {
- if (extension.uri == RtpExtension::kTransportSequenceNumberUri)
+ if (extension.uri == RtpExtension::kTransportSequenceNumberUri ||
+ extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
return true;
}
return false;
@@ -862,6 +871,9 @@
TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream");
RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_);
+ receive_side_cc_.SetSendFeedbackOnRequestOnly(
+ SendFeedbackOnRequestOnly(configuration.rtp.extensions));
+
RegisterRateObserver();
VideoReceiveStream* receive_stream = new VideoReceiveStream(
diff --git a/modules/congestion_controller/include/receive_side_congestion_controller.h b/modules/congestion_controller/include/receive_side_congestion_controller.h
index b021618..5532b3c 100644
--- a/modules/congestion_controller/include/receive_side_congestion_controller.h
+++ b/modules/congestion_controller/include/receive_side_congestion_controller.h
@@ -38,6 +38,7 @@
size_t payload_size,
const RTPHeader& header);
+ void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
// TODO(nisse): Delete these methods, design a more specific interface.
virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(bool send_side_bwe);
virtual const RemoteBitrateEstimator* GetRemoteBitrateEstimator(
diff --git a/modules/congestion_controller/receive_side_congestion_controller.cc b/modules/congestion_controller/receive_side_congestion_controller.cc
index 224a49d..1a95f8c 100644
--- a/modules/congestion_controller/receive_side_congestion_controller.cc
+++ b/modules/congestion_controller/receive_side_congestion_controller.cc
@@ -139,6 +139,12 @@
}
}
+void ReceiveSideCongestionController::SetSendFeedbackOnRequestOnly(
+ bool send_feedback_on_request_only) {
+ remote_estimator_proxy_.SetSendFeedbackOnRequestOnly(
+ send_feedback_on_request_only);
+}
+
RemoteBitrateEstimator*
ReceiveSideCongestionController::GetRemoteBitrateEstimator(bool send_side_bwe) {
if (send_side_bwe) {
diff --git a/modules/remote_bitrate_estimator/remote_estimator_proxy.cc b/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
index 9d9d27f..9323044 100644
--- a/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
+++ b/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
@@ -41,7 +41,8 @@
media_ssrc_(0),
feedback_sequence_(0),
window_start_seq_(-1),
- send_interval_ms_(kDefaultSendIntervalMs) {}
+ send_interval_ms_(kDefaultSendIntervalMs),
+ send_feedback_on_request_only_(false) {}
RemoteEstimatorProxy::~RemoteEstimatorProxy() {}
@@ -110,6 +111,12 @@
rtc::SafeClamp(0.05 * bitrate_bps, kMinTwccRate, kMaxTwccRate));
}
+void RemoteEstimatorProxy::SetSendFeedbackOnRequestOnly(
+ bool send_feedback_on_request_only) {
+ rtc::CritScope cs(&lock_);
+ send_feedback_on_request_only_ = send_feedback_on_request_only;
+}
+
void RemoteEstimatorProxy::OnPacketArrival(uint16_t sequence_number,
int64_t arrival_time) {
if (arrival_time < 0 || arrival_time > kMaxTimeMs) {
diff --git a/modules/remote_bitrate_estimator/remote_estimator_proxy.h b/modules/remote_bitrate_estimator/remote_estimator_proxy.h
index db41a94..94b1716 100644
--- a/modules/remote_bitrate_estimator/remote_estimator_proxy.h
+++ b/modules/remote_bitrate_estimator/remote_estimator_proxy.h
@@ -47,6 +47,7 @@
int64_t TimeUntilNextProcess() override;
void Process() override;
void OnBitrateChanged(int bitrate);
+ void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
static const int kMinSendIntervalMs;
static const int kMaxSendIntervalMs;
@@ -71,6 +72,7 @@
// Map unwrapped seq -> time.
std::map<int64_t, int64_t> packet_arrival_times_ RTC_GUARDED_BY(&lock_);
int64_t send_interval_ms_ RTC_GUARDED_BY(&lock_);
+ bool send_feedback_on_request_only_ RTC_GUARDED_BY(&lock_);
};
} // namespace webrtc