Embed Deceleration Target Level Offset Field Trial.

Bug: webrtc:10619
Change-Id: I4ef75ae03d6071bf84d2c1b6e50290ea26e83496
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/152663
Commit-Queue: Ruslan Burakov <kuddai@google.com>
Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29169}
This commit is contained in:
Ruslan Burakov
2019-09-12 15:44:18 +02:00
committed by Commit Bot
parent ef85f2bdb8
commit aa5a75d5e3
3 changed files with 18 additions and 108 deletions

View File

@ -39,6 +39,7 @@ constexpr int kMaxHistoryMs = 2000; // Oldest packet to include in history to
// calculate relative packet arrival delay.
constexpr int kDelayBuckets = 100;
constexpr int kBucketSizeMs = 20;
constexpr int kDecelerationTargetLevelOffsetMs = 85 << 8; // In Q8.
int PercentileToQuantile(double percentile) {
return static_cast<int>((1 << 30) * percentile / 100.0 + 0.5);
@ -79,29 +80,6 @@ DelayHistogramConfig GetDelayHistogramConfig() {
return config;
}
absl::optional<int> GetDecelerationTargetLevelOffsetMs() {
constexpr char kDecelerationTargetLevelOffsetFieldTrial[] =
"WebRTC-Audio-NetEqDecelerationTargetLevelOffset";
if (!webrtc::field_trial::IsEnabled(
kDecelerationTargetLevelOffsetFieldTrial)) {
return absl::nullopt;
}
const auto field_trial_string = webrtc::field_trial::FindFullName(
kDecelerationTargetLevelOffsetFieldTrial);
int deceleration_target_level_offset_ms = -1;
sscanf(field_trial_string.c_str(), "Enabled-%d",
&deceleration_target_level_offset_ms);
if (deceleration_target_level_offset_ms >= 0) {
RTC_LOG(LS_INFO) << "NetEq deceleration_target_level_offset "
<< "in milliseconds "
<< deceleration_target_level_offset_ms;
// Convert into Q8.
return deceleration_target_level_offset_ms << 8;
}
return absl::nullopt;
}
absl::optional<int> GetExtraDelayMs() {
constexpr char kExtraDelayFieldTrial[] = "WebRTC-Audio-NetEqExtraDelay";
if (!webrtc::field_trial::IsEnabled(kExtraDelayFieldTrial)) {
@ -153,14 +131,10 @@ DelayManager::DelayManager(size_t max_packets_in_buffer,
frame_length_change_experiment_(
field_trial::IsEnabled("WebRTC-Audio-NetEqFramelengthExperiment")),
enable_rtx_handling_(enable_rtx_handling),
deceleration_target_level_offset_ms_(
GetDecelerationTargetLevelOffsetMs()),
extra_delay_ms_(GetExtraDelayMs()) {
assert(peak_detector); // Should never be NULL.
RTC_CHECK(histogram_);
RTC_DCHECK_GE(base_minimum_delay_ms_, 0);
RTC_DCHECK(!deceleration_target_level_offset_ms_ ||
*deceleration_target_level_offset_ms_ >= 0);
Reset();
}
@ -437,10 +411,10 @@ void DelayManager::BufferLimits(int target_level,
// |target_level| is in Q8 already.
*lower_limit = (target_level * 3) / 4;
if (deceleration_target_level_offset_ms_ && packet_len_ms_ > 0) {
*lower_limit = std::max(
*lower_limit,
target_level - *deceleration_target_level_offset_ms_ / packet_len_ms_);
if (packet_len_ms_ > 0) {
*lower_limit =
std::max(*lower_limit, target_level - kDecelerationTargetLevelOffsetMs /
packet_len_ms_);
}
int window_20ms = 0x7FFF; // Default large value for legacy bit-exactness.
@ -549,4 +523,5 @@ int DelayManager::MaxBufferTimeQ75() const {
const int max_buffer_time = max_packets_in_buffer_ * packet_len_ms_;
return rtc::dchecked_cast<int>(3 * max_buffer_time / 4);
}
} // namespace webrtc