text: /*
   *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
   *
   *  Use of this source code is governed by a BSD-style license
   *  that can be found in the LICENSE file in the root of the source
   *  tree. An additional intellectual property rights grant can be found
   *  in the file PATENTS.  All contributing project authors may
   *  be found in the AUTHORS file in the root of the source tree.
   */
  
  #ifndef SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_
  #define SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_
  
  #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
  #include "webrtc/typedefs.h"
  
  namespace webrtc
  {
  
  class TimestampExtrapolator
  {
  public:
      explicit TimestampExtrapolator(int64_t start_ms);
      ~TimestampExtrapolator();
      void Update(int64_t tMs, uint32_t ts90khz);
      int64_t ExtrapolateLocalTime(uint32_t timestamp90khz);
      void Reset(int64_t start_ms);
  
  private:
      void CheckForWrapArounds(uint32_t ts90khz);
      bool DelayChangeDetection(double error);
      RWLockWrapper*        _rwLock;
      double                _w[2];
      double                _pP[2][2];
      int64_t         _startMs;
      int64_t         _prevMs;
      uint32_t        _firstTimestamp;
      int32_t         _wrapArounds;
      int64_t         _prevUnwrappedTimestamp;
      int64_t         _prevWrapTimestamp;
      const double          _lambda;
      bool                  _firstAfterReset;
      uint32_t        _packetCount;
      const uint32_t  _startUpFilterDelayInPackets;
  
      double              _detectorAccumulatorPos;
      double              _detectorAccumulatorNeg;
      const double        _alarmThreshold;
      const double        _accDrift;
      const double        _accMaxError;
      const double        _pP11;
  };
  
  }  // namespace webrtc
  
  #endif // SYSTEM_WRAPPERS_INTERFACE_TIMESTAMP_EXTRAPOLATOR_H_
  