Reland of Fix the video buffer size should take rtt into consideration (patchset #2 id:160001 of https://codereview.chromium.org/3002033002/ )

Reason for revert:
Fixes has landed.

Original issue's description:
> Revert of Fix the video buffer size should take rtt into consideration (patchset #3 id:40001 of https://codereview.chromium.org/2980413002/ )
>
> Reason for revert:
> We are not certain this is the behavior we want.
>
> Original issue's description:
> > Fix the video buffer size should take rtt into consideration
> >
> > BUG=webrtc:8010
> >
> > Review-Url: https://codereview.webrtc.org/2980413002
> > Cr-Commit-Position: refs/heads/master@{#19285}
> > Committed: https://chromium.googlesource.com/external/webrtc/+/f1e08d0b5848d32fd31c5b6e4e570115c32b7ce5
>
> TBR=sprang@webrtc.org,gustavogb@gmail.com
> # Not skipping CQ checks because original CL landed more than 1 days ago.
> BUG=webrtc:8010
>
> Review-Url: https://codereview.webrtc.org/3002033002
> Cr-Commit-Position: refs/heads/master@{#19442}
> Committed: https://chromium.googlesource.com/external/webrtc/+/bdbc8895f3a630a4fe28d4661d8e71877ecaf14d

TBR=sprang@webrtc.org,gustavogb@gmail.com
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=webrtc:8010

Review-Url: https://codereview.webrtc.org/3016633002
Cr-Commit-Position: refs/heads/master@{#19944}
diff --git a/AUTHORS b/AUTHORS
index ed702b6..3bf6671 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -61,6 +61,7 @@
 ARM Holdings <*@arm.com>
 BroadSoft Inc. <*@broadsoft.com>
 Google Inc. <*@google.com>
+Life On Air Inc. <*@lifeonair.com>
 Intel Corporation <*@intel.com>
 MIPS Technologies <*@mips.com>
 Mozilla Foundation <*@mozilla.com>
diff --git a/modules/video_coding/frame_buffer2.cc b/modules/video_coding/frame_buffer2.cc
index 50c3763..b4bb002 100644
--- a/modules/video_coding/frame_buffer2.cc
+++ b/modules/video_coding/frame_buffer2.cc
@@ -147,6 +147,8 @@
         float rtt_mult = protection_mode_ == kProtectionNackFEC ? 0.0 : 1.0;
         timing_->SetJitterDelay(jitter_estimator_->GetJitterEstimate(rtt_mult));
         timing_->UpdateCurrentDelay(frame->RenderTime(), now_ms);
+      } else {
+        jitter_estimator_->FrameNacked();
       }
 
       // Gracefully handle bad RTP timestamps and render time issues.
@@ -247,6 +249,11 @@
   new_continuous_frame_event_.Set();
 }
 
+void FrameBuffer::UpdateRtt(int64_t rtt_ms) {
+  rtc::CritScope lock(&crit_);
+  jitter_estimator_->UpdateRtt(rtt_ms);
+}
+
 bool FrameBuffer::ValidReferences(const FrameObject& frame) const {
   if (frame.picture_id < 0)
     return false;
diff --git a/modules/video_coding/frame_buffer2.h b/modules/video_coding/frame_buffer2.h
index 32eba8a..e502666 100644
--- a/modules/video_coding/frame_buffer2.h
+++ b/modules/video_coding/frame_buffer2.h
@@ -74,6 +74,9 @@
   // return immediately.
   void Stop();
 
+  // Updates the RTT for jitter buffer estimation.
+  void UpdateRtt(int64_t rtt_ms);
+
  private:
   struct FrameKey {
     FrameKey() : picture_id(-1), spatial_layer(0) {}
diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc
index 1db7689..3690591 100644
--- a/video/video_receive_stream.cc
+++ b/video/video_receive_stream.cc
@@ -176,6 +176,7 @@
 
   frame_buffer_->Start();
   call_stats_->RegisterStatsObserver(&rtp_video_stream_receiver_);
+  call_stats_->RegisterStatsObserver(this);
 
   if (rtp_video_stream_receiver_.IsRetransmissionsEnabled() &&
       protected_by_fec) {
@@ -225,6 +226,7 @@
   rtp_video_stream_receiver_.StopReceive();
 
   frame_buffer_->Stop();
+  call_stats_->DeregisterStatsObserver(this);
   call_stats_->DeregisterStatsObserver(&rtp_video_stream_receiver_);
   process_thread_->DeRegisterModule(&video_receiver_);
 
@@ -347,6 +349,10 @@
     rtp_video_stream_receiver_.FrameContinuous(last_continuous_pid);
 }
 
+void VideoReceiveStream::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) {
+  frame_buffer_->UpdateRtt(max_rtt_ms);
+}
+
 int VideoReceiveStream::id() const {
   RTC_DCHECK_CALLED_SEQUENTIALLY(&worker_sequence_checker_);
   return config_.rtp.remote_ssrc;
diff --git a/video/video_receive_stream.h b/video/video_receive_stream.h
index 7a4a13e..b2eaa5e 100644
--- a/video/video_receive_stream.h
+++ b/video/video_receive_stream.h
@@ -50,7 +50,8 @@
                            public NackSender,
                            public KeyFrameRequestSender,
                            public video_coding::OnCompleteFrameCallback,
-                           public Syncable {
+                           public Syncable,
+                           public CallStatsObserver {
  public:
   VideoReceiveStream(RtpStreamReceiverControllerInterface* receiver_controller,
                      int num_cpu_cores,
@@ -103,6 +104,9 @@
   void OnCompleteFrame(
       std::unique_ptr<video_coding::FrameObject> frame) override;
 
+  // Implements CallStatsObserver::OnRttUpdate
+  void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
+
   // Implements Syncable.
   int id() const override;
   rtc::Optional<Syncable::Info> GetInfo() const override;