text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef MEDIA_FORMATS_MP2T_TIMESTAMP_UNROLLER_H_
  #define MEDIA_FORMATS_MP2T_TIMESTAMP_UNROLLER_H_
  
  #include <stdint.h>
  
  #include "base/macros.h"
  #include "media/base/media_export.h"
  
  namespace media {
  namespace mp2t {
  
  class MEDIA_EXPORT TimestampUnroller {
   public:
    TimestampUnroller();
  
    TimestampUnroller(const TimestampUnroller&) = delete;
    TimestampUnroller& operator=(const TimestampUnroller&) = delete;
  
    ~TimestampUnroller();
  
    // Given that |timestamp| is coded using 33 bits (accuracy of MPEG-2 TS
    // timestamps), GetUnrolledTimestamp returns the corresponding unrolled
    // timestamp.
    // The unrolled timestamp is defined by:
    // |timestamp| + k * (2 ^ 33)
    // where k is estimated so that the unrolled timestamp is as close as
    // possible to the previous unrolled timestamp returned by this function
    // (if this function has not been called before, it will return the timestamp
    // unmodified).
    int64_t GetUnrolledTimestamp(int64_t timestamp);
  
    // Reset the TimestampUnroller to its initial state.
    void Reset();
  
   private:
    // Indicate whether the value of |previous_unrolled_timestamp_| is valid.
    bool is_previous_timestamp_valid_;
  
    // This is the last output of GetUnrolledTimestamp.
    int64_t previous_unrolled_timestamp_;
  };
  
  }  // namespace mp2t
  }  // namespace media
  
  #endif  // MEDIA_FORMATS_MP2T_TIMESTAMP_UNROLLER_H_
  