OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 AimdRateControl::AimdRateControl() | 30 AimdRateControl::AimdRateControl() |
31 : min_configured_bitrate_bps_( | 31 : min_configured_bitrate_bps_( |
32 RemoteBitrateEstimator::kDefaultMinBitrateBps), | 32 RemoteBitrateEstimator::kDefaultMinBitrateBps), |
33 max_configured_bitrate_bps_(30000000), | 33 max_configured_bitrate_bps_(30000000), |
34 current_bitrate_bps_(max_configured_bitrate_bps_), | 34 current_bitrate_bps_(max_configured_bitrate_bps_), |
35 avg_max_bitrate_kbps_(-1.0f), | 35 avg_max_bitrate_kbps_(-1.0f), |
36 var_max_bitrate_kbps_(0.4f), | 36 var_max_bitrate_kbps_(0.4f), |
37 rate_control_state_(kRcHold), | 37 rate_control_state_(kRcHold), |
38 rate_control_region_(kRcMaxUnknown), | 38 rate_control_region_(kRcMaxUnknown), |
39 time_last_bitrate_change_(-1), | 39 time_last_bitrate_change_(-1), |
40 current_input_(kBwNormal, 0, 1.0), | 40 current_input_(kBwNormal, rtc::Optional<uint32_t>(), 1.0), |
41 updated_(false), | 41 updated_(false), |
42 time_first_incoming_estimate_(-1), | 42 time_first_incoming_estimate_(-1), |
43 bitrate_is_initialized_(false), | 43 bitrate_is_initialized_(false), |
44 beta_(0.85f), | 44 beta_(0.85f), |
45 rtt_(kDefaultRttMs), | 45 rtt_(kDefaultRttMs), |
46 time_of_last_log_(-1), | 46 time_of_last_log_(-1), |
47 in_experiment_(!AdaptiveThresholdExperimentIsDisabled()) {} | 47 in_experiment_(!AdaptiveThresholdExperimentIsDisabled()) {} |
48 | 48 |
49 void AimdRateControl::SetMinBitrate(int min_bitrate_bps) { | 49 void AimdRateControl::SetMinBitrate(int min_bitrate_bps) { |
50 min_configured_bitrate_bps_ = min_bitrate_bps; | 50 min_configured_bitrate_bps_ = min_bitrate_bps; |
(...skipping 29 matching lines...) Expand all Loading... |
80 return bitrate_difference > threshold; | 80 return bitrate_difference > threshold; |
81 } | 81 } |
82 return false; | 82 return false; |
83 } | 83 } |
84 | 84 |
85 uint32_t AimdRateControl::LatestEstimate() const { | 85 uint32_t AimdRateControl::LatestEstimate() const { |
86 return current_bitrate_bps_; | 86 return current_bitrate_bps_; |
87 } | 87 } |
88 | 88 |
89 uint32_t AimdRateControl::UpdateBandwidthEstimate(int64_t now_ms) { | 89 uint32_t AimdRateControl::UpdateBandwidthEstimate(int64_t now_ms) { |
90 current_bitrate_bps_ = ChangeBitrate(current_bitrate_bps_, | 90 current_bitrate_bps_ = ChangeBitrate( |
91 current_input_.incoming_bitrate, now_ms); | 91 current_bitrate_bps_, |
| 92 current_input_.incoming_bitrate.value_or(current_bitrate_bps_), now_ms); |
92 if (now_ms - time_of_last_log_ > kLogIntervalMs) { | 93 if (now_ms - time_of_last_log_ > kLogIntervalMs) { |
93 time_of_last_log_ = now_ms; | 94 time_of_last_log_ = now_ms; |
94 } | 95 } |
95 return current_bitrate_bps_; | 96 return current_bitrate_bps_; |
96 } | 97 } |
97 | 98 |
98 void AimdRateControl::SetRtt(int64_t rtt) { | 99 void AimdRateControl::SetRtt(int64_t rtt) { |
99 rtt_ = rtt; | 100 rtt_ = rtt; |
100 } | 101 } |
101 | 102 |
102 void AimdRateControl::Update(const RateControlInput* input, int64_t now_ms) { | 103 void AimdRateControl::Update(const RateControlInput* input, int64_t now_ms) { |
103 assert(input); | 104 RTC_CHECK(input); |
104 | 105 |
105 // Set the initial bit rate value to what we're receiving the first half | 106 // Set the initial bit rate value to what we're receiving the first half |
106 // second. | 107 // second. |
107 if (!bitrate_is_initialized_) { | 108 if (!bitrate_is_initialized_) { |
108 const int64_t kInitializationTimeMs = 5000; | 109 const int64_t kInitializationTimeMs = 5000; |
109 RTC_DCHECK_LE(kBitrateWindowMs, kInitializationTimeMs); | 110 RTC_DCHECK_LE(kBitrateWindowMs, kInitializationTimeMs); |
110 if (time_first_incoming_estimate_ < 0) { | 111 if (time_first_incoming_estimate_ < 0) { |
111 if (input->incoming_bitrate > 0) { | 112 if (input->incoming_bitrate) |
112 time_first_incoming_estimate_ = now_ms; | 113 time_first_incoming_estimate_ = now_ms; |
113 } | |
114 } else if (now_ms - time_first_incoming_estimate_ > kInitializationTimeMs && | 114 } else if (now_ms - time_first_incoming_estimate_ > kInitializationTimeMs && |
115 input->incoming_bitrate > 0) { | 115 input->incoming_bitrate) { |
116 current_bitrate_bps_ = input->incoming_bitrate; | 116 current_bitrate_bps_ = *input->incoming_bitrate; |
117 bitrate_is_initialized_ = true; | 117 bitrate_is_initialized_ = true; |
118 } | 118 } |
119 } | 119 } |
120 | 120 |
121 if (updated_ && current_input_.bw_state == kBwOverusing) { | 121 if (updated_ && current_input_.bw_state == kBwOverusing) { |
122 // Only update delay factor and incoming bit rate. We always want to react | 122 // Only update delay factor and incoming bit rate. We always want to react |
123 // on an over-use. | 123 // on an over-use. |
124 current_input_.noise_var = input->noise_var; | 124 current_input_.noise_var = input->noise_var; |
125 current_input_.incoming_bitrate = input->incoming_bitrate; | 125 current_input_.incoming_bitrate = input->incoming_bitrate; |
126 } else { | 126 } else { |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 } | 304 } |
305 | 305 |
306 void AimdRateControl::ChangeRegion(RateControlRegion region) { | 306 void AimdRateControl::ChangeRegion(RateControlRegion region) { |
307 rate_control_region_ = region; | 307 rate_control_region_ = region; |
308 } | 308 } |
309 | 309 |
310 void AimdRateControl::ChangeState(RateControlState new_state) { | 310 void AimdRateControl::ChangeState(RateControlState new_state) { |
311 rate_control_state_ = new_state; | 311 rate_control_state_ = new_state; |
312 } | 312 } |
313 } // namespace webrtc | 313 } // namespace webrtc |
OLD | NEW |