Reland "Make relative arrival delay mode default in NetEq delay manager."
This is a reland of 77c71d1488b1c821b2b3481f23a3264f1b1d37a5
Original change's description:
> Make relative arrival delay mode default in NetEq delay manager.
>
> Bug: webrtc:10333
> Change-Id: I9b1e0bec0b1813cf31259492f83eb2ca86a44d3f
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150782
> Reviewed-by: Sebastian Jansson <srte@webrtc.org>
> Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
> Reviewed-by: Minyue Li <minyue@webrtc.org>
> Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#29075}
Bug: webrtc:10333
Change-Id: I9c726cec1afc1147a4618fc224404a83962e6ae2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/152281
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29136}
diff --git a/modules/audio_coding/neteq/delay_manager.cc b/modules/audio_coding/neteq/delay_manager.cc
index 5d6dc00..70991f3 100644
--- a/modules/audio_coding/neteq/delay_manager.cc
+++ b/modules/audio_coding/neteq/delay_manager.cc
@@ -31,11 +31,8 @@
namespace {
-constexpr int kLimitProbability = 1020054733; // 19/20 in Q30.
constexpr int kMinBaseMinimumDelayMs = 0;
constexpr int kMaxBaseMinimumDelayMs = 10000;
-constexpr int kIatFactor = 32745; // 0.9993 in Q15.
-constexpr int kMaxIat = 64; // Max inter-arrival time to register.
constexpr int kMaxReorderedPackets =
10; // Max number of consecutive reordered packets.
constexpr int kMaxHistoryMs = 2000; // Oldest packet to include in history to
@@ -47,43 +44,19 @@
return static_cast<int>((1 << 30) * percentile / 100.0 + 0.5);
}
-absl::optional<int> GetForcedLimitProbability() {
- constexpr char kForceTargetDelayPercentileFieldTrial[] =
- "WebRTC-Audio-NetEqForceTargetDelayPercentile";
- const bool use_forced_target_delay_percentile =
- webrtc::field_trial::IsEnabled(kForceTargetDelayPercentileFieldTrial);
- if (use_forced_target_delay_percentile) {
- const std::string field_trial_string = webrtc::field_trial::FindFullName(
- kForceTargetDelayPercentileFieldTrial);
- double percentile = -1.0;
- if (sscanf(field_trial_string.c_str(), "Enabled-%lf", &percentile) == 1 &&
- percentile >= 0.0 && percentile <= 100.0) {
- return absl::make_optional<int>(
- PercentileToQuantile(percentile)); // in Q30.
- } else {
- RTC_LOG(LS_WARNING) << "Invalid parameter for "
- << kForceTargetDelayPercentileFieldTrial
- << ", ignored.";
- }
- }
- return absl::nullopt;
-}
-
struct DelayHistogramConfig {
- int quantile = 1020054733; // 0.95 in Q30.
+ int quantile = 1041529569; // 0.97 in Q30.
int forget_factor = 32745; // 0.9993 in Q15.
- absl::optional<double> start_forget_weight;
+ absl::optional<double> start_forget_weight = 2;
};
-absl::optional<DelayHistogramConfig> GetDelayHistogramConfig() {
+DelayHistogramConfig GetDelayHistogramConfig() {
constexpr char kDelayHistogramFieldTrial[] =
"WebRTC-Audio-NetEqDelayHistogram";
- const bool use_new_delay_manager =
- webrtc::field_trial::IsEnabled(kDelayHistogramFieldTrial);
- if (use_new_delay_manager) {
+ DelayHistogramConfig config;
+ if (webrtc::field_trial::IsEnabled(kDelayHistogramFieldTrial)) {
const auto field_trial_string =
webrtc::field_trial::FindFullName(kDelayHistogramFieldTrial);
- DelayHistogramConfig config;
double percentile = -1.0;
double forget_factor = -1.0;
double start_forget_weight = -1.0;
@@ -93,18 +66,17 @@
forget_factor <= 1.0) {
config.quantile = PercentileToQuantile(percentile);
config.forget_factor = (1 << 15) * forget_factor;
- if (start_forget_weight >= 1) {
- config.start_forget_weight = start_forget_weight;
- }
+ config.start_forget_weight =
+ start_forget_weight >= 1 ? absl::make_optional(start_forget_weight)
+ : absl::nullopt;
}
- RTC_LOG(LS_INFO) << "Delay histogram config:"
- << " quantile=" << config.quantile
- << " forget_factor=" << config.forget_factor
- << " start_forget_weight="
- << config.start_forget_weight.value_or(0);
- return absl::make_optional(config);
}
- return absl::nullopt;
+ RTC_LOG(LS_INFO) << "Delay histogram config:"
+ << " quantile=" << config.quantile
+ << " forget_factor=" << config.forget_factor
+ << " start_forget_weight="
+ << config.start_forget_weight.value_or(0);
+ return config;
}
absl::optional<int> GetDecelerationTargetLevelOffsetMs() {
@@ -200,21 +172,11 @@
DelayPeakDetector* peak_detector,
const TickTimer* tick_timer,
StatisticsCalculator* statistics) {
- int quantile;
- std::unique_ptr<Histogram> histogram;
- HistogramMode mode;
- auto delay_histogram_config = GetDelayHistogramConfig();
- if (delay_histogram_config) {
- DelayHistogramConfig config = delay_histogram_config.value();
- quantile = config.quantile;
- histogram = absl::make_unique<Histogram>(
- kDelayBuckets, config.forget_factor, config.start_forget_weight);
- mode = RELATIVE_ARRIVAL_DELAY;
- } else {
- quantile = GetForcedLimitProbability().value_or(kLimitProbability);
- histogram = absl::make_unique<Histogram>(kMaxIat + 1, kIatFactor);
- mode = INTER_ARRIVAL_TIME;
- }
+ const HistogramMode mode = RELATIVE_ARRIVAL_DELAY;
+ DelayHistogramConfig config = GetDelayHistogramConfig();
+ const int quantile = config.quantile;
+ std::unique_ptr<Histogram> histogram = absl::make_unique<Histogram>(
+ kDelayBuckets, config.forget_factor, config.start_forget_weight);
return absl::make_unique<DelayManager>(
max_packets_in_buffer, base_minimum_delay_ms, quantile, mode,
enable_rtx_handling, peak_detector, tick_timer, statistics,
diff --git a/modules/audio_coding/neteq/delay_manager_unittest.cc b/modules/audio_coding/neteq/delay_manager_unittest.cc
index ab316e2..beb61b0 100644
--- a/modules/audio_coding/neteq/delay_manager_unittest.cc
+++ b/modules/audio_coding/neteq/delay_manager_unittest.cc
@@ -62,7 +62,7 @@
bool enable_rtx_handling_ = false;
bool use_mock_histogram_ = false;
DelayManager::HistogramMode histogram_mode_ =
- DelayManager::HistogramMode::INTER_ARRIVAL_TIME;
+ DelayManager::HistogramMode::RELATIVE_ARRIVAL_DELAY;
};
DelayManagerTest::DelayManagerTest()
@@ -143,10 +143,6 @@
// Advance time by one frame size.
IncreaseTime(kFrameSizeMs);
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return false to indicate no peaks found.
- EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
InsertNextPacket();
EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8.
EXPECT_EQ(1, dm_->base_target_level());
@@ -166,10 +162,6 @@
// Advance time by two frame size.
IncreaseTime(2 * kFrameSizeMs);
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return false to indicate no peaks found.
- EXPECT_CALL(detector_, Update(2, false, 2)).WillOnce(Return(false));
InsertNextPacket();
EXPECT_EQ(2 << 8, dm_->TargetLevel()); // In Q8.
EXPECT_EQ(2, dm_->base_target_level());
@@ -182,51 +174,6 @@
EXPECT_EQ(lower + (20 << 8) / kFrameSizeMs, higher);
}
-TEST_F(DelayManagerTest, UpdatePeakFound) {
- SetPacketAudioLength(kFrameSizeMs);
- // First packet arrival.
- InsertNextPacket();
- // Advance time by one frame size.
- IncreaseTime(kFrameSizeMs);
- // Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return true to indicate that peaks are found. Let the peak height be 5.
- EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(true));
- EXPECT_CALL(detector_, MaxPeakHeight()).WillOnce(Return(5));
- InsertNextPacket();
- EXPECT_EQ(5 << 8, dm_->TargetLevel());
- EXPECT_EQ(1, dm_->base_target_level()); // Base target level is w/o peaks.
- int lower, higher;
- dm_->BufferLimits(&lower, &higher);
- // Expect |lower| to be 75% of target level, and |higher| to be target level.
- EXPECT_EQ((5 << 8) * 3 / 4, lower);
- EXPECT_EQ(5 << 8, higher);
-}
-
-TEST_F(DelayManagerTest, TargetDelay) {
- SetPacketAudioLength(kFrameSizeMs);
- // First packet arrival.
- InsertNextPacket();
- // Advance time by one frame size.
- IncreaseTime(kFrameSizeMs);
- // Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return false to indicate no peaks found.
- EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
- InsertNextPacket();
- const int kExpectedTarget = 1;
- EXPECT_EQ(kExpectedTarget << 8, dm_->TargetLevel()); // In Q8.
- EXPECT_EQ(1, dm_->base_target_level());
- int lower, higher;
- dm_->BufferLimits(&lower, &higher);
- // Expect |lower| to be 75% of base target level, and |higher| to be
- // lower + 20 ms headroom.
- EXPECT_EQ((1 << 8) * 3 / 4, lower);
- EXPECT_EQ(lower + (20 << 8) / kFrameSizeMs, higher);
-}
-
TEST_F(DelayManagerTest, MaxDelay) {
const int kExpectedTarget = 5;
const int kTimeIncrement = kExpectedTarget * kFrameSizeMs;
@@ -234,12 +181,6 @@
// First packet arrival.
InsertNextPacket();
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to |kExpectedTarget| packet. Return true to indicate peaks found.
- EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL(detector_, MaxPeakHeight())
- .WillRepeatedly(Return(kExpectedTarget));
IncreaseTime(kTimeIncrement);
InsertNextPacket();
@@ -264,12 +205,6 @@
// First packet arrival.
InsertNextPacket();
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to |kExpectedTarget| packet. Return true to indicate peaks found.
- EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL(detector_, MaxPeakHeight())
- .WillRepeatedly(Return(kExpectedTarget));
IncreaseTime(kTimeIncrement);
InsertNextPacket();
@@ -279,7 +214,7 @@
int kMinDelayPackets = kExpectedTarget + 2;
int kMinDelayMs = kMinDelayPackets * kFrameSizeMs;
dm_->SetMinimumDelay(kMinDelayMs);
- IncreaseTime(kTimeIncrement);
+ IncreaseTime(kFrameSizeMs);
InsertNextPacket();
EXPECT_EQ(kMinDelayPackets << 8, dm_->TargetLevel());
}
@@ -419,12 +354,6 @@
// First packet arrival.
InsertNextPacket();
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to |kExpectedTarget| packet. Return true to indicate peaks found.
- EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL(detector_, MaxPeakHeight())
- .WillRepeatedly(Return(kExpectedTarget));
IncreaseTime(kTimeIncrement);
InsertNextPacket();
@@ -436,7 +365,7 @@
EXPECT_TRUE(dm_->SetBaseMinimumDelay(kBaseMinimumDelayMs));
EXPECT_EQ(dm_->GetBaseMinimumDelay(), kBaseMinimumDelayMs);
- IncreaseTime(kTimeIncrement);
+ IncreaseTime(kFrameSizeMs);
InsertNextPacket();
EXPECT_EQ(dm_->GetBaseMinimumDelay(), kBaseMinimumDelayMs);
EXPECT_EQ(kBaseMinimumDelayPackets << 8, dm_->TargetLevel());
@@ -449,12 +378,6 @@
// First packet arrival.
InsertNextPacket();
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to |kExpectedTarget|. Return true to indicate peaks found.
- EXPECT_CALL(detector_, Update(kExpectedTarget, false, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL(detector_, MaxPeakHeight())
- .WillRepeatedly(Return(kExpectedTarget));
IncreaseTime(kTimeIncrement);
InsertNextPacket();
@@ -474,21 +397,12 @@
EXPECT_TRUE(dm_->SetBaseMinimumDelay(kBaseMinimumDelayMs));
EXPECT_EQ(dm_->GetBaseMinimumDelay(), kBaseMinimumDelayMs);
- IncreaseTime(kTimeIncrement);
+ IncreaseTime(kFrameSizeMs);
InsertNextPacket();
EXPECT_EQ(dm_->GetBaseMinimumDelay(), kBaseMinimumDelayMs);
EXPECT_EQ(kBaseMinimumDelayPackets << 8, dm_->TargetLevel());
}
-TEST_F(DelayManagerTest, UpdateReorderedPacket) {
- SetPacketAudioLength(kFrameSizeMs);
- InsertNextPacket();
-
- // Insert packet that was sent before the previous packet.
- EXPECT_CALL(detector_, Update(_, true, _));
- EXPECT_EQ(0, dm_->Update(seq_no_ - 1, ts_ - kFrameSizeMs, kFs));
-}
-
TEST_F(DelayManagerTest, EnableRtxHandling) {
enable_rtx_handling_ = true;
use_mock_histogram_ = true;
@@ -500,22 +414,23 @@
InsertNextPacket();
// Insert reordered packet.
- EXPECT_CALL(*mock_histogram_, Add(3));
+ EXPECT_CALL(*mock_histogram_, Add(2));
EXPECT_EQ(0, dm_->Update(seq_no_ - 3, ts_ - 3 * kFrameSizeMs, kFs));
// Insert another reordered packet.
- EXPECT_CALL(*mock_histogram_, Add(2));
+ EXPECT_CALL(*mock_histogram_, Add(1));
EXPECT_EQ(0, dm_->Update(seq_no_ - 2, ts_ - 2 * kFrameSizeMs, kFs));
// Insert the next packet in order and verify that the inter-arrival time is
// estimated correctly.
IncreaseTime(kFrameSizeMs);
- EXPECT_CALL(*mock_histogram_, Add(1));
+ EXPECT_CALL(*mock_histogram_, Add(0));
InsertNextPacket();
}
// Tests that skipped sequence numbers (simulating empty packets) are handled
// correctly.
+// TODO(jakobi): Make delay manager independent of sequence numbers.
TEST_F(DelayManagerTest, EmptyPacketsReported) {
SetPacketAudioLength(kFrameSizeMs);
// First packet arrival.
@@ -532,17 +447,13 @@
}
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return false to indicate no peaks found.
- EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
InsertNextPacket();
EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8.
}
-// Same as above, but do not call RegisterEmptyPacket. Observe the target level
-// increase dramatically.
+// Same as above, but do not call RegisterEmptyPacket. Target level stays the
+// same.
TEST_F(DelayManagerTest, EmptyPacketsNotReported) {
SetPacketAudioLength(kFrameSizeMs);
// First packet arrival.
@@ -551,19 +462,14 @@
// Advance time by one frame size.
IncreaseTime(kFrameSizeMs);
- // Advance the sequence number by 5, simulating that 5 empty packets were
+ // Advance the sequence number by 10, simulating that 10 empty packets were
// received, but never inserted.
seq_no_ += 10;
// Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet, and (base) target level equal to 1 as well.
- // Return false to indicate no peaks found.
- EXPECT_CALL(detector_, Update(10, false, 10)).WillOnce(Return(false));
InsertNextPacket();
- // Note 10 times higher target value.
- EXPECT_EQ(10 * 1 << 8, dm_->TargetLevel()); // In Q8.
+ EXPECT_EQ(1 << 8, dm_->TargetLevel()); // In Q8.
}
TEST_F(DelayManagerTest, Failures) {
@@ -583,58 +489,6 @@
EXPECT_FALSE(dm_->SetMaximumDelay(60));
}
-TEST_F(DelayManagerTest, TargetDelayGreaterThanOne) {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-0/");
- RecreateDelayManager();
- EXPECT_EQ(0, dm_->histogram_quantile());
-
- SetPacketAudioLength(kFrameSizeMs);
- // First packet arrival.
- InsertNextPacket();
- // Advance time by one frame size.
- IncreaseTime(kFrameSizeMs);
- // Second packet arrival.
- // Expect detector update method to be called once with inter-arrival time
- // equal to 1 packet.
- EXPECT_CALL(detector_, Update(1, false, 1)).WillOnce(Return(false));
- InsertNextPacket();
- constexpr int kExpectedTarget = 1;
- EXPECT_EQ(kExpectedTarget << 8, dm_->TargetLevel()); // In Q8.
-}
-
-TEST_F(DelayManagerTest, ForcedTargetDelayPercentile) {
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-95/");
- RecreateDelayManager();
- EXPECT_EQ(kDefaultHistogramQuantile, dm_->histogram_quantile());
- }
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-99.95/");
- RecreateDelayManager();
- EXPECT_EQ(1073204953, dm_->histogram_quantile()); // 0.9995 in Q30.
- }
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Disabled/");
- RecreateDelayManager();
- EXPECT_EQ(kDefaultHistogramQuantile, dm_->histogram_quantile());
- }
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled--1/");
- EXPECT_EQ(kDefaultHistogramQuantile, dm_->histogram_quantile());
- }
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-100.1/");
- RecreateDelayManager();
- EXPECT_EQ(kDefaultHistogramQuantile, dm_->histogram_quantile());
- }
-}
-
TEST_F(DelayManagerTest, DelayHistogramFieldTrial) {
{
test::ScopedFieldTrials field_trial(
@@ -660,49 +514,6 @@
dm_->histogram()->base_forget_factor_for_testing()); // 0.998 in Q15.
EXPECT_FALSE(dm_->histogram()->start_forget_weight_for_testing());
}
- {
- // NetEqDelayHistogram should take precedence over
- // NetEqForceTargetDelayPercentile.
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqForceTargetDelayPercentile/Enabled-99.95/"
- "WebRTC-Audio-NetEqDelayHistogram/Enabled-96-0.998/");
- RecreateDelayManager();
- EXPECT_EQ(DelayManager::HistogramMode::RELATIVE_ARRIVAL_DELAY,
- dm_->histogram_mode());
- EXPECT_EQ(1030792151, dm_->histogram_quantile()); // 0.96 in Q30.
- EXPECT_EQ(
- 32702,
- dm_->histogram()->base_forget_factor_for_testing()); // 0.998 in Q15.
- EXPECT_FALSE(dm_->histogram()->start_forget_weight_for_testing());
- }
- {
- // Invalid parameters.
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqDelayHistogram/Enabled-96/");
- RecreateDelayManager();
- EXPECT_EQ(DelayManager::HistogramMode::RELATIVE_ARRIVAL_DELAY,
- dm_->histogram_mode());
- EXPECT_EQ(kDefaultHistogramQuantile,
- dm_->histogram_quantile()); // 0.95 in Q30.
- EXPECT_EQ(
- kForgetFactor,
- dm_->histogram()->base_forget_factor_for_testing()); // 0.9993 in Q15.
- EXPECT_FALSE(dm_->histogram()->start_forget_weight_for_testing());
- }
- {
- test::ScopedFieldTrials field_trial(
- "WebRTC-Audio-NetEqDelayHistogram/Disabled/");
- RecreateDelayManager();
- EXPECT_EQ(DelayManager::HistogramMode::INTER_ARRIVAL_TIME,
- dm_->histogram_mode());
- EXPECT_EQ(kDefaultHistogramQuantile,
- dm_->histogram_quantile()); // 0.95 in Q30.
- EXPECT_EQ(
- kForgetFactor,
- dm_->histogram()->base_forget_factor_for_testing()); // 0.9993 in Q15.
- EXPECT_FALSE(dm_->histogram()->start_forget_weight_for_testing());
- }
-
// Test parameter for new call start adaptation.
{
test::ScopedFieldTrials field_trial(
diff --git a/modules/audio_coding/neteq/neteq_unittest.cc b/modules/audio_coding/neteq/neteq_unittest.cc
index b1ec216..8095b61 100644
--- a/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_unittest.cc
@@ -456,16 +456,16 @@
webrtc::test::ResourcePath("audio_coding/neteq_universal_new", "rtp");
const std::string output_checksum =
- PlatformChecksum("998be2e5a707e636af0b6298f54bedfabe72aae1",
- "61e238ece4cd3b67d66a0b7047e06b20607dcb79", "not used",
- "998be2e5a707e636af0b6298f54bedfabe72aae1",
- "4116ac2a6e75baac3194b712d6fabe28b384275e");
+ PlatformChecksum("6ae9f643dc3e5f3452d28a772eef7e00e74158bc",
+ "f4374430e870d66268c1b8e22fb700eb072d567e", "not used",
+ "6ae9f643dc3e5f3452d28a772eef7e00e74158bc",
+ "8d73c98645917cdeaaa01c20cf095ccc5a10b2b5");
const std::string network_stats_checksum =
- PlatformChecksum("5e5230b2d5042eccd197dac29edade1cc233586c",
- "2183564f11b53259ba7f86f48f4df3d7d653c678", "not used",
- "5e5230b2d5042eccd197dac29edade1cc233586c",
- "5e5230b2d5042eccd197dac29edade1cc233586c");
+ PlatformChecksum("3d186ea7e243abfdbd3d39b8ebf8f02a318117e4",
+ "0b725774133da5dd823f2046663c12a76e0dbd79", "not used",
+ "3d186ea7e243abfdbd3d39b8ebf8f02a318117e4",
+ "3d186ea7e243abfdbd3d39b8ebf8f02a318117e4");
DecodeAndCompare(input_rtp_file, output_checksum, network_stats_checksum,
absl::GetFlag(FLAGS_gen_ref));
@@ -726,7 +726,7 @@
const double kDriftFactor = 1000.0 / (1000.0 - 25.0);
const double kNetworkFreezeTimeMs = 0.0;
const bool kGetAudioDuringFreezeRecovery = false;
- const int kDelayToleranceMs = 20;
+ const int kDelayToleranceMs = 40;
const int kMaxTimeToSpeechMs = 100;
LongCngWithClockDrift(kDriftFactor, kNetworkFreezeTimeMs,
kGetAudioDuringFreezeRecovery, kDelayToleranceMs,
@@ -750,7 +750,7 @@
const double kDriftFactor = 1000.0 / (1000.0 - 25.0);
const double kNetworkFreezeTimeMs = 5000.0;
const bool kGetAudioDuringFreezeRecovery = false;
- const int kDelayToleranceMs = 20;
+ const int kDelayToleranceMs = 40;
const int kMaxTimeToSpeechMs = 100;
LongCngWithClockDrift(kDriftFactor, kNetworkFreezeTimeMs,
kGetAudioDuringFreezeRecovery, kDelayToleranceMs,
@@ -762,7 +762,7 @@
const double kDriftFactor = 1000.0 / (1000.0 - 25.0);
const double kNetworkFreezeTimeMs = 5000.0;
const bool kGetAudioDuringFreezeRecovery = true;
- const int kDelayToleranceMs = 20;
+ const int kDelayToleranceMs = 40;
const int kMaxTimeToSpeechMs = 100;
LongCngWithClockDrift(kDriftFactor, kNetworkFreezeTimeMs,
kGetAudioDuringFreezeRecovery, kDelayToleranceMs,