Remove timestamp_extrapolator's dependency to Clock and vcm defines.

TEST=existing tests
BUG=
R=stefan@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/12399004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6058 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc b/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc
index 2243c86..bde2f0a 100644
--- a/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc
+++ b/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc
@@ -8,15 +8,14 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "webrtc/modules/video_coding/main/source/internal_defines.h"
 #include "webrtc/modules/video_coding/main/source/timestamp_extrapolator.h"
-#include "webrtc/system_wrappers/interface/clock.h"
+
+#include <algorithm>
 
 namespace webrtc {
 
-VCMTimestampExtrapolator::VCMTimestampExtrapolator(Clock* clock)
+VCMTimestampExtrapolator::VCMTimestampExtrapolator(int64_t start_ms)
     : _rwLock(RWLockWrapper::CreateRWLock()),
-      _clock(clock),
       _startMs(0),
       _firstTimestamp(0),
       _wrapArounds(0),
@@ -32,7 +31,7 @@
       _accDrift(6600),  // in timestamp ticks, i.e. 15 ms
       _accMaxError(7000),
       _P11(1e10) {
-    Reset();
+    Reset(start_ms);
 }
 
 VCMTimestampExtrapolator::~VCMTimestampExtrapolator()
@@ -41,10 +40,10 @@
 }
 
 void
-VCMTimestampExtrapolator::Reset()
+VCMTimestampExtrapolator::Reset(int64_t start_ms)
 {
     WriteLockScoped wl(*_rwLock);
-    _startMs = _clock->TimeInMilliseconds();
+    _startMs = start_ms;
     _prevMs = _startMs;
     _firstTimestamp = 0;
     _w[0] = 90.0;
@@ -71,7 +70,7 @@
         // Ten seconds without a complete frame.
         // Reset the extrapolator
         _rwLock->ReleaseLockExclusive();
-        Reset();
+        Reset(tMs);
         _rwLock->AcquireLockExclusive();
     }
     else
@@ -214,9 +213,12 @@
 VCMTimestampExtrapolator::DelayChangeDetection(double error)
 {
     // CUSUM detection of sudden delay changes
-    error = (error > 0) ? VCM_MIN(error, _accMaxError) : VCM_MAX(error, -_accMaxError);
-    _detectorAccumulatorPos = VCM_MAX(_detectorAccumulatorPos + error - _accDrift, (double)0);
-    _detectorAccumulatorNeg = VCM_MIN(_detectorAccumulatorNeg + error + _accDrift, (double)0);
+    error = (error > 0) ? std::min(error, _accMaxError) :
+                          std::max(error, -_accMaxError);
+    _detectorAccumulatorPos =
+        std::max(_detectorAccumulatorPos + error - _accDrift, (double)0);
+    _detectorAccumulatorNeg =
+        std::min(_detectorAccumulatorNeg + error + _accDrift, (double)0);
     if (_detectorAccumulatorPos > _alarmThreshold || _detectorAccumulatorNeg < -_alarmThreshold)
     {
         // Alarm
diff --git a/webrtc/modules/video_coding/main/source/timestamp_extrapolator.h b/webrtc/modules/video_coding/main/source/timestamp_extrapolator.h
index f3cf74f..151e4de 100644
--- a/webrtc/modules/video_coding/main/source/timestamp_extrapolator.h
+++ b/webrtc/modules/video_coding/main/source/timestamp_extrapolator.h
@@ -17,22 +17,19 @@
 namespace webrtc
 {
 
-class Clock;
-
 class VCMTimestampExtrapolator
 {
 public:
-    explicit VCMTimestampExtrapolator(Clock* clock);
+    explicit VCMTimestampExtrapolator(int64_t start_ms);
     ~VCMTimestampExtrapolator();
     void Update(int64_t tMs, uint32_t ts90khz);
     int64_t ExtrapolateLocalTime(uint32_t timestamp90khz);
-    void Reset();
+    void Reset(int64_t start_ms);
 
 private:
     void CheckForWrapArounds(uint32_t ts90khz);
     bool DelayChangeDetection(double error);
     RWLockWrapper*        _rwLock;
-    Clock*                _clock;
     double                _w[2];
     double                _P[2][2];
     int64_t         _startMs;
diff --git a/webrtc/modules/video_coding/main/source/timing.cc b/webrtc/modules/video_coding/main/source/timing.cc
index e5b5635..dd82187 100644
--- a/webrtc/modules/video_coding/main/source/timing.cc
+++ b/webrtc/modules/video_coding/main/source/timing.cc
@@ -35,7 +35,8 @@
       prev_frame_timestamp_(0) {
   if (master_timing == NULL) {
     master_ = true;
-    ts_extrapolator_ = new VCMTimestampExtrapolator(clock_);
+    ts_extrapolator_ =
+        new VCMTimestampExtrapolator(clock_->TimeInMilliseconds());
   } else {
     ts_extrapolator_ = master_timing->ts_extrapolator_;
   }
@@ -50,7 +51,7 @@
 
 void VCMTiming::Reset() {
   CriticalSectionScoped cs(crit_sect_);
-  ts_extrapolator_->Reset();
+  ts_extrapolator_->Reset(clock_->TimeInMilliseconds());
   codec_timer_.Reset();
   render_delay_ms_ = kDefaultRenderDelayMs;
   min_playout_delay_ms_ = 0;