Fix integer overflow.
Bug: chromium:1172583 Change-Id: I72c6c07f6f5702311c1a73eb4551e92a34c87e47 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/205007 Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33127}
This commit is contained in:
committed by
Commit Bot
parent
78f87ab106
commit
e7ded686d5
@ -35,14 +35,13 @@ void BufferLevelFilter::Update(size_t buffer_size_samples,
|
||||
// |level_factor_| and |filtered_current_level_| are in Q8.
|
||||
// |buffer_size_samples| is in Q0.
|
||||
const int64_t filtered_current_level =
|
||||
((level_factor_ * int64_t{filtered_current_level_}) >> 8) +
|
||||
((256 - level_factor_) * rtc::dchecked_cast<int>(buffer_size_samples));
|
||||
(level_factor_ * int64_t{filtered_current_level_} >> 8) +
|
||||
(256 - level_factor_) * rtc::dchecked_cast<int64_t>(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))));
|
||||
0, filtered_current_level - int64_t{time_stretched_samples} * (1 << 8)));
|
||||
}
|
||||
|
||||
void BufferLevelFilter::SetFilteredBufferLevel(int buffer_size_samples) {
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#define MODULES_AUDIO_CODING_NETEQ_BUFFER_LEVEL_FILTER_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "rtc_base/constructor_magic.h"
|
||||
|
||||
@ -39,7 +40,7 @@ class BufferLevelFilter {
|
||||
// Returns filtered current level in number of samples.
|
||||
virtual int filtered_current_level() const {
|
||||
// Round to nearest whole sample.
|
||||
return (filtered_current_level_ + (1 << 7)) >> 8;
|
||||
return (int64_t{filtered_current_level_} + (1 << 7)) >> 8;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user