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:
parent
5983087656
commit
62eb89d221
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user