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 4400afb3b01517f8b43441e762fc48c1522d9d16..72990b3c9d6add9711fd89573000a21926788c8a 100644 |
--- a/webrtc/modules/audio_coding/neteq/normal.cc |
+++ b/webrtc/modules/audio_coding/neteq/normal.cc |
@@ -42,7 +42,6 @@ int Normal::Process(const int16_t* input, |
return 0; |
} |
output->PushBackInterleaved(input, length); |
- int16_t* signal = &(*output)[0][0]; |
const int fs_mult = fs_hz_ / 8000; |
assert(fs_mult > 0); |
@@ -69,18 +68,21 @@ int Normal::Process(const int16_t* input, |
(external_mute_factor_array[channel_ix] * |
expand_->MuteFactor(channel_ix)) >> 14); |
- int16_t* signal = &(*output)[channel_ix][0]; |
size_t length_per_channel = length / output->Channels(); |
+ |
+ std::unique_ptr<int16_t[]> signal(new int16_t[length_per_channel]); |
minyue-webrtc
2016/05/08 06:13:53
will remove definition out of loop.
|
+ (*output)[channel_ix].CopyTo(length_per_channel, 0, signal.get()); |
+ |
// Find largest absolute value in new data. |
int16_t decoded_max = |
- WebRtcSpl_MaxAbsValueW16(signal, length_per_channel); |
+ WebRtcSpl_MaxAbsValueW16(signal.get(), length_per_channel); |
// Adjust muting factor if needed (to BGN level). |
size_t energy_length = |
std::min(static_cast<size_t>(fs_mult * 64), length_per_channel); |
int scaling = 6 + fs_shift |
- WebRtcSpl_NormW32(decoded_max * decoded_max); |
scaling = std::max(scaling, 0); // |scaling| should always be >= 0. |
- int32_t energy = WebRtcSpl_DotProductWithScale(signal, signal, |
+ int32_t energy = WebRtcSpl_DotProductWithScale(signal.get(), signal.get(), |
energy_length, scaling); |
int32_t scaled_energy_length = |
static_cast<int32_t>(energy_length >> scaling); |
@@ -159,7 +161,7 @@ int Normal::Process(const int16_t* input, |
} else { |
// If no CNG instance is defined, just copy from the decoded data. |
// (This will result in interpolating the decoded with itself.) |
- memcpy(cng_output, signal, fs_mult * 8 * sizeof(int16_t)); |
+ (*output)[0].CopyTo(fs_mult * 8, 0, cng_output); |
} |
// Interpolate the CNG into the new vector. |
// (NB/WB/SWB32/SWB48 8/16/32/48 samples.) |
@@ -169,8 +171,8 @@ int Normal::Process(const int16_t* input, |
for (size_t i = 0; i < static_cast<size_t>(8 * fs_mult); i++) { |
// TODO(hlundin): Add 16 instead of 8 for correct rounding. Keeping 8 now |
// for legacy bit-exactness. |
- signal[i] = |
- (fraction * signal[i] + (32 - fraction) * cng_output[i] + 8) >> 5; |
+ (*output)[0][i] = (fraction * (*output)[0][i] + |
+ (32 - fraction) * cng_output[i] + 8) >> 5; |
fraction += increment; |
} |
} else if (external_mute_factor_array[0] < 16384) { |