// 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.

#include "media/cast/test/fake_receiver_time_offset_estimator.h"

namespace cobalt {
namespace media {
namespace cast {
namespace test {

FakeReceiverTimeOffsetEstimator::FakeReceiverTimeOffsetEstimator(
    base::TimeDelta offset)
    : offset_(offset) {}

FakeReceiverTimeOffsetEstimator::~FakeReceiverTimeOffsetEstimator() {}

void FakeReceiverTimeOffsetEstimator::OnReceiveFrameEvent(
    const FrameEvent& frame_event) {
  // Do nothing.
}

void FakeReceiverTimeOffsetEstimator::OnReceivePacketEvent(
    const PacketEvent& packet_event) {
  // Do nothing.
}

bool FakeReceiverTimeOffsetEstimator::GetReceiverOffsetBounds(
    base::TimeDelta* lower_bound, base::TimeDelta* upper_bound) {
  *lower_bound = offset_;
  *upper_bound = offset_;
  return true;
}

}  // namespace test
}  // namespace cast
}  // namespace media
}  // namespace cobalt
