Index: webrtc/modules/audio_coding/neteq/normal.cc |
diff --git a/webrtc/modules/audio_coding/neteq/normal.cc b/webrtc/modules/audio_coding/neteq/normal.cc |
index 73169184cabd086777c30332bbd6f3816ea7b2e0..95272c77c6d7068d9b9e246a5c0c8e26f837f293 100644 |
--- a/webrtc/modules/audio_coding/neteq/normal.cc |
+++ b/webrtc/modules/audio_coding/neteq/normal.cc |
@@ -14,6 +14,7 @@ |
#include <algorithm> // min |
+#include "webrtc/base/checks.h" |
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" |
#include "webrtc/modules/audio_coding/codecs/audio_decoder.h" |
#include "webrtc/modules/audio_coding/neteq/audio_multi_vector.h" |
@@ -34,7 +35,7 @@ int Normal::Process(const int16_t* input, |
return static_cast<int>(length); |
} |
- assert(output->Empty()); |
+ RTC_DCHECK(output->Empty()); |
// Output should be empty at this point. |
if (length % output->Channels() != 0) { |
// The length does not match the number of channels. |
@@ -44,7 +45,7 @@ int Normal::Process(const int16_t* input, |
output->PushBackInterleaved(input, length); |
const int fs_mult = fs_hz_ / 8000; |
- assert(fs_mult > 0); |
+ RTC_DCHECK_GT(fs_mult, 0); |
// fs_shift = log2(fs_mult), rounded down. |
// Note that |fs_shift| is not "exact" for 48 kHz. |
// TODO(hlundin): Investigate this further. |
@@ -115,8 +116,8 @@ int Normal::Process(const int16_t* input, |
int increment = 64 / fs_mult; |
for (size_t i = 0; i < length_per_channel; i++) { |
// Scale with mute factor. |
- assert(channel_ix < output->Channels()); |
- assert(i < output->Size()); |
+ RTC_DCHECK_LT(channel_ix, output->Channels()); |
+ RTC_DCHECK_LT(i, output->Size()); |
int32_t scaled_signal = (*output)[channel_ix][i] * |
external_mute_factor_array[channel_ix]; |
// Shift 14 with proper rounding. |
@@ -129,14 +130,19 @@ int Normal::Process(const int16_t* input, |
// Interpolate the expanded data into the new vector. |
// (NB/WB/SWB32/SWB48 8/16/32/48 samples.) |
- assert(fs_shift < 3); // Will always be 0, 1, or, 2. |
+ RTC_DCHECK_LT(fs_shift, 3); // Will always be 0, 1, or, 2. |
increment = 4 >> fs_shift; |
int fraction = increment; |
- for (size_t i = 0; i < static_cast<size_t>(8 * fs_mult); i++) { |
+ // Don't interpolate over more samples than what is in output. When this |
+ // cap strikes, the interpolation will likely sound worse, but this is an |
+ // emergency operation in response to unexpected input. |
+ const size_t interp_len_samples = |
+ std::min(static_cast<size_t>(8 * fs_mult), output->Size()); |
kwiberg-webrtc
2016/11/14 14:36:33
Oooh, I just realized that it's possible to define
|
+ for (size_t i = 0; i < interp_len_samples; ++i) { |
// TODO(hlundin): Add 16 instead of 8 for correct rounding. Keeping 8 |
// now for legacy bit-exactness. |
- assert(channel_ix < output->Channels()); |
- assert(i < output->Size()); |
+ RTC_DCHECK_LT(channel_ix, output->Channels()); |
+ RTC_DCHECK_LT(i, output->Size()); |
(*output)[channel_ix][i] = |
static_cast<int16_t>((fraction * (*output)[channel_ix][i] + |
(32 - fraction) * expanded[channel_ix][i] + 8) >> 5); |
@@ -144,7 +150,7 @@ int Normal::Process(const int16_t* input, |
} |
} |
} else if (last_mode == kModeRfc3389Cng) { |
- assert(output->Channels() == 1); // Not adapted for multi-channel yet. |
+ RTC_DCHECK_EQ(output->Channels(), 1); // Not adapted for multi-channel yet. |
static const size_t kCngLength = 48; |
RTC_DCHECK_LE(static_cast<size_t>(8 * fs_mult), kCngLength); |
int16_t cng_output[kCngLength]; |
@@ -165,7 +171,7 @@ int Normal::Process(const int16_t* input, |
} |
// Interpolate the CNG into the new vector. |
// (NB/WB/SWB32/SWB48 8/16/32/48 samples.) |
- assert(fs_shift < 3); // Will always be 0, 1, or, 2. |
+ RTC_DCHECK_LT(fs_shift, 3); // Will always be 0, 1, or, 2. |
int16_t increment = 4 >> fs_shift; |
int16_t fraction = increment; |
for (size_t i = 0; i < static_cast<size_t>(8 * fs_mult); i++) { |
@@ -185,8 +191,8 @@ int Normal::Process(const int16_t* input, |
for (size_t channel_ix = 0; channel_ix < output->Channels(); |
++channel_ix) { |
// Scale with mute factor. |
- assert(channel_ix < output->Channels()); |
- assert(i < output->Size()); |
+ RTC_DCHECK_LT(channel_ix, output->Channels()); |
+ RTC_DCHECK_LT(i, output->Size()); |
int32_t scaled_signal = (*output)[channel_ix][i] * |
external_mute_factor_array[channel_ix]; |
// Shift 14 with proper rounding. |