From 85c05a8a1702d2e94daf6436043523998ba413b0 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Mon, 4 Sep 2023 13:51:40 +0200 Subject: [PATCH] Update RemoteBitreateEstimatorAbsSendTime to use BitrateTracker BitrateTracker uses same implementation as RateStatistics, but provides api using Timestamp and DataRate types instead of plain numbers Bug: webrtc:13756 Change-Id: Ie37fa58ede7590f870ec4376a64e7cf2c94431d7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/318841 Commit-Queue: Danil Chapovalov Reviewed-by: Per Kjellander Cr-Commit-Position: refs/heads/main@{#40697} --- modules/remote_bitrate_estimator/BUILD.gn | 1 - .../remote_bitrate_estimator_abs_send_time.cc | 28 ++++++------------- .../remote_bitrate_estimator_abs_send_time.h | 4 +-- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/modules/remote_bitrate_estimator/BUILD.gn b/modules/remote_bitrate_estimator/BUILD.gn index fa2d341753..b9346ae299 100644 --- a/modules/remote_bitrate_estimator/BUILD.gn +++ b/modules/remote_bitrate_estimator/BUILD.gn @@ -49,7 +49,6 @@ rtc_library("remote_bitrate_estimator") { "../../rtc_base:bitrate_tracker", "../../rtc_base:checks", "../../rtc_base:logging", - "../../rtc_base:rate_statistics", "../../rtc_base:rtc_numerics", "../../rtc_base:safe_minmax", "../../rtc_base:stringutils", diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc index 24bf5701c3..fcfbb2ecb5 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc @@ -44,15 +44,6 @@ constexpr int kExpectedNumberOfProbes = 3; constexpr double kTimestampToMs = 1000.0 / static_cast(1 << kInterArrivalShift); -absl::optional OptionalRateFromOptionalBps( - absl::optional bitrate_bps) { - if (bitrate_bps) { - return DataRate::BitsPerSec(*bitrate_bps); - } else { - return absl::nullopt; - } -} - template std::vector Keys(const std::map& map) { std::vector keys; @@ -239,8 +230,8 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacket( // here. // Check if incoming bitrate estimate is valid, and if it needs to be reset. - absl::optional incoming_bitrate = - incoming_bitrate_.Rate(arrival_time.ms()); + absl::optional incoming_bitrate = + incoming_bitrate_.Rate(arrival_time); if (incoming_bitrate) { incoming_bitrate_initialized_ = true; } else if (incoming_bitrate_initialized_) { @@ -250,7 +241,7 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacket( incoming_bitrate_.Reset(); incoming_bitrate_initialized_ = false; } - incoming_bitrate_.Update(payload_size.bytes(), arrival_time.ms()); + incoming_bitrate_.Update(payload_size, arrival_time); if (first_packet_time_.IsInfinite()) { first_packet_time_ = now; @@ -312,10 +303,10 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacket( remote_rate_.GetFeedbackInterval().ms()) { update_estimate = true; } else if (detector_.State() == BandwidthUsage::kBwOverusing) { - absl::optional incoming_rate = - incoming_bitrate_.Rate(arrival_time.ms()); - if (incoming_rate && remote_rate_.TimeToReduceFurther( - now, DataRate::BitsPerSec(*incoming_rate))) { + absl::optional incoming_rate = + incoming_bitrate_.Rate(arrival_time); + if (incoming_rate.has_value() && + remote_rate_.TimeToReduceFurther(now, *incoming_rate)) { update_estimate = true; } } @@ -325,9 +316,8 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacket( // The first overuse should immediately trigger a new estimate. // We also have to update the estimate immediately if we are overusing // and the target bitrate is too high compared to what we are receiving. - const RateControlInput input( - detector_.State(), - OptionalRateFromOptionalBps(incoming_bitrate_.Rate(arrival_time.ms()))); + const RateControlInput input(detector_.State(), + incoming_bitrate_.Rate(arrival_time)); target_bitrate = remote_rate_.Update(input, now); update_estimate = remote_rate_.ValidEstimate(); } diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h index 78ec28db41..9bcdfb8aff 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h @@ -30,8 +30,8 @@ #include "modules/remote_bitrate_estimator/inter_arrival.h" #include "modules/remote_bitrate_estimator/overuse_detector.h" #include "modules/remote_bitrate_estimator/overuse_estimator.h" +#include "rtc_base/bitrate_tracker.h" #include "rtc_base/checks.h" -#include "rtc_base/rate_statistics.h" #include "system_wrappers/include/clock.h" namespace webrtc { @@ -104,7 +104,7 @@ class RemoteBitrateEstimatorAbsSendTime : public RemoteBitrateEstimator { std::unique_ptr inter_arrival_; std::unique_ptr estimator_; OveruseDetector detector_; - RateStatistics incoming_bitrate_{kBitrateWindow.ms(), 8000}; + BitrateTracker incoming_bitrate_{kBitrateWindow}; bool incoming_bitrate_initialized_ = false; std::list probes_; size_t total_probes_received_ = 0;