diff --git a/modules/audio_coding/neteq/buffer_level_filter.cc b/modules/audio_coding/neteq/buffer_level_filter.cc index 0d75a47144..144da63987 100644 --- a/modules/audio_coding/neteq/buffer_level_filter.cc +++ b/modules/audio_coding/neteq/buffer_level_filter.cc @@ -33,15 +33,15 @@ void BufferLevelFilter::Update(size_t buffer_size_samples, // (1 - |level_factor_|) * |buffer_size_samples| // |level_factor_| and |filtered_current_level_| are in Q8. // |buffer_size_samples| is in Q0. - filtered_current_level_ = - ((level_factor_ * filtered_current_level_) >> 8) + + const int64_t filtered_current_level = + ((level_factor_ * int64_t{filtered_current_level_}) >> 8) + ((256 - level_factor_) * rtc::dchecked_cast(buffer_size_samples)); // Account for time-scale operations (accelerate and pre-emptive expand) and // make sure that the filtered value remains non-negative. filtered_current_level_ = rtc::saturated_cast(std::max( 0, - filtered_current_level_ - (int64_t{time_stretched_samples} * (1 << 8)))); + filtered_current_level - (int64_t{time_stretched_samples} * (1 << 8)))); } void BufferLevelFilter::SetTargetBufferLevel(int target_buffer_level) {