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;