Chromium Code Reviews| Index: webrtc/call/bitrate_allocator.h |
| diff --git a/webrtc/call/bitrate_allocator.h b/webrtc/call/bitrate_allocator.h |
| index bf26a6ae9bbc2d035f8dbd51eeab3b300348116c..8151736dfc2533e6e8c467b555133fd8673e1f54 100644 |
| --- a/webrtc/call/bitrate_allocator.h |
| +++ b/webrtc/call/bitrate_allocator.h |
| @@ -42,9 +42,9 @@ class BitrateAllocator { |
| BitrateAllocator(); |
| // Allocate target_bitrate across the registered BitrateAllocatorObservers. |
| - // Returns actual bitrate allocated (might be higher than target_bitrate if |
| - // for instance EnforceMinBitrate() is enabled. |
| - uint32_t OnNetworkChanged(uint32_t target_bitrate, |
| + // Returns actual bitrate allocated, which might be higher than target_bitrate |
| + // if for instance EnforceMinBitrate() is enabled. |
| + uint32_t OnNetworkChanged(uint32_t target_bitrate_bps, |
| uint8_t fraction_loss, |
| int64_t rtt); |
| @@ -66,9 +66,12 @@ class BitrateAllocator { |
| uint32_t max_bitrate_bps, |
| bool enforce_min_bitrate); |
| + // Removes a previously added observer, but will not trigger a new bitrate |
|
pbos-webrtc
2016/06/06 15:26:28
Should this not trigger a new bitrate allocation?
mflodman
2016/06/09 13:23:13
It has never done it and there is no urgency to ac
pbos-webrtc
2016/06/09 13:37:21
Is there a guarantee that a new estimate will come
|
| + // allocation. |
| void RemoveObserver(BitrateAllocatorObserver* observer); |
| private: |
| + // Note: All bitrates for member variables and methods are in bps. |
| struct ObserverConfig { |
| ObserverConfig(BitrateAllocatorObserver* observer, |
| uint32_t min_bitrate_bps, |
| @@ -84,14 +87,6 @@ class BitrateAllocator { |
| bool enforce_min_bitrate; |
| }; |
| - // This method controls the behavior when the available bitrate is lower than |
| - // the minimum bitrate, or the sum of minimum bitrates. |
| - // When true, the bitrate will never be set lower than the minimum bitrate(s). |
| - // When false, the bitrate observers will be allocated rates up to their |
| - // respective minimum bitrate, satisfying one observer after the other. |
| - void EnforceMinBitrate(bool enforce_min_bitrate) |
| - EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| - |
| typedef std::list<ObserverConfig> ObserverConfigList; |
| ObserverConfigList::iterator FindObserverConfig( |
| const BitrateAllocatorObserver* observer) |
| @@ -102,22 +97,41 @@ class BitrateAllocator { |
| ObserverAllocation AllocateBitrates(uint32_t bitrate) |
| EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + |
| + ObserverAllocation ZeroRateAllocation() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + ObserverAllocation LowRateAllocation(uint32_t bitrate) |
| + EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| ObserverAllocation NormalRateAllocation(uint32_t bitrate, |
|
pbos-webrtc
2016/06/06 15:26:28
_bps on everything here please
mflodman
2016/06/09 13:23:13
See my previous reply.
|
| uint32_t sum_min_bitrates) |
| EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + ObserverAllocation MaxRateAllocation(uint32_t bitrate, |
| + uint32_t sum_max_bitrates) |
| + EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| - ObserverAllocation ZeroRateAllocation() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| - ObserverAllocation LowRateAllocation(uint32_t bitrate) |
| + uint32_t LastAllocatedBitrate(const ObserverConfig& observer_config) |
| EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + // The minimum bitrate required by this observer, including enable-hysteresis |
| + // if the observer is in a paused state. |
| + uint32_t MinBitrateForObserver(const ObserverConfig& observer_config) |
| + EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + // Splits |bitrate| evenly to all observers with a non-zero bitrate in |
| + // |allocation|. The allowed max bitrate is |max_multiplier| x observer max |
| + // bitrate. |
| + void DistributeBitrateEvenly( |
| + uint32_t bitrate, int max_multiplier, ObserverAllocation* allocation) |
| + EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + bool ShouldDoLowRateAllocation(uint32_t bitrate, uint32_t sum_min_bitrates) |
| + EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| + |
| rtc::CriticalSection crit_sect_; |
| // Stored in a list to keep track of the insertion order. |
| ObserverConfigList bitrate_observer_configs_ GUARDED_BY(crit_sect_); |
| - bool enforce_min_bitrate_ GUARDED_BY(crit_sect_); |
| uint32_t last_bitrate_bps_ GUARDED_BY(crit_sect_); |
| uint32_t last_non_zero_bitrate_bps_ GUARDED_BY(crit_sect_); |
| uint8_t last_fraction_loss_ GUARDED_BY(crit_sect_); |
| int64_t last_rtt_ GUARDED_BY(crit_sect_); |
| + ObserverAllocation last_allocation_ GUARDED_BY(crit_sect_); |
| }; |
| } // namespace webrtc |
| #endif // WEBRTC_CALL_BITRATE_ALLOCATOR_H_ |