// 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_SOURCE_H_
#define COBALT_MEDIA_BASE_TIME_SOURCE_H_

#include <vector>

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

namespace cobalt {
namespace media {

// A TimeSource is capable of providing the current media time.
class MEDIA_EXPORT TimeSource {
 public:
  // Helper alias for converting media timestamps into a wall clock timestamps.
  using WallClockTimeCB = base::Callback<bool(
      const std::vector<base::TimeDelta>&, std::vector<base::TimeTicks>*)>;

  TimeSource() {}
  virtual ~TimeSource() {}

  // Signal the time source to start ticking. It is expected that values from
  // CurrentMediaTime() will start increasing.
  virtual void StartTicking() = 0;

  // Signal the time source to stop ticking. It is expected that values from
  // CurrentMediaTime() will remain constant.
  virtual void StopTicking() = 0;

  // Updates the current playback rate. It is expected that values from
  // CurrentMediaTime() will eventually reflect the new playback rate (e.g., the
  // media time will advance at half speed if the rate was set to 0.5).
  virtual void SetPlaybackRate(double playback_rate) = 0;

  // Sets the media time to start ticking from. Only valid to call while the
  // time source is not ticking.
  virtual void SetMediaTime(base::TimeDelta time) = 0;

  // Returns the current media timestamp relative to the timestamp set by
  // SetMediaTime().
  //
  // Values returned are intended for informational purposes, such as displaying
  // UI with the current minute and second count. While it is guaranteed values
  // will never go backwards, the frequency at which they update may be low.
  virtual base::TimeDelta CurrentMediaTime() = 0;

  // Converts a vector of media timestamps into a vector of wall clock times; if
  // the media time is stopped, returns false, otherwise returns true. Even if
  // time is stopped, timestamps will be converted.
  //
  // Passing an empty |media_timestamps| vector will return the last known media
  // time as a wall clock time. After SetMediaTime() and prior to StartTicking()
  // the returned wall clock time must be zero.
  //
  // Within a single call to GetWallClockTimes() the returned wall clock times
  // are a strictly increasing function of the given media times. There is no
  // such guarantee between calls though; e.g., playback rate or audio delay may
  // change on other threads within the pipeline.
  //
  // Each timestamp converted from |media_timestamps| will be pushed into
  // |wall_clock_times| such that after all timestamps are converted, the two
  // vectors are parallel (media_timestamps[i] -> wall_clock_times[i]).
  //
  // |media_timestamps| values too far ahead of the current media time will
  // be converted to an estimated value; as such, these values may go backwards
  // in time slightly between calls to GetWallClockTimes().
  //
  // |media_timestamps| values behind the current media time may be
  // significantly incorrect if the playback rate has changed recently. The only
  // guarantee is that the returned time will be less than the current wall
  // clock time.
  virtual bool GetWallClockTimes(
      const std::vector<base::TimeDelta>& media_timestamps,
      std::vector<base::TimeTicks>* wall_clock_times) = 0;
};

}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_BASE_TIME_SOURCE_H_
