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}
This commit is contained in:
Johannes Kron 2019-02-07 12:50:18 +01:00 committed by Commit Bot
parent 5f6abcfbd2
commit 7ff164e6e1
7 changed files with 33 additions and 2 deletions

View File

@ -108,6 +108,8 @@ const int RtpExtension::kVideoRotationDefaultId = 4;
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

View File

@ -295,6 +295,7 @@ struct RtpExtension {
// 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[];

View File

@ -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 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
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(

View File

@ -38,6 +38,7 @@ class ReceiveSideCongestionController : public CallStatsObserver,
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(

View File

@ -139,6 +139,12 @@ void ReceiveSideCongestionController::OnReceivedPacket(
}
}
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) {

View File

@ -41,7 +41,8 @@ RemoteEstimatorProxy::RemoteEstimatorProxy(
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 @@ void RemoteEstimatorProxy::OnBitrateChanged(int bitrate_bps) {
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) {

View File

@ -47,6 +47,7 @@ class RemoteEstimatorProxy : public RemoteBitrateEstimator {
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 @@ class RemoteEstimatorProxy : public RemoteBitrateEstimator {
// 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