From a2479f7dc4901dcc7e3245304345c3f569e04c65 Mon Sep 17 00:00:00 2001 From: Jakob Ivarsson Date: Thu, 29 Aug 2019 10:33:06 +0200 Subject: [PATCH] Remove minimum bucket returned by histogram quantile function. This fixes a bug in delay manager relative arrival delay mode that caused the effective minimum target level to be 2 packets instead of 1. Bug: webrtc:10333 Change-Id: I33d32c8da692a3db22179edb923873d307f740fd Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150785 Reviewed-by: Henrik Lundin Reviewed-by: Minyue Li Commit-Queue: Jakob Ivarsson Cr-Commit-Position: refs/heads/master@{#29002} --- modules/audio_coding/neteq/delay_manager.cc | 2 +- modules/audio_coding/neteq/histogram.cc | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/audio_coding/neteq/delay_manager.cc b/modules/audio_coding/neteq/delay_manager.cc index 19e0af2b34..3d6e5a315b 100644 --- a/modules/audio_coding/neteq/delay_manager.cc +++ b/modules/audio_coding/neteq/delay_manager.cc @@ -395,7 +395,7 @@ int DelayManager::CalculateTargetLevel(int iat_packets, bool reordered) { break; } case INTER_ARRIVAL_TIME: { - target_level = bucket_index; + target_level = std::max(bucket_index, 1); base_target_level_ = target_level; // Update detector for delay peaks. bool delay_peak_found = diff --git a/modules/audio_coding/neteq/histogram.cc b/modules/audio_coding/neteq/histogram.cc index 99ea9aa785..d0da16bdf2 100644 --- a/modules/audio_coding/neteq/histogram.cc +++ b/modules/audio_coding/neteq/histogram.cc @@ -116,14 +116,14 @@ int Histogram::Quantile(int probability) { int inverse_probability = (1 << 30) - probability; size_t index = 0; // Start from the beginning of |buckets_|. int sum = 1 << 30; // Assign to 1 in Q30. - sum -= buckets_[index]; // Ensure that target level is >= 1. + sum -= buckets_[index]; - do { + while ((sum > inverse_probability) && (index < buckets_.size() - 1)) { // Subtract the probabilities one by one until the sum is no longer greater // than |inverse_probability|. ++index; sum -= buckets_[index]; - } while ((sum > inverse_probability) && (index < buckets_.size() - 1)); + } return static_cast(index); }