Remove the last getters from VideoReceiveStream stats.

R=stefan@webrtc.org
BUG=1667

Review URL: https://webrtc-codereview.appspot.com/32899004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7965 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/video_coding/main/interface/video_coding.h b/webrtc/modules/video_coding/main/interface/video_coding.h
index 41b16c2..94e8f9d 100644
--- a/webrtc/modules/video_coding/main/interface/video_coding.h
+++ b/webrtc/modules/video_coding/main/interface/video_coding.h
@@ -582,8 +582,6 @@
         EncodedImageCallback* observer) = 0;
     virtual void RegisterPostEncodeImageCallback(
         EncodedImageCallback* post_encode_callback) = 0;
-    virtual void RegisterReceiveFrameCountObserver(
-        FrameCountObserver* frame_count_observer) = 0;
 };
 
 }  // namespace webrtc
diff --git a/webrtc/modules/video_coding/main/interface/video_coding_defines.h b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
index 1bf3d6f..976a176 100644
--- a/webrtc/modules/video_coding/main/interface/video_coding_defines.h
+++ b/webrtc/modules/video_coding/main/interface/video_coding_defines.h
@@ -109,8 +109,9 @@
 // Callback class used for informing the user of the incoming bit rate and frame rate.
 class VCMReceiveStatisticsCallback {
  public:
-  virtual int32_t OnReceiveStatisticsUpdate(const uint32_t bitRate,
-                                            const uint32_t frameRate) = 0;
+  virtual void OnReceiveRatesUpdated(uint32_t bitRate, uint32_t frameRate) = 0;
+  virtual void OnDiscardedPacketsUpdated(int discarded_packets) = 0;
+  virtual void OnFrameCountsUpdated(const FrameCounts& frame_counts) = 0;
 
  protected:
   virtual ~VCMReceiveStatisticsCallback() {
diff --git a/webrtc/modules/video_coding/main/source/jitter_buffer.cc b/webrtc/modules/video_coding/main/source/jitter_buffer.cc
index 6da342d..2a590df 100644
--- a/webrtc/modules/video_coding/main/source/jitter_buffer.cc
+++ b/webrtc/modules/video_coding/main/source/jitter_buffer.cc
@@ -124,7 +124,7 @@
       incomplete_frames_(),
       last_decoded_state_(),
       first_packet_since_reset_(true),
-      frame_count_observer_(NULL),
+      stats_callback_(NULL),
       incoming_frame_rate_(0),
       incoming_frame_count_(0),
       time_last_incoming_frame_count_(0),
@@ -570,6 +570,8 @@
     if (packet.sizeBytes > 0) {
       num_discarded_packets_++;
       num_consecutive_old_packets_++;
+      if (stats_callback_ != NULL)
+        stats_callback_->OnDiscardedPacketsUpdated(num_discarded_packets_);
     }
     // Update last decoded sequence number if the packet arrived late and
     // belongs to a frame with a timestamp equal to the last decoded
@@ -1040,10 +1042,10 @@
   *timestamp_end = decodable_frames_.Back()->TimeStamp();
 }
 
-void VCMJitterBuffer::RegisterFrameCountObserver(
-    FrameCountObserver* frame_count_observer) {
+void VCMJitterBuffer::RegisterStatsCallback(
+    VCMReceiveStatisticsCallback* callback) {
   CriticalSectionScoped cs(crit_sect_);
-  frame_count_observer_ = frame_count_observer;
+  stats_callback_ = callback;
 }
 
 VCMFrameBuffer* VCMJitterBuffer::GetEmptyFrame() {
@@ -1118,8 +1120,8 @@
     } else {
       ++receive_statistics_.delta_frames;
     }
-    if (frame_count_observer_ != NULL)
-      frame_count_observer_->FrameCountUpdated(receive_statistics_, 0);
+    if (stats_callback_ != NULL)
+      stats_callback_->OnFrameCountsUpdated(receive_statistics_);
   }
 }
 
diff --git a/webrtc/modules/video_coding/main/source/jitter_buffer.h b/webrtc/modules/video_coding/main/source/jitter_buffer.h
index c2833f0..5ac2b7a 100644
--- a/webrtc/modules/video_coding/main/source/jitter_buffer.h
+++ b/webrtc/modules/video_coding/main/source/jitter_buffer.h
@@ -184,7 +184,7 @@
   // corresponding to the start and end of the continuous complete buffer.
   void RenderBufferSize(uint32_t* timestamp_start, uint32_t* timestamp_end);
 
