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_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
6#define MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
7
8#include <deque>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/time/tick_clock.h"
13#include "base/time/time.h"
14
15namespace media {
16namespace cast {
17
18class CongestionControl {
19 public:
20  virtual ~CongestionControl();
21
22  // Called with latest measured rtt value.
23  virtual void UpdateRtt(base::TimeDelta rtt) = 0;
24
25  // Called when an encoded frame is sent to the transport.
26  virtual void SendFrameToTransport(uint32 frame_id,
27                                    size_t frame_size,
28                                    base::TimeTicks when) = 0;
29  // Called when we receive an ACK for a frame.
30  virtual void AckFrame(uint32 frame_id, base::TimeTicks when) = 0;
31
32  // Returns the bitrate we should use for the next frame.
33  virtual uint32 GetBitrate(base::TimeTicks playout_time,
34                            base::TimeDelta playout_delay) = 0;
35};
36
37CongestionControl* NewAdaptiveCongestionControl(
38    base::TickClock* clock,
39    uint32 max_bitrate_configured,
40    uint32 min_bitrate_configured,
41    size_t max_unacked_frames);
42
43CongestionControl* NewFixedCongestionControl(uint32 bitrate);
44
45}  // namespace cast
46}  // namespace media
47
48#endif  // MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
49