Revert of Add a flags field to video timing extension. (patchset #15 id:280001 of https://codereview.webrtc.org/3000753002/ )
Reason for revert:
Speculative revet for breaking remoting_unittests in fyi bots.
https://build.chromium.org/p/chromium.webrtc.fyi/waterfall?builder=Win7%20Tester
Original issue's description:
> Add a flags field to video timing extension.
>
> The rtp header extension for video timing shuold have an additional
> field for signaling metadata, such as what triggered the extension for
> this particular frame. This will allow separating frames select because
> of outlier sizes from regular frames, for more accurate stats.
>
> This implementation is backwards compatible in that it can read video
> timing extensions without the new flag field, but it always sends with
> it included.
>
> BUG=webrtc:7594
>
> Review-Url: https://codereview.webrtc.org/3000753002
> Cr-Commit-Position: refs/heads/master@{#19353}
> Committed: cf5d485e14
TBR=danilchap@webrtc.org,kthelgason@webrtc.org,stefan@webrtc.org,sprang@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7594
Review-Url: https://codereview.webrtc.org/2995953002
Cr-Commit-Position: refs/heads/master@{#19360}
This commit is contained in:
@ -248,24 +248,18 @@ 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. |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 outside limit.
|
||||
// 255 = Invalid. The whole timing frame extension should be ignored.
|
||||
//
|
||||
// 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=12| flags | encode start ms delta |
|
||||
// | ID | len=11| encode start ms delta | encode finish |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | encode finish ms delta | packetizer finish ms delta |
|
||||
// | ms delta | packetizer finish ms delta | pacer exit |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | pacer exit ms delta | network timestamp ms delta |
|
||||
// | ms delta | network timestamp ms delta | network2 time-|
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | network2 timestamp ms delta |
|
||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
// | stamp ms delta|
|
||||
// +-+-+-+-+-+-+-+-+
|
||||
|
||||
constexpr RTPExtensionType VideoTimingExtension::kId;
|
||||
constexpr uint8_t VideoTimingExtension::kValueSizeBytes;
|
||||
@ -274,62 +268,47 @@ constexpr const char VideoTimingExtension::kUri[];
|
||||
bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data,
|
||||
VideoSendTiming* timing) {
|
||||
RTC_DCHECK(timing);
|
||||
// TODO(sprang): Deprecate support for old wire format.
|
||||
ptrdiff_t off = 0;
|
||||
switch (data.size()) {
|
||||
case kValueSizeBytes - 1:
|
||||
timing->flags = 0;
|
||||
off = 1; // Old wire format without the flags field.
|
||||
break;
|
||||
case kValueSizeBytes:
|
||||
timing->flags = ByteReader<uint8_t>::ReadBigEndian(data.data());
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
timing->encode_start_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
|
||||
data.data() + VideoSendTiming::kEncodeStartDeltaOffset - off);
|
||||
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() + VideoSendTiming::kEncodeFinishDeltaOffset - off);
|
||||
data.data() + 2 * VideoSendTiming::kEncodeFinishDeltaIdx);
|
||||
timing->packetization_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
|
||||
data.data() + VideoSendTiming::kPacketizationFinishDeltaOffset - off);
|
||||
data.data() + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx);
|
||||
timing->pacer_exit_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
|
||||
data.data() + VideoSendTiming::kPacerExitDeltaOffset - off);
|
||||
data.data() + 2 * VideoSendTiming::kPacerExitDeltaIdx);
|
||||
timing->network_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
|
||||
data.data() + VideoSendTiming::kNetworkTimestampDeltaOffset - off);
|
||||
data.data() + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx);
|
||||
timing->network2_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian(
|
||||
data.data() + VideoSendTiming::kNetwork2TimestampDeltaOffset - off);
|
||||
data.data() + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx);
|
||||
timing->is_timing_frame = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VideoTimingExtension::Write(uint8_t* data, const VideoSendTiming& timing) {
|
||||
ByteWriter<uint8_t>::WriteBigEndian(data + VideoSendTiming::kFlagsOffset,
|
||||
timing.flags);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(data, timing.encode_start_delta_ms);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kEncodeStartDeltaOffset,
|
||||
timing.encode_start_delta_ms);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kEncodeFinishDeltaOffset,
|
||||
data + 2 * VideoSendTiming::kEncodeFinishDeltaIdx,
|
||||
timing.encode_finish_delta_ms);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kPacketizationFinishDeltaOffset,
|
||||
data + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx,
|
||||
timing.packetization_finish_delta_ms);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kPacerExitDeltaOffset,
|
||||
data + 2 * VideoSendTiming::kPacerExitDeltaIdx,
|
||||
timing.pacer_exit_delta_ms);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kNetworkTimestampDeltaOffset, 0); // reserved
|
||||
data + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx, 0); // reserved
|
||||
ByteWriter<uint16_t>::WriteBigEndian(
|
||||
data + VideoSendTiming::kNetwork2TimestampDeltaOffset, 0); // reserved
|
||||
data + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx, 0); // reserved
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VideoTimingExtension::Write(uint8_t* data,
|
||||
uint16_t time_delta_ms,
|
||||
uint8_t offset) {
|
||||
RTC_DCHECK_LT(offset, kValueSizeBytes - sizeof(uint16_t));
|
||||
ByteWriter<uint16_t>::WriteBigEndian(data + offset, time_delta_ms);
|
||||
uint8_t idx) {
|
||||
RTC_DCHECK_LT(idx, 6);
|
||||
ByteWriter<uint16_t>::WriteBigEndian(data + 2 * idx, time_delta_ms);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user