-  void RegisterFrameCountObserver(FrameCountObserver* observer);
+  void RegisterStatsCallback(VCMReceiveStatisticsCallback* callback);
 
  private:
   class SequenceNumberLessThan {
@@ -303,8 +303,8 @@
   bool first_packet_since_reset_;
 
   // Statistics.
+  VCMReceiveStatisticsCallback* stats_callback_ GUARDED_BY(crit_sect_);
   // Frame counts for each type (key, delta, ...)
-  FrameCountObserver* frame_count_observer_ GUARDED_BY(crit_sect_);
   FrameCounts receive_statistics_;
   // Latest calculated frame rates of incoming stream.
   unsigned int incoming_frame_rate_;
diff --git a/webrtc/modules/video_coding/main/source/receiver.cc b/webrtc/modules/video_coding/main/source/receiver.cc
index a18488d..e1a4e2f 100644
--- a/webrtc/modules/video_coding/main/source/receiver.cc
+++ b/webrtc/modules/video_coding/main/source/receiver.cc
@@ -270,9 +270,9 @@
   return render_end - render_start;
 }
 
-void VCMReceiver::RegisterFrameCountObserver(
-    FrameCountObserver* frame_count_observer) {
-  jitter_buffer_.RegisterFrameCountObserver(frame_count_observer);
+void VCMReceiver::RegisterStatsCallback(
+    VCMReceiveStatisticsCallback* callback) {
+  jitter_buffer_.RegisterStatsCallback(callback);
 }
 
 }  // namespace webrtc
diff --git a/webrtc/modules/video_coding/main/source/receiver.h b/webrtc/modules/video_coding/main/source/receiver.h
index bfe510c..068715f 100644
--- a/webrtc/modules/video_coding/main/source/receiver.h
+++ b/webrtc/modules/video_coding/main/source/receiver.h
@@ -79,7 +79,7 @@
   // the time this function is called.
   int RenderBufferSizeMs();
 
-  void RegisterFrameCountObserver(FrameCountObserver* frame_count_observer);
+  void RegisterStatsCallback(VCMReceiveStatisticsCallback* callback);
 
  private:
   static int32_t GenerateReceiverId();
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.cc b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
index 08e7e73..ac938e6 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
@@ -278,11 +278,6 @@
     return receiver_->RegisterRenderBufferSizeCallback(callback);
   }
 
-  virtual void RegisterReceiveFrameCountObserver(
-      FrameCountObserver* frame_count_observer) OVERRIDE {
-    receiver_->RegisterFrameCountObserver(frame_count_observer);
-  }
-
   virtual int32_t Decode(uint16_t maxWaitTimeMs) OVERRIDE {
     return receiver_->Decode(maxWaitTimeMs);
   }
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.h b/webrtc/modules/video_coding/main/source/video_coding_impl.h
index ed50ef4..3454e9c 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.h
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.h
@@ -182,7 +182,6 @@
   int32_t Process();
 
   void RegisterPreDecodeImageCallback(EncodedImageCallback* observer);
-  void RegisterFrameCountObserver(FrameCountObserver* frame_count_observer);
 
  protected:
   int32_t Decode(const webrtc::VCMEncodedFrame& frame)
diff --git a/webrtc/modules/video_coding/main/source/video_receiver.cc b/webrtc/modules/video_coding/main/source/video_receiver.cc
index 3813205..f623c7d 100644
--- a/webrtc/modules/video_coding/main/source/video_receiver.cc
+++ b/webrtc/modules/video_coding/main/source/video_receiver.cc
@@ -74,7 +74,7 @@
       uint32_t bitRate;
       uint32_t frameRate;
       _receiver.ReceiveStatistics(&bitRate, &frameRate);
-      _receiveStatsCallback->OnReceiveStatisticsUpdate(bitRate, frameRate);
+      _receiveStatsCallback->OnReceiveRatesUpdated(bitRate, frameRate);
     }
 
     if (_decoderTimingCallback != NULL) {
@@ -284,6 +284,7 @@
 int32_t VideoReceiver::RegisterReceiveStatisticsCallback(
     VCMReceiveStatisticsCallback* receiveStats) {
   CriticalSectionScoped cs(process_crit_sect_.get());
+  _receiver.RegisterStatsCallback(receiveStats);
   _receiveStatsCallback = receiveStats;
   return VCM_OK;
 }
@@ -666,10 +667,6 @@
   CriticalSectionScoped cs(_receiveCritSect);
   pre_decode_image_callback_ = observer;
 }
-void VideoReceiver::RegisterFrameCountObserver(
-    FrameCountObserver* frame_count_observer) {
-  _receiver.RegisterFrameCountObserver(frame_count_observer);
-}
 
 }  // namespace vcm
 }  // namespace webrtc