Introduce MicrosecondsToCompactNtp function
webrtc clocks use 10based fraction time to calculate intervals.
Rtcp require 16based fraction time to report intervals.
Bug: webrtc:8239
Change-Id: I25cab5ad7b7614c86c174813a195e7ba767ee43b
Reviewed-on: https://webrtc-review.googlesource.com/21383
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20619}
diff --git a/modules/rtp_rtcp/source/time_util_unittest.cc b/modules/rtp_rtcp/source/time_util_unittest.cc
index eafe15d..6ff55dd 100644
--- a/modules/rtp_rtcp/source/time_util_unittest.cc
+++ b/modules/rtp_rtcp/source/time_util_unittest.cc
@@ -70,4 +70,24 @@
int64_t ntp_to_ms_diff = CompactNtpRttToMs(ntp_diff);
EXPECT_EQ(1, ntp_to_ms_diff);
}
+
+TEST(TimeUtilTest, SaturatedUsToCompactNtp) {
+ // Converts negative to zero.
+ EXPECT_EQ(SaturatedUsToCompactNtp(-1), 0u);
+ EXPECT_EQ(SaturatedUsToCompactNtp(0), 0u);
+ // Converts values just above and just below max uint32_t.
+ EXPECT_EQ(SaturatedUsToCompactNtp(65536000000), 0xffffffff);
+ EXPECT_EQ(SaturatedUsToCompactNtp(65535999985), 0xffffffff);
+ EXPECT_EQ(SaturatedUsToCompactNtp(65535999970), 0xfffffffe);
+ // Converts half-seconds.
+ EXPECT_EQ(SaturatedUsToCompactNtp(500000), 0x8000u);
+ EXPECT_EQ(SaturatedUsToCompactNtp(1000000), 0x10000u);
+ EXPECT_EQ(SaturatedUsToCompactNtp(1500000), 0x18000u);
+ // Convert us -> compact_ntp -> ms. Compact ntp precision is ~15us.
+ EXPECT_EQ(CompactNtpRttToMs(SaturatedUsToCompactNtp(1516)), 2);
+ EXPECT_EQ(CompactNtpRttToMs(SaturatedUsToCompactNtp(15000)), 15);
+ EXPECT_EQ(CompactNtpRttToMs(SaturatedUsToCompactNtp(5485)), 5);
+ EXPECT_EQ(CompactNtpRttToMs(SaturatedUsToCompactNtp(5515)), 6);
+}
+
} // namespace webrtc