Set pacer target bitrate to max of bwe and bitrate allocation.
ChannelGroup::OnNetWorkChanged() should not configure the pacer to send
a lower bitrate than what bitrate_allocator has actually allocated (may
be the case if min_bitrate is enforced, for instance).
BUG=
Review URL: https://codereview.webrtc.org/1413663004
Cr-Commit-Position: refs/heads/master@{#10519}
diff --git a/webrtc/modules/bitrate_controller/bitrate_allocator.cc b/webrtc/modules/bitrate_controller/bitrate_allocator.cc
index 0aec528..dc421bb 100644
--- a/webrtc/modules/bitrate_controller/bitrate_allocator.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_allocator.cc
@@ -26,23 +26,26 @@
BitrateAllocator::BitrateAllocator()
: crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
bitrate_observers_(),
+ bitrate_observers_modified_(false),
enforce_min_bitrate_(true),
last_bitrate_bps_(kDefaultBitrateBps),
last_fraction_loss_(0),
- last_rtt_(0) {
-}
+ last_rtt_(0) {}
-
-void BitrateAllocator::OnNetworkChanged(uint32_t bitrate,
- uint8_t fraction_loss,
- int64_t rtt) {
+uint32_t BitrateAllocator::OnNetworkChanged(uint32_t bitrate,
+ uint8_t fraction_loss,
+ int64_t rtt) {
CriticalSectionScoped lock(crit_sect_.get());
last_bitrate_bps_ = bitrate;
last_fraction_loss_ = fraction_loss;
last_rtt_ = rtt;
+ uint32_t allocated_bitrate_bps = 0;
ObserverBitrateMap allocation = AllocateBitrates();
- for (const auto& kv : allocation)
+ for (const auto& kv : allocation) {
kv.first->OnNetworkChanged(kv.second, last_fraction_loss_, last_rtt_);
+ allocated_bitrate_bps += kv.second;
+ }
+ return allocated_bitrate_bps;
}
BitrateAllocator::ObserverBitrateMap BitrateAllocator::AllocateBitrates() {
diff --git a/webrtc/modules/bitrate_controller/include/bitrate_allocator.h b/webrtc/modules/bitrate_controller/include/bitrate_allocator.h
index 34b9ed5..4ee27f3 100644
--- a/webrtc/modules/bitrate_controller/include/bitrate_allocator.h
+++ b/webrtc/modules/bitrate_controller/include/bitrate_allocator.h
@@ -31,9 +31,12 @@
public:
BitrateAllocator();
- void OnNetworkChanged(uint32_t target_bitrate,
- uint8_t fraction_loss,
- int64_t rtt);
+ // Allocate target_bitrate across the registered BitrateObservers.
+ // Returns actual bitrate allocated (might be higher than target_bitrate if
+ // for instance EnforceMinBitrate() is enabled.
+ uint32_t OnNetworkChanged(uint32_t target_bitrate,
+ uint8_t fraction_loss,
+ int64_t rtt);
// Set the start and max send bitrate used by the bandwidth management.
//