Fixing possible overflow in NetEq buffle level filter.

Bug: chromium:979281
Change-Id: Ieb3a8f9dc03114b76b13d1f8c529e9f759804da9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144240
Commit-Queue: Minyue Li <minyue@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28433}
This commit is contained in:
Minyue Li 2019-07-01 11:23:04 +02:00 committed by Commit Bot
parent 5983087656
commit 62eb89d221

View File

@ -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<int>(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<int>(std::max<int64_t>(
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) {