Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(676)

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc

Issue 2911193002: Implement timing frames. (Closed)
Patch Set: Fix CE Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
index 3bb9bc5553849a9acf1d756fd489b9d94c6f1ad3..6cad1605e15e6d035e7fc883231bddae239bf97c 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
@@ -244,6 +244,71 @@ bool VideoContentTypeExtension::Write(uint8_t* data,
return true;
}
+// Video Timing.
+// 5 timestamps in milliseconds counted from capture time stored in rtp header:
åsapersson 2017/06/12 14:33:41 6 timestamps
ilnik 2017/06/13 08:43:13 Done.
+// ecode start/finish, packetization complete, pacer exit and reserved for
åsapersson 2017/06/12 14:33:41 encode
ilnik 2017/06/13 08:43:13 Done.
+// modification by the network modification.
+// 0 1 2 3
+// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ID | len=11| encode start ms delta | encode finish |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ms delta | packetizer finish ms delta | pacer exit |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ms delta | network timestamp ms delta | network2 time-|
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | stamp ms delta|
+// +-+-+-+-+-+-+-+-+
+
+constexpr RTPExtensionType VideoTimingExtension::kId;
+constexpr uint8_t VideoTimingExtension::kValueSizeBytes;
+constexpr const char* VideoTimingExtension::kUri;
+
+bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data,
+ VideoTiming* timing) {
+ RTC_DCHECK(timing);
+ if (data.size() != kValueSizeBytes)
+ return false;
+ timing->encode_start_ms_delta =
+ ByteReader<uint16_t>::ReadBigEndian(data.data());
+ timing->encode_finish_ms_delta = ByteReader<uint16_t, 2>::ReadBigEndian(
åsapersson 2017/06/12 14:33:41 ByteReader<uint16_t> here and below.
ilnik 2017/06/13 08:43:13 Done.
+ data.data() + 2 * VideoTiming::kEncodeFinishIdx);
+ timing->packetization_finish_ms_delta = ByteReader<uint16_t>::ReadBigEndian(
+ data.data() + 2 * VideoTiming::kPacketizationFinishDeltaIdx);
+ timing->pacer_exit_ms_delta = ByteReader<uint16_t, 2>::ReadBigEndian(
+ data.data() + 2 * VideoTiming::kPacerExitDeltaIdx);
+ timing->network_timstamp_ms_delta = ByteReader<uint16_t, 2>::ReadBigEndian(
+ data.data() + 2 * VideoTiming::kNetworkTimestampDeltaIdx);
+ timing->network2_timstamp_ms_delta = ByteReader<uint16_t, 2>::ReadBigEndian(
+ data.data() + 2 * VideoTiming::kNetwork2TimestampDeltaIdx);
+ timing->is_timing_frame = true;
+ return true;
+}
+
+bool VideoTimingExtension::Write(uint8_t* data, const VideoTiming& timing) {
+ ByteWriter<uint16_t>::WriteBigEndian(data, timing.encode_start_ms_delta);
+ ByteWriter<uint16_t>::WriteBigEndian(data + 2 * VideoTiming::kEncodeFinishIdx,
+ timing.encode_finish_ms_delta);
+ ByteWriter<uint16_t>::WriteBigEndian(
+ data + 2 * VideoTiming::kPacketizationFinishDeltaIdx,
+ timing.packetization_finish_ms_delta);
+ ByteWriter<uint16_t>::WriteBigEndian(
+ data + 2 * VideoTiming::kPacerExitDeltaIdx, timing.pacer_exit_ms_delta);
+ ByteWriter<uint16_t>::WriteBigEndian(
+ data + 2 * VideoTiming::kNetworkTimestampDeltaIdx, 0); // reserved
+ ByteWriter<uint16_t>::WriteBigEndian(
+ data + 2 * VideoTiming::kNetwork2TimestampDeltaIdx, 0); // reserved
+ return true;
+}
+
+bool VideoTimingExtension::Write(uint8_t* data,
+ uint16_t time_delta_ms,
+ uint8_t idx) {
+ RTC_DCHECK_LT(idx, 6);
+ ByteWriter<uint16_t>::WriteBigEndian(data + 2 * idx, time_delta_ms);
+ return true;
+}
+
// RtpStreamId.
constexpr RTPExtensionType RtpStreamId::kId;
constexpr const char* RtpStreamId::kUri;

Powered by Google App Engine
This is Rietveld 408576698