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