| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 payload_size, ×tamp_delta, | 98 payload_size, ×tamp_delta, |
| 99 &time_delta, &size_delta)) { | 99 &time_delta, &size_delta)) { |
| 100 double timestamp_delta_ms = timestamp_delta * kTimestampToMs; | 100 double timestamp_delta_ms = timestamp_delta * kTimestampToMs; |
| 101 estimator->estimator.Update(time_delta, timestamp_delta_ms, size_delta, | 101 estimator->estimator.Update(time_delta, timestamp_delta_ms, size_delta, |
| 102 estimator->detector.State()); | 102 estimator->detector.State()); |
| 103 estimator->detector.Detect(estimator->estimator.offset(), | 103 estimator->detector.Detect(estimator->estimator.offset(), |
| 104 timestamp_delta_ms, | 104 timestamp_delta_ms, |
| 105 estimator->estimator.num_of_deltas(), now_ms); | 105 estimator->estimator.num_of_deltas(), now_ms); |
| 106 } | 106 } |
| 107 if (estimator->detector.State() == kBwOverusing) { | 107 if (estimator->detector.State() == kBwOverusing) { |
| 108 uint32_t incoming_bitrate = incoming_bitrate_.Rate(now_ms); | 108 uint32_t incoming_bitrate_bps = incoming_bitrate_.Rate(now_ms); |
| 109 if (prior_state != kBwOverusing || | 109 if (prior_state != kBwOverusing || |
| 110 remote_rate_->TimeToReduceFurther(now_ms, incoming_bitrate)) { | 110 remote_rate_->TimeToReduceFurther(now_ms, incoming_bitrate_bps)) { |
| 111 // The first overuse should immediately trigger a new estimate. | 111 // The first overuse should immediately trigger a new estimate. |
| 112 // We also have to update the estimate immediately if we are overusing | 112 // We also have to update the estimate immediately if we are overusing |
| 113 // and the target bitrate is too high compared to what we are receiving. | 113 // and the target bitrate is too high compared to what we are receiving. |
| 114 UpdateEstimate(now_ms); | 114 UpdateEstimate(now_ms); |
| 115 } | 115 } |
| 116 } | 116 } |
| 117 } | 117 } |
| 118 | 118 |
| 119 int32_t RemoteBitrateEstimatorSingleStream::Process() { | 119 int32_t RemoteBitrateEstimatorSingleStream::Process() { |
| 120 if (TimeUntilNextProcess() > 0) { | 120 if (TimeUntilNextProcess() > 0) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 // We can't update the estimate if we don't have any active streams. | 165 // We can't update the estimate if we don't have any active streams. |
| 166 if (overuse_detectors_.empty()) { | 166 if (overuse_detectors_.empty()) { |
| 167 remote_rate_.reset(new AimdRateControl(remote_rate_->GetMinBitrate())); | 167 remote_rate_.reset(new AimdRateControl(remote_rate_->GetMinBitrate())); |
| 168 return; | 168 return; |
| 169 } | 169 } |
| 170 double mean_noise_var = sum_var_noise / | 170 double mean_noise_var = sum_var_noise / |
| 171 static_cast<double>(overuse_detectors_.size()); | 171 static_cast<double>(overuse_detectors_.size()); |
| 172 const RateControlInput input(bw_state, | 172 const RateControlInput input(bw_state, |
| 173 incoming_bitrate_.Rate(now_ms), | 173 incoming_bitrate_.Rate(now_ms), |
| 174 mean_noise_var); | 174 mean_noise_var); |
| 175 const RateControlRegion region = remote_rate_->Update(&input, now_ms); | 175 remote_rate_->Update(&input, now_ms); |
| 176 unsigned int target_bitrate = remote_rate_->UpdateBandwidthEstimate(now_ms); | 176 unsigned int target_bitrate = remote_rate_->UpdateBandwidthEstimate(now_ms); |
| 177 if (remote_rate_->ValidEstimate()) { | 177 if (remote_rate_->ValidEstimate()) { |
| 178 process_interval_ms_ = remote_rate_->GetFeedbackInterval(); | 178 process_interval_ms_ = remote_rate_->GetFeedbackInterval(); |
| 179 std::vector<unsigned int> ssrcs; | 179 std::vector<unsigned int> ssrcs; |
| 180 GetSsrcs(&ssrcs); | 180 GetSsrcs(&ssrcs); |
| 181 observer_->OnReceiveBitrateChanged(ssrcs, target_bitrate); | 181 observer_->OnReceiveBitrateChanged(ssrcs, target_bitrate); |
| 182 } | 182 } |
| 183 for (it = overuse_detectors_.begin(); it != overuse_detectors_.end(); ++it) { | |
| 184 it->second->detector.SetRateControlRegion(region); | |
| 185 } | |
| 186 } | 183 } |
| 187 | 184 |
| 188 void RemoteBitrateEstimatorSingleStream::OnRttUpdate(int64_t rtt) { | 185 void RemoteBitrateEstimatorSingleStream::OnRttUpdate(int64_t rtt) { |
| 189 CriticalSectionScoped cs(crit_sect_.get()); | 186 CriticalSectionScoped cs(crit_sect_.get()); |
| 190 remote_rate_->SetRtt(rtt); | 187 remote_rate_->SetRtt(rtt); |
| 191 } | 188 } |
| 192 | 189 |
| 193 void RemoteBitrateEstimatorSingleStream::RemoveStream(unsigned int ssrc) { | 190 void RemoteBitrateEstimatorSingleStream::RemoveStream(unsigned int ssrc) { |
| 194 CriticalSectionScoped cs(crit_sect_.get()); | 191 CriticalSectionScoped cs(crit_sect_.get()); |
| 195 SsrcOveruseEstimatorMap::iterator it = overuse_detectors_.find(ssrc); | 192 SsrcOveruseEstimatorMap::iterator it = overuse_detectors_.find(ssrc); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 226 assert(ssrcs); | 223 assert(ssrcs); |
| 227 ssrcs->resize(overuse_detectors_.size()); | 224 ssrcs->resize(overuse_detectors_.size()); |
| 228 int i = 0; | 225 int i = 0; |
| 229 for (SsrcOveruseEstimatorMap::const_iterator it = overuse_detectors_.begin(); | 226 for (SsrcOveruseEstimatorMap::const_iterator it = overuse_detectors_.begin(); |
| 230 it != overuse_detectors_.end(); ++it, ++i) { | 227 it != overuse_detectors_.end(); ++it, ++i) { |
| 231 (*ssrcs)[i] = it->first; | 228 (*ssrcs)[i] = it->first; |
| 232 } | 229 } |
| 233 } | 230 } |
| 234 | 231 |
| 235 } // namespace webrtc | 232 } // namespace webrtc |
| OLD | NEW |