| Index: webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc
|
| diff --git a/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc b/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc
|
| index 6b73864037469791a323f32e966fecf4a17eac47..5b0ba5a22b27be88a8e7d803f5092b95ddcad3c5 100644
|
| --- a/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc
|
| +++ b/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc
|
| @@ -35,8 +35,6 @@ AimdRateControl::AimdRateControl()
|
| rate_control_state_(kRcHold),
|
| rate_control_region_(kRcMaxUnknown),
|
| time_last_bitrate_change_(-1),
|
| - current_input_(kBwNormal, rtc::Optional<uint32_t>(), 1.0),
|
| - updated_(false),
|
| time_first_incoming_estimate_(-1),
|
| bitrate_is_initialized_(false),
|
| beta_(0.85f),
|
| @@ -90,18 +88,12 @@ uint32_t AimdRateControl::LatestEstimate() const {
|
| return current_bitrate_bps_;
|
| }
|
|
|
| -uint32_t AimdRateControl::UpdateBandwidthEstimate(int64_t now_ms) {
|
| - current_bitrate_bps_ = ChangeBitrate(
|
| - current_bitrate_bps_,
|
| - current_input_.incoming_bitrate.value_or(current_bitrate_bps_), now_ms);
|
| - return current_bitrate_bps_;
|
| -}
|
| -
|
| void AimdRateControl::SetRtt(int64_t rtt) {
|
| rtt_ = rtt;
|
| }
|
|
|
| -void AimdRateControl::Update(const RateControlInput* input, int64_t now_ms) {
|
| +uint32_t AimdRateControl::Update(const RateControlInput* input,
|
| + int64_t now_ms) {
|
| RTC_CHECK(input);
|
|
|
| // Set the initial bit rate value to what we're receiving the first half
|
| @@ -119,19 +111,11 @@ void AimdRateControl::Update(const RateControlInput* input, int64_t now_ms) {
|
| }
|
| }
|
|
|
| - if (updated_ && current_input_.bw_state == kBwOverusing) {
|
| - // Only update delay factor and incoming bit rate. We always want to react
|
| - // on an over-use.
|
| - current_input_.noise_var = input->noise_var;
|
| - current_input_.incoming_bitrate = input->incoming_bitrate;
|
| - } else {
|
| - updated_ = true;
|
| - current_input_ = *input;
|
| - }
|
| + current_bitrate_bps_ = ChangeBitrate(current_bitrate_bps_, *input, now_ms);
|
| + return current_bitrate_bps_;
|
| }
|
|
|
| void AimdRateControl::SetEstimate(int bitrate_bps, int64_t now_ms) {
|
| - updated_ = true;
|
| bitrate_is_initialized_ = true;
|
| current_bitrate_bps_ = ClampBitrate(bitrate_bps, bitrate_bps);
|
| time_last_bitrate_change_ = now_ms;
|
| @@ -155,18 +139,18 @@ rtc::Optional<int> AimdRateControl::GetLastBitrateDecreaseBps() const {
|
| }
|
|
|
| uint32_t AimdRateControl::ChangeBitrate(uint32_t new_bitrate_bps,
|
| - uint32_t incoming_bitrate_bps,
|
| + const RateControlInput& input,
|
| int64_t now_ms) {
|
| - if (!updated_) {
|
| - return current_bitrate_bps_;
|
| - }
|
| + uint32_t incoming_bitrate_bps =
|
| + input.incoming_bitrate.value_or(current_bitrate_bps_);
|
| +
|
| // An over-use should always trigger us to reduce the bitrate, even though
|
| // we have not yet established our first estimate. By acting on the over-use,
|
| // we will end up with a valid estimate.
|
| - if (!bitrate_is_initialized_ && current_input_.bw_state != kBwOverusing)
|
| + if (!bitrate_is_initialized_ && input.bw_state != kBwOverusing)
|
| return current_bitrate_bps_;
|
| - updated_ = false;
|
| - ChangeState(current_input_, now_ms);
|
| +
|
| + ChangeState(input, now_ms);
|
| // Calculated here because it's used in multiple places.
|
| const float incoming_bitrate_kbps = incoming_bitrate_bps / 1000.0f;
|
| // Calculate the max bit rate std dev given the normalized
|
| @@ -224,7 +208,7 @@ uint32_t AimdRateControl::ChangeBitrate(uint32_t new_bitrate_bps,
|
|
|
| UpdateMaxBitRateEstimate(incoming_bitrate_kbps);
|
| // Stay on hold until the pipes are cleared.
|
| - ChangeState(kRcHold);
|
| + rate_control_state_ = kRcHold;
|
| time_last_bitrate_change_ = now_ms;
|
| break;
|
|
|
| @@ -294,20 +278,20 @@ void AimdRateControl::UpdateMaxBitRateEstimate(float incoming_bitrate_kbps) {
|
|
|
| void AimdRateControl::ChangeState(const RateControlInput& input,
|
| int64_t now_ms) {
|
| - switch (current_input_.bw_state) {
|
| + switch (input.bw_state) {
|
| case kBwNormal:
|
| if (rate_control_state_ == kRcHold) {
|
| time_last_bitrate_change_ = now_ms;
|
| - ChangeState(kRcIncrease);
|
| + rate_control_state_ = kRcIncrease;
|
| }
|
| break;
|
| case kBwOverusing:
|
| if (rate_control_state_ != kRcDecrease) {
|
| - ChangeState(kRcDecrease);
|
| + rate_control_state_ = kRcDecrease;
|
| }
|
| break;
|
| case kBwUnderusing:
|
| - ChangeState(kRcHold);
|
| + rate_control_state_ = kRcHold;
|
| break;
|
| default:
|
| assert(false);
|
| @@ -318,7 +302,4 @@ void AimdRateControl::ChangeRegion(RateControlRegion region) {
|
| rate_control_region_ = region;
|
| }
|
|
|
| -void AimdRateControl::ChangeState(RateControlState new_state) {
|
| - rate_control_state_ = new_state;
|
| -}
|
| } // namespace webrtc
|
|
|