PacketBuffer now can save how many times a packet has been nacked.
Also save size/max nack count in the FrameObject/RtpFrameObject.

BUG=webrtc:5514
R=stefan@webrtc.org

Review URL: https://codereview.webrtc.org/1988653002 .

Cr-Commit-Position: refs/heads/master@{#12863}
diff --git a/webrtc/modules/video_coding/packet_buffer.cc b/webrtc/modules/video_coding/packet_buffer.cc
index 09fb249..ad0054f 100644
--- a/webrtc/modules/video_coding/packet_buffer.cc
+++ b/webrtc/modules/video_coding/packet_buffer.cc
@@ -137,18 +137,28 @@
     // If all packets of the frame is continuous, find the first packet of the
     // frame and create an RtpFrameObject.
     if (sequence_buffer_[index].frame_end) {
-      int start_index = index;
+      size_t frame_size = 0;
+      int max_nack_count = -1;
       uint16_t start_seq_num = seq_num;
 
-      while (!sequence_buffer_[start_index].frame_begin) {
+      // Find the start index by searching backward until the packet with
+      // the |frame_begin| flag is set.
+      int start_index = index;
+      while (true) {
+        frame_size += data_buffer_[start_index].sizeBytes;
+        max_nack_count = std::max(
+            max_nack_count, data_buffer_[start_index].timesNacked);
         sequence_buffer_[start_index].frame_created = true;
+
+        if (sequence_buffer_[start_index].frame_begin)
+          break;
+
         start_index = start_index > 0 ? start_index - 1 : size_ - 1;
         start_seq_num--;
       }
-      sequence_buffer_[start_index].frame_created = true;
 
-      std::unique_ptr<RtpFrameObject> frame(
-          new RtpFrameObject(this, start_seq_num, seq_num));
+      std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
+          this, start_seq_num, seq_num, frame_size, max_nack_count));
       reference_finder_.ManageFrame(std::move(frame));
     }