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

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

Issue 3000753002: Add a flags field to video timing extension. (Closed)
Patch Set: Created 3 years, 4 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 5e172c4f669c5caa0f081c9a7ef6d5525553f509..4d5baa71317169d3d6bce07c63e801fa3220fe4e 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
@@ -248,7 +248,13 @@ bool VideoContentTypeExtension::Write(uint8_t* data,
// Video Timing.
// 6 timestamps in milliseconds counted from capture time stored in rtp header:
// encode start/finish, packetization complete, pacer exit and reserved for
-// modification by the network modification.
+// modification by the network modification. |flags| is a bitmask and has the
+// following allowed values:
+// 0 = Valid data, but no flags available (backwards compatibility)
+// 1 = Frame marked as timing frame due to cyclic timer.
+// 2 = Frame marked as timing frame due to size being bein an outlier.
danilchap 2017/08/11 12:22:35 bein?
sprang_webrtc 2017/08/11 13:19:05 typo, slightly rephrased.
+// 255 = Invalid. The whole timing frame extension should be ignored.
danilchap 2017/08/11 12:22:36 what is a usecase to use this value on the wire? i
sprang_webrtc 2017/08/11 13:19:05 This value (255) should not normally be used on th
+//
// 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
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -258,8 +264,8 @@ bool VideoContentTypeExtension::Write(uint8_t* data,
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | ms delta | network timestamp ms delta | network2 time-|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-// | stamp ms delta|
-// +-+-+-+-+-+-+-+-+
+// | stamp ms delta| flags |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
constexpr RTPExtensionType VideoTimingExtension::kId;
constexpr uint8_t VideoTimingExtension::kValueSizeBytes;
@@ -268,47 +274,55 @@ constexpr const char VideoTimingExtension::kUri[];
bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data,
VideoSendTiming* timing) {
RTC_DCHECK(timing);
- if (data.size() != kValueSizeBytes)
+ const bool is_old_protocol = data.size() == (kValueSizeBytes - 1);
danilchap 2017/08/11 12:22:35 may be add TODO to remove support for old protocol
sprang_webrtc 2017/08/11 13:19:05 Done.
+
+ if (!(data.size() == kValueSizeBytes || is_old_protocol))
return false;
- timing->encode_start_delta_ms =
- ByteReader<uint16_t>::ReadBigEndian(data.data());
+ timing->encode_start_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
+ data.data() + VideoSendTiming::kEncodeStartDeltaIdx);
timing->encode_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
- data.data() + 2 * VideoSendTiming::kEncodeFinishDeltaIdx);
+ data.data() + VideoSendTiming::kEncodeFinishDeltaIdx);
timing->packetization_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
- data.data() + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx);
+ data.data() + VideoSendTiming::kPacketizationFinishDeltaIdx);
timing->pacer_exit_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
- data.data() + 2 * VideoSendTiming::kPacerExitDeltaIdx);
+ data.data() + VideoSendTiming::kPacerExitDeltaIdx);
timing->network_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
- data.data() + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx);
+ data.data() + VideoSendTiming::kNetworkTimestampDeltaIdx);
timing->network2_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
- data.data() + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx);
- timing->is_timing_frame = true;
+ data.data() + VideoSendTiming::kNetwork2TimestampDeltaIdx);
+ timing->flags = is_old_protocol
+ ? 0
+ : ByteReader<uint8_t>::ReadBigEndian(
+ data.data() + VideoSendTiming::kFLagsIdx);
return true;
}
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 * VideoSendTiming::kEncodeFinishDeltaIdx,
+ data + VideoSendTiming::kEncodeStartDeltaIdx,
+ timing.encode_start_delta_ms);
+ ByteWriter<uint16_t>::WriteBigEndian(
+ data + VideoSendTiming::kEncodeFinishDeltaIdx,
timing.encode_finish_delta_ms);
ByteWriter<uint16_t>::WriteBigEndian(
- data + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx,
+ data + VideoSendTiming::kPacketizationFinishDeltaIdx,
timing.packetization_finish_delta_ms);
ByteWriter<uint16_t>::WriteBigEndian(
- data + 2 * VideoSendTiming::kPacerExitDeltaIdx,
- timing.pacer_exit_delta_ms);
+ data + VideoSendTiming::kPacerExitDeltaIdx, timing.pacer_exit_delta_ms);
ByteWriter<uint16_t>::WriteBigEndian(
- data + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx, 0); // reserved
+ data + VideoSendTiming::kNetworkTimestampDeltaIdx, 0); // reserved
ByteWriter<uint16_t>::WriteBigEndian(
- data + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx, 0); // reserved
+ data + VideoSendTiming::kNetwork2TimestampDeltaIdx, 0); // reserved
+ ByteWriter<uint8_t>::WriteBigEndian(data + VideoSendTiming::kFLagsIdx,
+ timing.flags);
return true;
}
bool VideoTimingExtension::Write(uint8_t* data,
uint16_t time_delta_ms,
uint8_t idx) {
danilchap 2017/08/11 12:22:35 may be rename index to offset
sprang_webrtc 2017/08/11 13:19:05 Done.
- RTC_DCHECK_LT(idx, 6);
- ByteWriter<uint16_t>::WriteBigEndian(data + 2 * idx, time_delta_ms);
+ RTC_DCHECK_LT(idx, kValueSizeBytes);
danilchap 2017/08/11 12:22:36 may be LE(offset, kValueSizeBytes - 2) since you w
sprang_webrtc 2017/08/11 13:19:05 Good idea. using kValueSizeBytes - sizeof(uint16_t
+ ByteWriter<uint16_t>::WriteBigEndian(data + idx, time_delta_ms);
return true;
}

Powered by Google App Engine
This is Rietveld 408576698