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