1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MEDIA_CAST_LOGGING_RECEIVER_TIME_OFFSET_ESTIMATOR_H_
6#define MEDIA_CAST_LOGGING_RECEIVER_TIME_OFFSET_ESTIMATOR_H_
7
8#include "base/time/time.h"
9#include "media/cast/logging/raw_event_subscriber.h"
10
11namespace media {
12namespace cast {
13
14// Estimates receiver time offset based on raw events received.
15// In most cases, the sender and receiver run on different time lines.
16// In order to convert receiver time back to sender time (or vice versa)
17// a certain time offset has to be applied.
18// An implementation of this interface listens to raw events to figure out
19// the bounds for the offset value (assuming the true offset value is constant
20// over the lifetime of a cast session).
21// The offset values provided here should be used as follows:
22// - Convert from sender to receiver time: add offset value to sender timestamp.
23// - Convert from receiver to sender time: subtract offset value from receiver
24//   timestamp.
25class ReceiverTimeOffsetEstimator : public RawEventSubscriber {
26 public:
27  virtual ~ReceiverTimeOffsetEstimator() {}
28
29  // If bounds are known, assigns |lower_bound| and |upper_bound| with the
30  // lower bound and upper bound for the offset value, respectively.
31  // Returns true if bounds are known.
32  virtual bool GetReceiverOffsetBounds(base::TimeDelta* lower_bound,
33                                       base::TimeDelta* upper_bound) = 0;
34};
35
36}  // namespace cast
37}  // namespace media
38
39#endif  // MEDIA_CAST_LOGGING_RECEIVER_TIME_OFFSET_ESTIMATOR_H_
40