Fix two UBSan warnings in NetEq
Both were related to very large jumps in RTP timestamps. BUG=webrtc:5488 Review URL: https://codereview.webrtc.org/1685103002 Cr-Commit-Position: refs/heads/master@{#11569}
This commit is contained in:
committed by
Commit bot
parent
162c3393be
commit
07c51e3f79
@ -15,6 +15,7 @@
|
||||
|
||||
#include <algorithm> // max, min
|
||||
|
||||
#include "webrtc/base/safe_conversions.h"
|
||||
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
|
||||
#include "webrtc/modules/audio_coding/neteq/delay_peak_detector.h"
|
||||
#include "webrtc/modules/include/module_common_types.h"
|
||||
@ -93,10 +94,11 @@ int DelayManager::Update(uint16_t sequence_number,
|
||||
packet_len_ms = packet_len_ms_;
|
||||
} else {
|
||||
// Calculate timestamps per packet and derive packet length in ms.
|
||||
int packet_len_samp =
|
||||
int64_t packet_len_samp =
|
||||
static_cast<uint32_t>(timestamp - last_timestamp_) /
|
||||
static_cast<uint16_t>(sequence_number - last_seq_no_);
|
||||
packet_len_ms = (1000 * packet_len_samp) / sample_rate_hz;
|
||||
packet_len_ms =
|
||||
rtc::checked_cast<int>(1000 * packet_len_samp / sample_rate_hz);
|
||||
}
|
||||
|
||||
if (packet_len_ms > 0) {
|
||||
|
||||
@ -75,7 +75,7 @@ uint32_t TimestampScaler::ToInternal(uint32_t external_timestamp,
|
||||
internal_ref_ = external_timestamp;
|
||||
first_packet_received_ = true;
|
||||
}
|
||||
int32_t external_diff = external_timestamp - external_ref_;
|
||||
int64_t external_diff = external_timestamp - external_ref_;
|
||||
assert(denominator_ > 0); // Should not be possible.
|
||||
external_ref_ = external_timestamp;
|
||||
internal_ref_ += (external_diff * numerator_) / denominator_;
|
||||
@ -92,7 +92,7 @@ uint32_t TimestampScaler::ToExternal(uint32_t internal_timestamp) const {
|
||||
// Not initialized, or scale factor is 1.
|
||||
return internal_timestamp;
|
||||
} else {
|
||||
int32_t internal_diff = internal_timestamp - internal_ref_;
|
||||
int64_t internal_diff = internal_timestamp - internal_ref_;
|
||||
assert(numerator_ > 0); // Should not be possible.
|
||||
// Do not update references in this method.
|
||||
// Switch |denominator_| and |numerator_| to convert the other way.
|
||||
|
||||
Reference in New Issue
Block a user