1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_ 12 #define SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_ 13 14 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" 15 #include "webrtc/typedefs.h" 16 17 namespace webrtc 18 { 19 20 class TimestampExtrapolator 21 { 22 public: 23 explicit TimestampExtrapolator(int64_t start_ms); 24 ~TimestampExtrapolator(); 25 void Update(int64_t tMs, uint32_t ts90khz); 26 int64_t ExtrapolateLocalTime(uint32_t timestamp90khz); 27 void Reset(int64_t start_ms); 28 29 private: 30 void CheckForWrapArounds(uint32_t ts90khz); 31 bool DelayChangeDetection(double error); 32 RWLockWrapper* _rwLock; 33 double _w[2]; 34 double _P[2][2]; 35 int64_t _startMs; 36 int64_t _prevMs; 37 uint32_t _firstTimestamp; 38 int32_t _wrapArounds; 39 int64_t _prevUnwrappedTimestamp; 40 int64_t _prevWrapTimestamp; 41 const double _lambda; 42 bool _firstAfterReset; 43 uint32_t _packetCount; 44 const uint32_t _startUpFilterDelayInPackets; 45 46 double _detectorAccumulatorPos; 47 double _detectorAccumulatorNeg; 48 const double _alarmThreshold; 49 const double _accDrift; 50 const double _accMaxError; 51 const double _P11; 52 }; 53 54 } // namespace webrtc 55 56 #endif // SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_ 57