Suppress REMB in bitrate ctrl if it seems lika a short network glitch.
BUG=4082
R=stefan@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/37369004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@7948 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
index 5e1fd46..605190d 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
@@ -83,7 +83,8 @@
return new BitrateControllerImpl(clock, enforce_min_bitrate);
}
-BitrateControllerImpl::BitrateControllerImpl(Clock* clock, bool enforce_min_bitrate)
+BitrateControllerImpl::BitrateControllerImpl(Clock* clock,
+ bool enforce_min_bitrate)
: clock_(clock),
last_bitrate_update_ms_(clock_->TimeInMilliseconds()),
critsect_(CriticalSectionWrapper::CreateCriticalSection()),
@@ -96,7 +97,9 @@
last_rtt_ms_(0),
last_enforce_min_bitrate_(!enforce_min_bitrate_),
bitrate_observers_modified_(false),
- last_reserved_bitrate_bps_(0) {}
+ last_reserved_bitrate_bps_(0),
+ remb_suppressor_(new RembSuppressor(clock)) {
+}
BitrateControllerImpl::~BitrateControllerImpl() {
BitrateObserverConfList::iterator it = bitrate_observers_.begin();
@@ -219,6 +222,9 @@
void BitrateControllerImpl::OnReceivedEstimatedBitrate(uint32_t bitrate) {
CriticalSectionScoped cs(critsect_);
+ if (remb_suppressor_->SuppresNewRemb(bitrate)) {
+ return;
+ }
bandwidth_estimation_.UpdateReceiverEstimate(bitrate);
MaybeTriggerOnNetworkChanged();
}
@@ -378,4 +384,14 @@
return false;
}
+void BitrateControllerImpl::SetBitrateSent(uint32_t bitrate_sent_bps) {
+ CriticalSectionScoped cs(critsect_);
+ remb_suppressor_->SetBitrateSent(bitrate_sent_bps);
+}
+
+void BitrateControllerImpl::SetCodecMode(webrtc::VideoCodecMode mode) {
+ CriticalSectionScoped cs(critsect_);
+ remb_suppressor_->SetEnabled(mode == kScreensharing);
+}
+
} // namespace webrtc