// 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 COBALT_MEDIA_BASE_TIME_DELTA_INTERPOLATOR_H_
#define COBALT_MEDIA_BASE_TIME_DELTA_INTERPOLATOR_H_

#include "base/basictypes.h"
#include "base/time.h"
#include "cobalt/media/base/media_export.h"

namespace base {
class TickClock;
}  // namespace base

namespace cobalt {
namespace media {

// Interpolates between two TimeDeltas based on the passage of wall clock time
// and the current playback rate.
//
// TimeDeltaInterpolator is not thread-safe and must be externally locked.
class MEDIA_EXPORT TimeDeltaInterpolator {
 public:
  // Constructs an interpolator initialized to zero with a rate of 1.0.
  //
  // |tick_clock| is used for sampling wall clock time for interpolating.
  explicit TimeDeltaInterpolator(base::TickClock* tick_clock);
  ~TimeDeltaInterpolator();

  bool interpolating() { return interpolating_; }

  // Starts returning interpolated TimeDelta values.
  //
  // |tick_clock| will be queried for a new reference time value.
  base::TimeDelta StartInterpolating();

  // Stops returning interpolated TimeDelta values.
  //
  // |tick_clock| will be queried for a new reference time value.
  base::TimeDelta StopInterpolating();

  // Sets a new rate at which to interpolate.
  // The default rate is 0.
  //
  // |tick_clock| will be queried for a new reference time value.
  void SetPlaybackRate(double playback_rate);

  // Sets the two timestamps to interpolate between at |playback_rate_|.
  // |upper_bound| must be greater or equal to |lower_bound|.
  //
  // |upper_bound| is typically the media timestamp of the last audio frame
  // buffered by the audio hardware.
  void SetBounds(base::TimeDelta lower_bound, base::TimeDelta upper_bound,
                 base::TimeTicks capture_time);

  // Sets the upper bound used for interpolation. Note that if |upper_bound| is
  // less than what was previously set via SetTime(), then all future calls
  // to GetInterpolatedTime() will return |upper_bound|.
  void SetUpperBound(base::TimeDelta upper_bound);

  // Computes an interpolated time based on SetTime().
  base::TimeDelta GetInterpolatedTime();

 private:
  base::TickClock* const tick_clock_;

  bool interpolating_;

  // The range of time to interpolate between.
  base::TimeDelta lower_bound_;
  base::TimeDelta upper_bound_;

  // The monotonic system clock time used for interpolating between
  // |lower_bound_| and |upper_bound_|.
  base::TimeTicks reference_;

  double playback_rate_;

  DISALLOW_COPY_AND_ASSIGN(TimeDeltaInterpolator);
};

}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_BASE_TIME_DELTA_INTERPOLATOR_H_
