Index: webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc |
diff --git a/webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc b/webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc |
index 5ba3353f43cb60112ac6d0b6419273a9d41a9e16..1e1eec715dd83387982f5427697066c7155b3c29 100644 |
--- a/webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc |
+++ b/webrtc/system_wrappers/source/rtp_to_ntp_unittest.cc |
@@ -37,66 +37,74 @@ TEST(WrapAroundTests, BackwardWrap) { |
EXPECT_EQ(-1, CheckForWrapArounds(0xFFFF0000, 0x0000FFFF)); |
} |
-TEST(WrapAroundTests, OldRtcpWrapped) { |
- RtcpList rtcp; |
+TEST(WrapAroundTests, OldRtcpWrapped_OldRtpTimestamp) { |
+ RtcpMeasurements rtcp; |
+ bool new_sr; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 1; |
uint32_t timestamp = 0; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
- ntp_frac += kOneMsInNtpFrac; |
- timestamp -= kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp -= kTimestampTicksPerMs; |
- int64_t timestamp_in_ms = -1; |
- // This expected to fail since it's highly unlikely that the older RTCP |
- // has a much smaller RTP timestamp than the newer. |
- EXPECT_FALSE(RtpToNtpMs(timestamp, rtcp, ×tamp_in_ms)); |
+ // Expected to fail since the older RTCP has a smaller RTP timestamp than the |
+ // newer (old:0, new:4294967206). |
+ EXPECT_FALSE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
} |
TEST(WrapAroundTests, NewRtcpWrapped) { |
- RtcpList rtcp; |
+ RtcpMeasurements rtcp; |
+ bool new_sr; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 1; |
uint32_t timestamp = 0xFFFFFFFF; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp += kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
int64_t timestamp_in_ms = -1; |
- EXPECT_TRUE(RtpToNtpMs(rtcp.back().rtp_timestamp, rtcp, ×tamp_in_ms)); |
+ EXPECT_TRUE( |
+ RtpToNtpMs(rtcp.list.back().rtp_timestamp, rtcp, ×tamp_in_ms)); |
// Since this RTP packet has the same timestamp as the RTCP packet constructed |
// at time 0 it should be mapped to 0 as well. |
EXPECT_EQ(0, timestamp_in_ms); |
} |
TEST(WrapAroundTests, RtpWrapped) { |
- RtcpList rtcp; |
+ RtcpMeasurements rtcp; |
+ bool new_sr; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 1; |
uint32_t timestamp = 0xFFFFFFFF - 2 * kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
- ntp_frac += kOneMsInNtpFrac; |
- timestamp += kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp += kTimestampTicksPerMs; |
- int64_t timestamp_in_ms = -1; |
- EXPECT_TRUE(RtpToNtpMs(timestamp, rtcp, ×tamp_in_ms)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ |
+ int64_t timestamp_ms = -1; |
+ EXPECT_TRUE(RtpToNtpMs(rtcp.list.back().rtp_timestamp, rtcp, ×tamp_ms)); |
// Since this RTP packet has the same timestamp as the RTCP packet constructed |
// at time 0 it should be mapped to 0 as well. |
- EXPECT_EQ(2, timestamp_in_ms); |
+ EXPECT_EQ(0, timestamp_ms); |
+ // Two kTimestampTicksPerMs advanced. |
+ timestamp += kTimestampTicksPerMs; |
+ EXPECT_TRUE(RtpToNtpMs(timestamp, rtcp, ×tamp_ms)); |
+ EXPECT_EQ(2, timestamp_ms); |
+ // Wrapped rtp. |
+ timestamp += kTimestampTicksPerMs; |
+ EXPECT_TRUE(RtpToNtpMs(timestamp, rtcp, ×tamp_ms)); |
+ EXPECT_EQ(3, timestamp_ms); |
} |
TEST(WrapAroundTests, OldRtp_RtcpsWrapped) { |
- RtcpList rtcp; |
+ RtcpMeasurements rtcp; |
+ bool new_sr; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 1; |
uint32_t timestamp = 0; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp += kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp -= 2*kTimestampTicksPerMs; |
int64_t timestamp_in_ms = -1; |
@@ -104,14 +112,15 @@ TEST(WrapAroundTests, OldRtp_RtcpsWrapped) { |
} |
TEST(WrapAroundTests, OldRtp_NewRtcpWrapped) { |
- RtcpList rtcp; |
+ RtcpMeasurements rtcp; |
+ bool new_sr; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 1; |
uint32_t timestamp = 0xFFFFFFFF; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp += kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
ntp_frac += kOneMsInNtpFrac; |
timestamp -= kTimestampTicksPerMs; |
int64_t timestamp_in_ms = -1; |
@@ -121,39 +130,48 @@ TEST(WrapAroundTests, OldRtp_NewRtcpWrapped) { |
EXPECT_EQ(0, timestamp_in_ms); |
} |
-TEST(WrapAroundTests, OldRtp_OldRtcpWrapped) { |
- RtcpList rtcp; |
+TEST(UpdateRtcpListTests, InjectRtcpSr) { |
+ const uint32_t kNtpSec = 10; |
+ const uint32_t kNtpFrac = 12345; |
+ const uint32_t kTs = 0x12345678; |
+ bool new_sr; |
+ RtcpMeasurements rtcp; |
+ EXPECT_TRUE(UpdateRtcpList(kNtpSec, kNtpFrac, kTs, &rtcp, &new_sr)); |
+ EXPECT_TRUE(new_sr); |
+ EXPECT_EQ(1u, rtcp.list.size()); |
+ EXPECT_EQ(kNtpSec, rtcp.list.front().ntp_secs); |
+ EXPECT_EQ(kNtpFrac, rtcp.list.front().ntp_frac); |
+ EXPECT_EQ(kTs, rtcp.list.front().rtp_timestamp); |
+ // Add second report. |
+ EXPECT_TRUE(UpdateRtcpList(kNtpSec, kNtpFrac + kOneMsInNtpFrac, kTs + 1, |
+ &rtcp, &new_sr)); |
+ EXPECT_EQ(2u, rtcp.list.size()); |
+ EXPECT_EQ(kTs + 1, rtcp.list.front().rtp_timestamp); |
+ EXPECT_EQ(kTs + 0, rtcp.list.back().rtp_timestamp); |
+ // List contains last two reports. |
+ EXPECT_TRUE(UpdateRtcpList(kNtpSec, kNtpFrac + 2 * kOneMsInNtpFrac, kTs + 2, |
+ &rtcp, &new_sr)); |
+ EXPECT_EQ(2u, rtcp.list.size()); |
+ EXPECT_EQ(kTs + 2, rtcp.list.front().rtp_timestamp); |
+ EXPECT_EQ(kTs + 1, rtcp.list.back().rtp_timestamp); |
+} |
+ |
+TEST(UpdateRtcpListTests, FailsForZeroNtp) { |
stefan-webrtc
2016/10/18 23:38:27
Could you comment on why we decide to fail on zero
åsapersson
2016/10/19 14:35:28
Done. Added comment.
|
+ RtcpMeasurements rtcp; |
uint32_t ntp_sec = 0; |
uint32_t ntp_frac = 0; |
- uint32_t timestamp = 0; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
- ntp_frac += kOneMsInNtpFrac; |
- timestamp -= kTimestampTicksPerMs; |
- rtcp.push_front(RtcpMeasurement(ntp_sec, ntp_frac, timestamp)); |
- ntp_frac += kOneMsInNtpFrac; |
- timestamp += 2*kTimestampTicksPerMs; |
- int64_t timestamp_in_ms = -1; |
- EXPECT_FALSE(RtpToNtpMs(timestamp, rtcp, ×tamp_in_ms)); |
-} |
+ uint32_t timestamp = 0x12345678; |
-TEST(RtpToNtpTests, FailsForDecreasingRtpTimestamp) { |
- const uint32_t kNtpSec1 = 3683354930; |
- const uint32_t kNtpFrac1 = 699925050; |
- const uint32_t kTimestamp1 = 2192705742; |
- const uint32_t kNtpSec2 = kNtpSec1; |
- const uint32_t kNtpFrac2 = kNtpFrac1 + kOneMsInNtpFrac; |
- const uint32_t kTimestamp2 = kTimestamp1 - kTimestampTicksPerMs; |
- RtcpList rtcp; |
- rtcp.push_front(RtcpMeasurement(kNtpSec1, kNtpFrac1, kTimestamp1)); |
- rtcp.push_front(RtcpMeasurement(kNtpSec2, kNtpFrac2, kTimestamp2)); |
- int64_t timestamp_in_ms = -1; |
- EXPECT_FALSE(RtpToNtpMs(kTimestamp1, rtcp, ×tamp_in_ms)); |
+ bool new_sr; |
+ EXPECT_FALSE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_FALSE(new_sr); |
+ EXPECT_EQ(0u, rtcp.list.size()); |
} |
-TEST(UpdateRtcpListTests, InjectRtcpSrWithEqualNtp) { |
- RtcpList rtcp; |
+TEST(UpdateRtcpListTests, FailsForEqualNtp) { |
+ RtcpMeasurements rtcp; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 2; |
+ uint32_t ntp_frac = 699925050; |
uint32_t timestamp = 0x12345678; |
bool new_sr; |
@@ -163,10 +181,27 @@ TEST(UpdateRtcpListTests, InjectRtcpSrWithEqualNtp) { |
++timestamp; |
EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
EXPECT_FALSE(new_sr); |
+ EXPECT_EQ(1u, rtcp.list.size()); |
+} |
+ |
+TEST(UpdateRtcpListTests, FailsForOldNtp) { |
+ RtcpMeasurements rtcp; |
+ uint32_t ntp_sec = 1; |
+ uint32_t ntp_frac = 699925050; |
+ uint32_t timestamp = 0x12345678; |
+ |
+ bool new_sr; |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_TRUE(new_sr); |
+ |
+ ntp_frac -= kOneMsInNtpFrac; |
+ timestamp += kTimestampTicksPerMs; |
+ EXPECT_FALSE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_EQ(1u, rtcp.list.size()); |
} |
-TEST(UpdateRtcpListTests, InjectRtcpSrWithEqualTimestamp) { |
- RtcpList rtcp; |
+TEST(UpdateRtcpListTests, FailsForEqualTimestamp) { |
+ RtcpMeasurements rtcp; |
uint32_t ntp_sec = 0; |
uint32_t ntp_frac = 2; |
uint32_t timestamp = 0x12345678; |
@@ -178,15 +213,66 @@ TEST(UpdateRtcpListTests, InjectRtcpSrWithEqualTimestamp) { |
++ntp_frac; |
EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
EXPECT_FALSE(new_sr); |
+ EXPECT_EQ(1u, rtcp.list.size()); |
} |
-TEST(UpdateRtcpListTests, InjectRtcpSrWithZeroNtpFails) { |
- RtcpList rtcp; |
+TEST(UpdateRtcpListTests, FailsForOldRtpTimestamp) { |
+ RtcpMeasurements rtcp; |
uint32_t ntp_sec = 0; |
- uint32_t ntp_frac = 0; |
+ uint32_t ntp_frac = 2; |
uint32_t timestamp = 0x12345678; |
bool new_sr; |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_TRUE(new_sr); |
+ |
+ ntp_frac += kOneMsInNtpFrac; |
+ timestamp -= kTimestampTicksPerMs; |
EXPECT_FALSE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_FALSE(new_sr); |
+ EXPECT_EQ(1u, rtcp.list.size()); |
+} |
+ |
+TEST(UpdateRtcpListTests, VerifyParameters) { |
+ RtcpMeasurements rtcp; |
+ uint32_t ntp_sec = 1; |
+ uint32_t ntp_frac = 2; |
+ uint32_t timestamp = 0x12345678; |
+ |
+ bool new_sr; |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_TRUE(new_sr); |
+ EXPECT_FALSE(rtcp.params.calculated); |
+ |
+ ntp_frac += kOneMsInNtpFrac; |
+ timestamp += kTimestampTicksPerMs; |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ EXPECT_TRUE(rtcp.params.calculated); |
+ EXPECT_DOUBLE_EQ(90.0, rtcp.params.frequency_khz); |
+ EXPECT_NE(0.0, rtcp.params.offset_ms); |
} |
+ |
+TEST(RtpToNtpTests, FailsForEmptyList) { |
+ RtcpMeasurements rtcp; |
+ rtcp.params.calculated = true; |
+ |
+ int64_t timestamp_ms = -1; |
+ EXPECT_EQ(0u, rtcp.list.size()); |
+ EXPECT_FALSE(RtpToNtpMs(0, rtcp, ×tamp_ms)); |
+} |
+ |
+TEST(RtpToNtpTests, FailsForNoParameters) { |
+ RtcpMeasurements rtcp; |
+ uint32_t ntp_sec = 1; |
+ uint32_t ntp_frac = 2; |
+ uint32_t timestamp = 0x12345678; |
+ bool new_sr; |
+ EXPECT_TRUE(UpdateRtcpList(ntp_sec, ntp_frac, timestamp, &rtcp, &new_sr)); |
+ |
+ int64_t timestamp_ms = -1; |
+ EXPECT_EQ(1u, rtcp.list.size()); |
+ EXPECT_FALSE(rtcp.params.calculated); |
+ EXPECT_FALSE(RtpToNtpMs(timestamp, rtcp, ×tamp_ms)); |
+} |
+ |
}; // namespace webrtc |