diff options
Diffstat (limited to 'chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h')
-rw-r--r-- | chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h | 87 |
1 files changed, 60 insertions, 27 deletions
diff --git a/chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h b/chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h index 62ed6fda5ab..aff127bd142 100644 --- a/chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h +++ b/chromium/third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.h @@ -27,12 +27,30 @@ namespace webrtc { -class RtcpBandwidthObserverImpl; -class LowRateStrategy; - class BitrateControllerImpl : public BitrateController { public: - friend class RtcpBandwidthObserverImpl; + BitrateControllerImpl(Clock* clock, bool enforce_min_bitrate); + virtual ~BitrateControllerImpl(); + + virtual bool AvailableBandwidth(uint32_t* bandwidth) const OVERRIDE; + + virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() OVERRIDE; + + virtual void SetBitrateObserver(BitrateObserver* observer, + const uint32_t start_bitrate, + const uint32_t min_bitrate, + const uint32_t max_bitrate) OVERRIDE; + + virtual void RemoveBitrateObserver(BitrateObserver* observer) OVERRIDE; + + virtual void EnforceMinBitrate(bool enforce_min_bitrate) OVERRIDE; + virtual void SetReservedBitrate(uint32_t reserved_bitrate_bps) OVERRIDE; + + virtual int32_t TimeUntilNextProcess() OVERRIDE; + virtual int32_t Process() OVERRIDE; + + private: + class RtcpBandwidthObserverImpl; struct BitrateConfiguration { BitrateConfiguration(uint32_t start_bitrate, @@ -59,23 +77,8 @@ class BitrateControllerImpl : public BitrateController { BitrateObserverConfiguration; typedef std::list<BitrateObserverConfiguration> BitrateObserverConfList; - explicit BitrateControllerImpl(bool enforce_min_bitrate); - virtual ~BitrateControllerImpl(); - - virtual bool AvailableBandwidth(uint32_t* bandwidth) const OVERRIDE; - - virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() OVERRIDE; - - virtual void SetBitrateObserver(BitrateObserver* observer, - const uint32_t start_bitrate, - const uint32_t min_bitrate, - const uint32_t max_bitrate) OVERRIDE; - - virtual void RemoveBitrateObserver(BitrateObserver* observer) OVERRIDE; + void UpdateMinMaxBitrate() EXCLUSIVE_LOCKS_REQUIRED(*critsect_); - virtual void EnforceMinBitrate(bool enforce_min_bitrate) OVERRIDE; - - private: // Called by BitrateObserver's direct from the RTCP module. void OnReceivedEstimatedBitrate(const uint32_t bitrate); @@ -84,18 +87,48 @@ class BitrateControllerImpl : public BitrateController { const int number_of_packets, const uint32_t now_ms); - typedef std::multimap<uint32_t, ObserverConfiguration*> ObserverSortingMap; + void MaybeTriggerOnNetworkChanged() EXCLUSIVE_LOCKS_REQUIRED(*critsect_); - BitrateObserverConfList::iterator - FindObserverConfigurationPair(const BitrateObserver* observer); void OnNetworkChanged(const uint32_t bitrate, const uint8_t fraction_loss, // 0 - 255. - const uint32_t rtt); + const uint32_t rtt) + EXCLUSIVE_LOCKS_REQUIRED(*critsect_); + + void NormalRateAllocation(uint32_t bitrate, + uint8_t fraction_loss, + uint32_t rtt, + uint32_t sum_min_bitrates) + EXCLUSIVE_LOCKS_REQUIRED(*critsect_); + + void LowRateAllocation(uint32_t bitrate, + uint8_t fraction_loss, + uint32_t rtt, + uint32_t sum_min_bitrates) + EXCLUSIVE_LOCKS_REQUIRED(*critsect_); + + typedef std::multimap<uint32_t, ObserverConfiguration*> ObserverSortingMap; + + BitrateObserverConfList::iterator FindObserverConfigurationPair( + const BitrateObserver* observer) EXCLUSIVE_LOCKS_REQUIRED(*critsect_); + + // Used by process thread. + Clock* clock_; + uint32_t last_bitrate_update_ms_; CriticalSectionWrapper* critsect_; - SendSideBandwidthEstimation bandwidth_estimation_; - BitrateObserverConfList bitrate_observers_; - scoped_ptr<LowRateStrategy> low_rate_strategy_; + SendSideBandwidthEstimation bandwidth_estimation_ GUARDED_BY(*critsect_); + BitrateObserverConfList bitrate_observers_ GUARDED_BY(*critsect_); + bool enforce_min_bitrate_ GUARDED_BY(*critsect_); + uint32_t reserved_bitrate_bps_ GUARDED_BY(*critsect_); + + uint32_t last_bitrate_bps_ GUARDED_BY(*critsect_); + uint8_t last_fraction_loss_ GUARDED_BY(*critsect_); + uint32_t last_rtt_ms_ GUARDED_BY(*critsect_); + bool last_enforce_min_bitrate_ GUARDED_BY(*critsect_); + bool bitrate_observers_modified_ GUARDED_BY(*critsect_); + uint32_t last_reserved_bitrate_bps_ GUARDED_BY(*critsect_); + + DISALLOW_IMPLICIT_CONSTRUCTORS(BitrateControllerImpl); }; } // namespace webrtc #endif // WEBRTC_MODULES_BITRATE_CONTROLLER_BITRATE_CONTROLLER_IMPL_H_ |