// Copyright 2013 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 MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_ #define MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/time/tick_clock.h" #include "base/time/time.h" namespace media { namespace cast { class CongestionControl { public: CongestionControl(base::TickClock* clock, float congestion_control_back_off, uint32 max_bitrate_configured, uint32 min_bitrate_configured, uint32 start_bitrate); virtual ~CongestionControl(); // Don't call OnAck if the same message contain a NACK. // Returns true if the bitrate have changed. bool OnAck(base::TimeDelta rtt_ms, uint32* new_bitrate); // Returns true if the bitrate have changed. bool OnNack(base::TimeDelta rtt_ms, uint32* new_bitrate); private: base::TickClock* const clock_; // Not owned by this class. const float congestion_control_back_off_; const uint32 max_bitrate_configured_; const uint32 min_bitrate_configured_; uint32 bitrate_; base::TimeTicks time_last_increase_; base::TimeTicks time_last_decrease_; DISALLOW_COPY_AND_ASSIGN(CongestionControl); }; } // namespace cast } // namespace media #endif // MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_