Index: modules/audio_coding/audio_network_adaptor/frame_length_controller.cc |
diff --git a/modules/audio_coding/audio_network_adaptor/frame_length_controller.cc b/modules/audio_coding/audio_network_adaptor/frame_length_controller.cc |
index 9a5f0322137d42c54fc0ce7263796c39fef0343d..5ae78b031cecd2c53f61db1d99c6833c9f45783c 100644 |
--- a/modules/audio_coding/audio_network_adaptor/frame_length_controller.cc |
+++ b/modules/audio_coding/audio_network_adaptor/frame_length_controller.cc |
@@ -10,6 +10,7 @@ |
#include "modules/audio_coding/audio_network_adaptor/frame_length_controller.h" |
+#include <algorithm> |
#include <utility> |
#include "rtc_base/checks.h" |
@@ -32,12 +33,16 @@ FrameLengthController::Config::Config( |
int min_encoder_bitrate_bps, |
float fl_increasing_packet_loss_fraction, |
float fl_decreasing_packet_loss_fraction, |
+ int fl_increase_overhead_offset, |
+ int fl_decrease_overhead_offset, |
std::map<FrameLengthChange, int> fl_changing_bandwidths_bps) |
: encoder_frame_lengths_ms(encoder_frame_lengths_ms), |
initial_frame_length_ms(initial_frame_length_ms), |
min_encoder_bitrate_bps(min_encoder_bitrate_bps), |
fl_increasing_packet_loss_fraction(fl_increasing_packet_loss_fraction), |
fl_decreasing_packet_loss_fraction(fl_decreasing_packet_loss_fraction), |
+ fl_increase_overhead_offset(fl_increase_overhead_offset), |
+ fl_decrease_overhead_offset(fl_decrease_overhead_offset), |
fl_changing_bandwidths_bps(std::move(fl_changing_bandwidths_bps)) {} |
FrameLengthController::Config::Config(const Config& other) = default; |
@@ -71,9 +76,12 @@ void FrameLengthController::MakeDecision(AudioEncoderRuntimeConfig* config) { |
if (FrameLengthIncreasingDecision(*config)) { |
++frame_length_ms_; |
+ prev_decision_increase_ = true; |
} else if (FrameLengthDecreasingDecision(*config)) { |
--frame_length_ms_; |
+ prev_decision_increase_ = false; |
} |
+ config->last_fl_change_increase = prev_decision_increase_; |
config->frame_length_ms = rtc::Optional<int>(*frame_length_ms_); |
} |
@@ -110,10 +118,22 @@ bool FrameLengthController::FrameLengthIncreasingDecision( |
if (increase_threshold == config_.fl_changing_bandwidths_bps.end()) |
return false; |
+ // Check that |
+ // -(*overhead_bytes_per_packet_) <= offset <= (*overhead_bytes_per_packet_) |
+ RTC_DCHECK( |
+ !overhead_bytes_per_packet_ || |
+ (overhead_bytes_per_packet_ && |
+ static_cast<size_t>(std::max(0, -config_.fl_increase_overhead_offset)) <= |
+ *overhead_bytes_per_packet_ && |
+ static_cast<size_t>(std::max(0, config_.fl_increase_overhead_offset)) <= |
+ *overhead_bytes_per_packet_)); |
+ |
if (uplink_bandwidth_bps_ && overhead_bytes_per_packet_ && |
*uplink_bandwidth_bps_ <= |
config_.min_encoder_bitrate_bps + kPreventOveruseMarginBps + |
- OverheadRateBps(*overhead_bytes_per_packet_, *frame_length_ms_)) { |
+ OverheadRateBps(*overhead_bytes_per_packet_ + |
+ config_.fl_increase_overhead_offset, |
+ *frame_length_ms_)) { |
return true; |
} |
@@ -145,10 +165,11 @@ bool FrameLengthController::FrameLengthDecreasingDecision( |
return false; |
if (uplink_bandwidth_bps_ && overhead_bytes_per_packet_ && |
- *uplink_bandwidth_bps_ <= config_.min_encoder_bitrate_bps + |
- kPreventOveruseMarginBps + |
- OverheadRateBps(*overhead_bytes_per_packet_, |
- *shorter_frame_length_ms)) { |
+ *uplink_bandwidth_bps_ <= |
+ config_.min_encoder_bitrate_bps + kPreventOveruseMarginBps + |
+ OverheadRateBps(*overhead_bytes_per_packet_ + |
+ config_.fl_decrease_overhead_offset, |
+ *shorter_frame_length_ms)) { |
return false; |
} |