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
17namespace webrtc
18{
19
20class TimestampExtrapolator
21{
22public:
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
29private:
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