(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