(Auto)update libjingle 67686255-> 67689476
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6216 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/base/timeutils.cc b/talk/base/timeutils.cc
index fee85aa..c4e84cc 100644
--- a/talk/base/timeutils.cc
+++ b/talk/base/timeutils.cc
@@ -203,4 +203,18 @@
#endif
}
+TimestampWrapAroundHandler::TimestampWrapAroundHandler()
+ : last_ts_(0), num_wrap_(0) {}
+
+int64 TimestampWrapAroundHandler::Unwrap(uint32 ts) {
+ if (ts < last_ts_) {
+ if (last_ts_ > 0xf0000000 && ts < 0x0fffffff) {
+ ++num_wrap_;
+ }
+ }
+ last_ts_ = ts;
+ int64_t unwrapped_ts = ts + (num_wrap_ << 32);
+ return unwrapped_ts;
+}
+
} // namespace talk_base
diff --git a/talk/base/timeutils.h b/talk/base/timeutils.h
index f13c3f2..6de9df6 100644
--- a/talk/base/timeutils.h
+++ b/talk/base/timeutils.h
@@ -97,6 +97,17 @@
return unix_ts_ns / kNumNanosecsPerMillisec + kJan1970AsNtpMillisecs;
}
+class TimestampWrapAroundHandler {
+ public:
+ TimestampWrapAroundHandler();
+
+ int64 Unwrap(uint32 ts);
+
+ private:
+ uint32 last_ts_;
+ int64 num_wrap_;
+};
+
} // namespace talk_base
#endif // TALK_BASE_TIMEUTILS_H_
diff --git a/talk/base/timeutils_unittest.cc b/talk/base/timeutils_unittest.cc
index 0fc5eb1..a078abe 100644
--- a/talk/base/timeutils_unittest.cc
+++ b/talk/base/timeutils_unittest.cc
@@ -160,4 +160,27 @@
EXPECT_TRUE(0 <= microseconds && microseconds < 1000000);
}
+class TimestampWrapAroundHandlerTest : public testing::Test {
+ public:
+ TimestampWrapAroundHandlerTest() {}
+
+ protected:
+ TimestampWrapAroundHandler wraparound_handler_;
+};
+
+TEST_F(TimestampWrapAroundHandlerTest, Unwrap) {
+ uint32 ts = 0xfffffff2;
+ int64 unwrapped_ts = ts;
+ EXPECT_EQ(ts, wraparound_handler_.Unwrap(ts));
+ ts = 2;
+ unwrapped_ts += 0x10;
+ EXPECT_EQ(unwrapped_ts, wraparound_handler_.Unwrap(ts));
+ ts = 0xfffffff2;
+ unwrapped_ts += 0xfffffff0;
+ EXPECT_EQ(unwrapped_ts, wraparound_handler_.Unwrap(ts));
+ ts = 0;
+ unwrapped_ts += 0xe;
+ EXPECT_EQ(unwrapped_ts, wraparound_handler_.Unwrap(ts));
+}
+
} // namespace talk_base