Add field trial to introduce extra delay after target level calculation.
Bug: webrtc:10817 Change-Id: Id9eced821df2859b2cb7174062b6f5e29e145f62 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145902 Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28825}
This commit is contained in:
parent
1544915bb4
commit
81df62b456
@ -131,6 +131,23 @@ absl::optional<int> GetDecelerationTargetLevelOffsetMs() {
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
absl::optional<int> GetExtraDelayMs() {
|
||||
constexpr char kExtraDelayFieldTrial[] = "WebRTC-Audio-NetEqExtraDelay";
|
||||
if (!webrtc::field_trial::IsEnabled(kExtraDelayFieldTrial)) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
const auto field_trial_string =
|
||||
webrtc::field_trial::FindFullName(kExtraDelayFieldTrial);
|
||||
int extra_delay_ms = -1;
|
||||
sscanf(field_trial_string.c_str(), "Enabled-%d", &extra_delay_ms);
|
||||
if (extra_delay_ms >= 0) {
|
||||
RTC_LOG(LS_INFO) << "NetEq extra delay in milliseconds: " << extra_delay_ms;
|
||||
return extra_delay_ms;
|
||||
}
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace webrtc {
|
||||
@ -166,7 +183,8 @@ DelayManager::DelayManager(size_t max_packets_in_buffer,
|
||||
field_trial::IsEnabled("WebRTC-Audio-NetEqFramelengthExperiment")),
|
||||
enable_rtx_handling_(enable_rtx_handling),
|
||||
deceleration_target_level_offset_ms_(
|
||||
GetDecelerationTargetLevelOffsetMs()) {
|
||||
GetDecelerationTargetLevelOffsetMs()),
|
||||
extra_delay_ms_(GetExtraDelayMs()) {
|
||||
assert(peak_detector); // Should never be NULL.
|
||||
RTC_CHECK(histogram_);
|
||||
RTC_DCHECK_GE(base_minimum_delay_ms_, 0);
|
||||
@ -385,6 +403,10 @@ int DelayManager::CalculateTargetLevel(int iat_packets, bool reordered) {
|
||||
target_level = std::max(target_level, 1);
|
||||
// Scale to Q8 and assign to member variable.
|
||||
target_level_ = target_level << 8;
|
||||
if (extra_delay_ms_ && packet_len_ms_ > 0) {
|
||||
int extra_delay = (extra_delay_ms_.value() << 8) / packet_len_ms_;
|
||||
target_level_ += extra_delay;
|
||||
}
|
||||
return target_level_;
|
||||
}
|
||||
|
||||
|
||||
@ -209,6 +209,7 @@ class DelayManager {
|
||||
// impose deceleration to increase the buffer level. The value is in Q8, and
|
||||
// measured in milliseconds.
|
||||
const absl::optional<int> deceleration_target_level_offset_ms_;
|
||||
const absl::optional<int> extra_delay_ms_;
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(DelayManager);
|
||||
};
|
||||
|
||||
@ -850,4 +850,27 @@ TEST_F(DelayManagerTest, DecelerationTargetLevelOffset) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DelayManagerTest, ExtraDelay) {
|
||||
{
|
||||
// Default behavior. Insert two packets so that a new target level is
|
||||
// calculated.
|
||||
SetPacketAudioLength(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
EXPECT_EQ(dm_->TargetLevel(), 1 << 8);
|
||||
}
|
||||
{
|
||||
// Add 80 ms extra delay and calculate a new target level.
|
||||
test::ScopedFieldTrials field_trial(
|
||||
"WebRTC-Audio-NetEqExtraDelay/Enabled-80/");
|
||||
RecreateDelayManager();
|
||||
SetPacketAudioLength(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
IncreaseTime(kFrameSizeMs);
|
||||
InsertNextPacket();
|
||||
EXPECT_EQ(dm_->TargetLevel(), 5 << 8);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user