Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: webrtc/modules/congestion_controller/congestion_controller.cc

Issue 2000063003: Update the BWE when the network route changes. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Add TODO to re-create objects. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 14 matching lines...) Expand all
25 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h" 25 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h"
26 #include "webrtc/modules/utility/include/process_thread.h" 26 #include "webrtc/modules/utility/include/process_thread.h"
27 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 27 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
28 #include "webrtc/video/payload_router.h" 28 #include "webrtc/video/payload_router.h"
29 29
30 namespace webrtc { 30 namespace webrtc {
31 namespace { 31 namespace {
32 32
33 static const uint32_t kTimeOffsetSwitchThreshold = 30; 33 static const uint32_t kTimeOffsetSwitchThreshold = 30;
34 34
35 // Makes sure that the bitrate and the min, max values are in valid range.
36 static void ClampBitrates(int* bitrate_bps,
37 int* min_bitrate_bps,
38 int* max_bitrate_bps) {
39 // TODO(holmer): We should make sure the default bitrates are set to 10 kbps,
40 // and that we don't try to set the min bitrate to 0 from any applications.
41 // The congestion controller should allow a min bitrate of 0.
42 const int kMinBitrateBps = 10000;
43 if (*min_bitrate_bps < kMinBitrateBps)
44 *min_bitrate_bps = kMinBitrateBps;
45 if (*max_bitrate_bps > 0)
46 *max_bitrate_bps = std::max(*min_bitrate_bps, *max_bitrate_bps);
47 if (*bitrate_bps > 0)
48 *bitrate_bps = std::max(*min_bitrate_bps, *bitrate_bps);
49 }
50
35 class WrappingBitrateEstimator : public RemoteBitrateEstimator { 51 class WrappingBitrateEstimator : public RemoteBitrateEstimator {
36 public: 52 public:
37 WrappingBitrateEstimator(RemoteBitrateObserver* observer, Clock* clock) 53 WrappingBitrateEstimator(RemoteBitrateObserver* observer, Clock* clock)
38 : observer_(observer), 54 : observer_(observer),
39 clock_(clock), 55 clock_(clock),
40 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), 56 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
41 rbe_(new RemoteBitrateEstimatorSingleStream(observer_, clock_)), 57 rbe_(new RemoteBitrateEstimatorSingleStream(observer_, clock_)),
42 using_absolute_send_time_(false), 58 using_absolute_send_time_(false),
43 packets_since_absolute_send_time_(0), 59 packets_since_absolute_send_time_(0),
44 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) {} 60 min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) {}
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 221
206 CongestionController::~CongestionController() {} 222 CongestionController::~CongestionController() {}
207 223
208 void CongestionController::Init() { 224 void CongestionController::Init() {
209 transport_feedback_adapter_.SetBitrateEstimator( 225 transport_feedback_adapter_.SetBitrateEstimator(
210 new RemoteBitrateEstimatorAbsSendTime(&transport_feedback_adapter_)); 226 new RemoteBitrateEstimatorAbsSendTime(&transport_feedback_adapter_));
211 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( 227 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate(
212 min_bitrate_bps_); 228 min_bitrate_bps_);
213 } 229 }
214 230
215
216 void CongestionController::SetBweBitrates(int min_bitrate_bps, 231 void CongestionController::SetBweBitrates(int min_bitrate_bps,
217 int start_bitrate_bps, 232 int start_bitrate_bps,
218 int max_bitrate_bps) { 233 int max_bitrate_bps) {
219 // TODO(holmer): We should make sure the default bitrates are set to 10 kbps, 234 ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
220 // and that we don't try to set the min bitrate to 0 from any applications.
221 // The congestion controller should allow a min bitrate of 0.
222 const int kMinBitrateBps = 10000;
223 if (min_bitrate_bps < kMinBitrateBps)
224 min_bitrate_bps = kMinBitrateBps;
225 if (max_bitrate_bps > 0)
226 max_bitrate_bps = std::max(min_bitrate_bps, max_bitrate_bps);
227 if (start_bitrate_bps > 0)
228 start_bitrate_bps = std::max(min_bitrate_bps, start_bitrate_bps);
229
230 bitrate_controller_->SetBitrates(start_bitrate_bps, 235 bitrate_controller_->SetBitrates(start_bitrate_bps,
231 min_bitrate_bps, 236 min_bitrate_bps,
232 max_bitrate_bps); 237 max_bitrate_bps);
233 238
234 if (remote_bitrate_estimator_) 239 if (remote_bitrate_estimator_)
235 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps); 240 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
236 min_bitrate_bps_ = min_bitrate_bps; 241 min_bitrate_bps_ = min_bitrate_bps;
237 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( 242 transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate(
238 min_bitrate_bps_); 243 min_bitrate_bps_);
239 MaybeTriggerOnNetworkChanged(); 244 MaybeTriggerOnNetworkChanged();
240 } 245 }
241 246
247 void CongestionController::ResetBweAndBitrates(int bitrate_bps,
248 int min_bitrate_bps,
249 int max_bitrate_bps) {
250 ClampBitrates(&bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
251 // TODO(honghaiz): Recreate this object once the bitrate controller is
252 // no longer exposed outside CongestionController.
253 bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps,
254 max_bitrate_bps);
255 min_bitrate_bps_ = min_bitrate_bps;
256 // TODO(honghaiz): Recreate this object once the remote bitrate estimator is
257 // no longer exposed outside CongestionController.
258 if (remote_bitrate_estimator_)
259 remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
260
261 RemoteBitrateEstimator* rbe =
262 new RemoteBitrateEstimatorAbsSendTime(&transport_feedback_adapter_);
263 transport_feedback_adapter_.SetBitrateEstimator(rbe);
264 rbe->SetMinBitrate(min_bitrate_bps);
265 // TODO(holmer): Trigger a new probe once mid-call probing is implemented.
266 MaybeTriggerOnNetworkChanged();
267 }
268
242 BitrateController* CongestionController::GetBitrateController() const { 269 BitrateController* CongestionController::GetBitrateController() const {
243 return bitrate_controller_.get(); 270 return bitrate_controller_.get();
244 } 271 }
245 272
246 RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator( 273 RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator(
247 bool send_side_bwe) { 274 bool send_side_bwe) {
248 if (send_side_bwe) { 275 if (send_side_bwe) {
249 return &remote_estimator_proxy_; 276 return &remote_estimator_proxy_;
250 } else { 277 } else {
251 return remote_bitrate_estimator_.get(); 278 return remote_bitrate_estimator_.get();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 bool CongestionController::IsSendQueueFull() const { 366 bool CongestionController::IsSendQueueFull() const {
340 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; 367 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
341 } 368 }
342 369
343 bool CongestionController::IsNetworkDown() const { 370 bool CongestionController::IsNetworkDown() const {
344 rtc::CritScope cs(&critsect_); 371 rtc::CritScope cs(&critsect_);
345 return network_state_ == kNetworkDown; 372 return network_state_ == kNetworkDown;
346 } 373 }
347 374
348 } // namespace webrtc 375 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698