| Index: webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc | 
| diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc | 
| index 8ad60aea65aff66f3a0856b94bad65ed280285e5..5975c5f3b8c9d8c9e4c3206883dfd7832e1793e1 100644 | 
| --- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc | 
| +++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc | 
| @@ -85,6 +85,7 @@ bool RemoteBitrateEstimatorAbsSendTime::IsWithinClusterBounds( | 
| estimator_(), | 
| detector_(OverUseDetectorOptions()), | 
| incoming_bitrate_(kBitrateWindowMs, 8000), | 
| +        incoming_bitrate_initialized_(false), | 
| total_probes_received_(0), | 
| first_packet_time_ms_(-1), | 
| last_update_ms_(-1), | 
| @@ -243,6 +244,18 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacketInfo( | 
| int64_t now_ms = arrival_time_ms; | 
| // TODO(holmer): SSRCs are only needed for REMB, should be broken out from | 
| // here. | 
| + | 
| +  // Check if incoming bitrate estimate is valid, and if it needs to be reset. | 
| +  rtc::Optional<uint32_t> incoming_bitrate = incoming_bitrate_.Rate(now_ms); | 
| +  if (incoming_bitrate) { | 
| +    incoming_bitrate_initialized_ = true; | 
| +  } else if (incoming_bitrate_initialized_) { | 
| +    // Incoming bitrate had a previous valid value, but now not enough data | 
| +    // point are left within the current window. Reset incoming bitrate | 
| +    // estimator so that the window size will only contain new data points. | 
| +    incoming_bitrate_.Reset(); | 
| +    incoming_bitrate_initialized_ = false; | 
| +  } | 
| incoming_bitrate_.Update(payload_size, now_ms); | 
|  | 
| if (first_packet_time_ms_ == -1) | 
| @@ -303,10 +316,12 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacketInfo( | 
| if (last_update_ms_ == -1 || | 
| now_ms - last_update_ms_ > remote_rate_.GetFeedbackInterval()) { | 
| update_estimate = true; | 
| -      } else if (detector_.State() == kBwOverusing && | 
| -                 remote_rate_.TimeToReduceFurther( | 
| -                     now_ms, incoming_bitrate_.Rate(now_ms))) { | 
| -        update_estimate = true; | 
| +      } else if (detector_.State() == kBwOverusing) { | 
| +        rtc::Optional<uint32_t> incoming_rate = incoming_bitrate_.Rate(now_ms); | 
| +        if (incoming_rate && | 
| +            remote_rate_.TimeToReduceFurther(now_ms, *incoming_rate)) { | 
| +          update_estimate = true; | 
| +        } | 
| } | 
| } | 
|  | 
|  |