Made functions on BitrateAllocator::ObserverConfig member functions

This makes it visible that there are no side effects and no dependency on BitrateAllocator.

Bug: None
Change-Id: I3d54ea545e694ae8303860114ddb3ce7569ecb14
Reviewed-on: https://webrtc-review.googlesource.com/26920
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20933}
This commit is contained in:
srte 2017-11-29 11:23:59 +01:00 committed by Commit Bot
parent 59dd482249
commit 1eb051c9f4
2 changed files with 18 additions and 21 deletions

View File

@ -186,7 +186,7 @@ void BitrateAllocator::UpdateAllocationLimits() {
total_requested_min_bitrate += config.min_bitrate_bps; total_requested_min_bitrate += config.min_bitrate_bps;
} else if (config.allocated_bitrate_bps == 0) { } else if (config.allocated_bitrate_bps == 0) {
stream_padding = stream_padding =
std::max(MinBitrateWithHysteresis(config), stream_padding); std::max(config.MinBitrateWithHysteresis(), stream_padding);
} }
total_requested_padding_bitrate += stream_padding; total_requested_padding_bitrate += stream_padding;
} }
@ -331,10 +331,10 @@ BitrateAllocator::ObserverAllocation BitrateAllocator::LowRateAllocation(
if (remaining_bitrate > 0) { if (remaining_bitrate > 0) {
for (const auto& observer_config : bitrate_observer_configs_) { for (const auto& observer_config : bitrate_observer_configs_) {
if (observer_config.enforce_min_bitrate || if (observer_config.enforce_min_bitrate ||
LastAllocatedBitrate(observer_config) == 0) observer_config.LastAllocatedBitrate() == 0)
continue; continue;
uint32_t required_bitrate = MinBitrateWithHysteresis(observer_config); uint32_t required_bitrate = observer_config.MinBitrateWithHysteresis();
if (remaining_bitrate >= required_bitrate) { if (remaining_bitrate >= required_bitrate) {
allocation[observer_config.observer] = required_bitrate; allocation[observer_config.observer] = required_bitrate;
remaining_bitrate -= required_bitrate; remaining_bitrate -= required_bitrate;
@ -345,11 +345,11 @@ BitrateAllocator::ObserverAllocation BitrateAllocator::LowRateAllocation(
// Allocate bitrate to previously paused streams. // Allocate bitrate to previously paused streams.
if (remaining_bitrate > 0) { if (remaining_bitrate > 0) {
for (const auto& observer_config : bitrate_observer_configs_) { for (const auto& observer_config : bitrate_observer_configs_) {
if (LastAllocatedBitrate(observer_config) != 0) if (observer_config.LastAllocatedBitrate() != 0)
continue; continue;
// Add a hysteresis to avoid toggling. // Add a hysteresis to avoid toggling.
uint32_t required_bitrate = MinBitrateWithHysteresis(observer_config); uint32_t required_bitrate = observer_config.MinBitrateWithHysteresis();
if (remaining_bitrate >= required_bitrate) { if (remaining_bitrate >= required_bitrate) {
allocation[observer_config.observer] = required_bitrate; allocation[observer_config.observer] = required_bitrate;
remaining_bitrate -= required_bitrate; remaining_bitrate -= required_bitrate;
@ -408,20 +408,16 @@ BitrateAllocator::ObserverAllocation BitrateAllocator::MaxRateAllocation(
return allocation; return allocation;
} }
uint32_t BitrateAllocator::LastAllocatedBitrate( uint32_t BitrateAllocator::ObserverConfig::LastAllocatedBitrate() const {
const ObserverConfig& observer_config) {
// Return the configured minimum bitrate for newly added observers, to avoid // Return the configured minimum bitrate for newly added observers, to avoid
// requiring an extra high bitrate for the observer to get an allocated // requiring an extra high bitrate for the observer to get an allocated
// bitrate. // bitrate.
return observer_config.allocated_bitrate_bps == -1 return allocated_bitrate_bps == -1 ? min_bitrate_bps : allocated_bitrate_bps;
? observer_config.min_bitrate_bps
: observer_config.allocated_bitrate_bps;
} }
uint32_t BitrateAllocator::MinBitrateWithHysteresis( uint32_t BitrateAllocator::ObserverConfig::MinBitrateWithHysteresis() const {
const ObserverConfig& observer_config) { uint32_t min_bitrate = min_bitrate_bps;
uint32_t min_bitrate = observer_config.min_bitrate_bps; if (LastAllocatedBitrate() == 0) {
if (LastAllocatedBitrate(observer_config) == 0) {
min_bitrate += std::max(static_cast<uint32_t>(kToggleFactor * min_bitrate), min_bitrate += std::max(static_cast<uint32_t>(kToggleFactor * min_bitrate),
kMinToggleBitrateBps); kMinToggleBitrateBps);
} }
@ -431,8 +427,8 @@ uint32_t BitrateAllocator::MinBitrateWithHysteresis(
// paused stream won't get any ratio updates. This might lead to waiting a bit // paused stream won't get any ratio updates. This might lead to waiting a bit
// longer than necessary if the network condition improves, but this is to // longer than necessary if the network condition improves, but this is to
// avoid too much toggling. // avoid too much toggling.
if (observer_config.media_ratio > 0.0 && observer_config.media_ratio < 1.0) if (media_ratio > 0.0 && media_ratio < 1.0)
min_bitrate += min_bitrate * (1.0 - observer_config.media_ratio); min_bitrate += min_bitrate * (1.0 - media_ratio);
return min_bitrate; return min_bitrate;
} }
@ -483,7 +479,7 @@ bool BitrateAllocator::EnoughBitrateForAllObservers(uint32_t bitrate,
static_cast<uint32_t>(bitrate_observer_configs_.size()); static_cast<uint32_t>(bitrate_observer_configs_.size());
for (const auto& observer_config : bitrate_observer_configs_) { for (const auto& observer_config : bitrate_observer_configs_) {
if (observer_config.min_bitrate_bps + extra_bitrate_per_observer < if (observer_config.min_bitrate_bps + extra_bitrate_per_observer <
MinBitrateWithHysteresis(observer_config)) { observer_config.MinBitrateWithHysteresis()) {
return false; return false;
} }
} }

View File

@ -134,6 +134,11 @@ class BitrateAllocator {
// observers. If an observer has twice the bitrate_priority of other // observers. If an observer has twice the bitrate_priority of other
// observers, it should be allocated twice the bitrate above its min. // observers, it should be allocated twice the bitrate above its min.
double bitrate_priority; double bitrate_priority;
uint32_t LastAllocatedBitrate() const;
// The minimum bitrate required by this observer, including
// enable-hysteresis if the observer is in a paused state.
uint32_t MinBitrateWithHysteresis() const;
}; };
// Calculates the minimum requested send bitrate and max padding bitrate and // Calculates the minimum requested send bitrate and max padding bitrate and
@ -164,10 +169,6 @@ class BitrateAllocator {
ObserverAllocation MaxRateAllocation(uint32_t bitrate, ObserverAllocation MaxRateAllocation(uint32_t bitrate,
uint32_t sum_max_bitrates); uint32_t sum_max_bitrates);
uint32_t LastAllocatedBitrate(const ObserverConfig& observer_config);
// The minimum bitrate required by this observer, including enable-hysteresis
// if the observer is in a paused state.
uint32_t MinBitrateWithHysteresis(const ObserverConfig& observer_config);
// Splits |bitrate| evenly to observers already in |allocation|. // Splits |bitrate| evenly to observers already in |allocation|.
// |include_zero_allocations| decides if zero allocations should be part of // |include_zero_allocations| decides if zero allocations should be part of
// the distribution or not. The allowed max bitrate is |max_multiplier| x // the distribution or not. The allowed max bitrate is |max_multiplier| x