Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
index d44cf683dc03e4460506f9698b1402ead4086636..f35680b2d1888df392391e575980b70c4076bc86 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
@@ -38,6 +38,7 @@ namespace { |
const int kTransmissionTimeOffsetExtensionId = 1; |
const int kAbsoluteSendTimeExtensionId = 14; |
const int kTransportSequenceNumberExtensionId = 13; |
+const int kVideoTimingExtensionId = 12; |
const int kPayload = 100; |
const int kRtxPayload = 98; |
const uint32_t kTimestamp = 10; |
@@ -74,6 +75,8 @@ class LoopbackTransportTest : public webrtc::Transport { |
kVideoRotationExtensionId); |
receivers_extensions_.Register(kRtpExtensionAudioLevel, |
kAudioLevelExtensionId); |
+ receivers_extensions_.Register(kRtpExtensionVideoTiming, |
+ kVideoTimingExtensionId); |
} |
bool SendRtp(const uint8_t* data, |
@@ -347,6 +350,7 @@ TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) { |
EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
} |
+ |
TEST_P(RtpSenderTestWithoutPacer, |
TransportFeedbackObserverGetsCorrectByteCount) { |
constexpr int kRtpOverheadBytesPerPacket = 12 + 8; |
@@ -460,6 +464,58 @@ TEST_P(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
} |
+TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) { |
+ rtp_sender_->SetStorePacketsStatus(true, 10); |
+ EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
+ kRtpExtensionVideoTiming, |
+ kVideoTimingExtensionId)); |
+ EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
+ kRtpExtensionTransmissionTimeOffset, |
+ kTransmissionTimeOffsetExtensionId)); |
+ EXPECT_EQ( |
+ 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
+ kAbsoluteSendTimeExtensionId)); |
sprang_webrtc
2017/06/13 14:14:14
why toffset and ast extensions?
ilnik
2017/06/13 14:55:44
Leftover from copypaste and playing around. Remove
|
+ int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
+ auto packet = rtp_sender_->AllocatePacket(); |
+ packet->SetPayloadType(kPayload); |
+ packet->SetMarker(true); |
+ packet->SetTimestamp(kTimestamp); |
+ packet->set_capture_time_ms(capture_time_ms); |
+ VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; |
sprang_webrtc
2017/06/13 14:14:14
const
ilnik
2017/06/13 14:55:44
Done.
|
+ packet->SetExtension<VideoTimingExtension>(kVideoTiming); |
+ EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
+ size_t packet_size = packet->size(); |
+ webrtc::RTPHeader rtp_header; |
+ |
+ packet->GetHeader(&rtp_header); |
+ |
+ const int kStoredTimeInMs = 100; |
+ fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
+ |
+ EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
+ kAllowRetransmission, |
+ RtpPacketSender::kNormalPriority)); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
+ EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
+ |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
+ EXPECT_TRUE(rtp_header.extension.hasVideoTiming); |
+ EXPECT_EQ(kStoredTimeInMs, |
+ rtp_header.extension.videoTiming.pacer_exit_ms_delta); |
sprang_webrtc
2017/06/13 14:14:14
nit: indentation?
ilnik
2017/06/13 14:55:44
Done.
|
+ |
+ fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
+ rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, |
+ PacedPacketInfo()); |
+ |
+ EXPECT_EQ(2, transport_.packets_sent()); |
+ EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
+ |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
+ EXPECT_TRUE(rtp_header.extension.hasVideoTiming); |
+ EXPECT_EQ(kStoredTimeInMs * 2, |
+ rtp_header.extension.videoTiming.pacer_exit_ms_delta); |
+} |
+ |
TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { |
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
kSsrc, kSeqNum, _, _, _)); |