Report timing frames info in GetStats.

Some frames are already marked as 'timing frames' via video-timing RTP header extension. Timestamps along full WebRTC pipeline are gathered for these frames. This CL implements reporting of these timestamps for a single
timing frame since the last GetStats(). The frame with the longest end-to-end delay between two consecutive GetStats calls is reported.

The purpose of this timing information is not to provide a realtime statistics but to provide debugging information as it will help identify problematic places in video pipeline for outliers (frames which took longest to process).

BUG=webrtc:7594

Review-Url: https://codereview.webrtc.org/2946413002
Cr-Commit-Position: refs/heads/master@{#18909}
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
index f630baf..c3fc9dc 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
@@ -266,40 +266,41 @@
 constexpr const char* VideoTimingExtension::kUri;
 
 bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data,
-                                 VideoTiming* timing) {
+                                 VideoSendTiming* timing) {
   RTC_DCHECK(timing);
   if (data.size() != kValueSizeBytes)
     return false;
   timing->encode_start_delta_ms =
       ByteReader<uint16_t>::ReadBigEndian(data.data());
   timing->encode_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
-      data.data() + 2 * VideoTiming::kEncodeFinishDeltaIdx);
+      data.data() + 2 * VideoSendTiming::kEncodeFinishDeltaIdx);
   timing->packetization_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
-      data.data() + 2 * VideoTiming::kPacketizationFinishDeltaIdx);
+      data.data() + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx);
   timing->pacer_exit_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
-      data.data() + 2 * VideoTiming::kPacerExitDeltaIdx);
+      data.data() + 2 * VideoSendTiming::kPacerExitDeltaIdx);
   timing->network_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
-      data.data() + 2 * VideoTiming::kNetworkTimestampDeltaIdx);
+      data.data() + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx);
   timing->network2_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
-      data.data() + 2 * VideoTiming::kNetwork2TimestampDeltaIdx);
+      data.data() + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx);
   timing->is_timing_frame = true;
   return true;
 }
 
-bool VideoTimingExtension::Write(uint8_t* data, const VideoTiming& timing) {
+bool VideoTimingExtension::Write(uint8_t* data, const VideoSendTiming& timing) {
   ByteWriter<uint16_t>::WriteBigEndian(data, timing.encode_start_delta_ms);
   ByteWriter<uint16_t>::WriteBigEndian(
-      data + 2 * VideoTiming::kEncodeFinishDeltaIdx,
+      data + 2 * VideoSendTiming::kEncodeFinishDeltaIdx,
       timing.encode_finish_delta_ms);
   ByteWriter<uint16_t>::WriteBigEndian(
-      data + 2 * VideoTiming::kPacketizationFinishDeltaIdx,
+      data + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx,
       timing.packetization_finish_delta_ms);
   ByteWriter<uint16_t>::WriteBigEndian(
-      data + 2 * VideoTiming::kPacerExitDeltaIdx, timing.pacer_exit_delta_ms);
+      data + 2 * VideoSendTiming::kPacerExitDeltaIdx,
+      timing.pacer_exit_delta_ms);
   ByteWriter<uint16_t>::WriteBigEndian(
-      data + 2 * VideoTiming::kNetworkTimestampDeltaIdx, 0);  // reserved
+      data + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx, 0);  // reserved
   ByteWriter<uint16_t>::WriteBigEndian(
-      data + 2 * VideoTiming::kNetwork2TimestampDeltaIdx, 0);  // reserved
+      data + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx, 0);  // reserved
   return true;
 }