AGC: Removing unnneccessary copying and changing to using const
The changes have been shown to be bitexact on a large dataset.
Bug: webrtc:10859
Change-Id: Iedc0e9e944ebfabb717dd7fb4d2682c695da883e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159694
Reviewed-by: Benjamin Wright <benwright@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29883}
diff --git a/modules/audio_processing/gain_control_impl.cc b/modules/audio_processing/gain_control_impl.cc
index f0d48b2..7265d7b 100644
--- a/modules/audio_processing/gain_control_impl.cc
+++ b/modules/audio_processing/gain_control_impl.cc
@@ -117,23 +117,22 @@
}
void GainControlImpl::PackRenderAudioBuffer(
- AudioBuffer* audio,
+ const AudioBuffer& audio,
std::vector<int16_t>* packed_buffer) {
- RTC_DCHECK_GE(AudioBuffer::kMaxSplitFrameLength,
- audio->num_frames_per_band());
+ RTC_DCHECK_GE(AudioBuffer::kMaxSplitFrameLength, audio.num_frames_per_band());
std::array<int16_t, AudioBuffer::kMaxSplitFrameLength> mixed_low_pass_data;
rtc::ArrayView<const int16_t> mixed_low_pass(mixed_low_pass_data.data(),
- audio->num_frames_per_band());
- if (audio->num_channels() == 1) {
- FloatS16ToS16(audio->split_bands_const(0)[kBand0To8kHz],
- audio->num_frames_per_band(), mixed_low_pass_data.data());
+ audio.num_frames_per_band());
+ if (audio.num_channels() == 1) {
+ FloatS16ToS16(audio.split_bands_const(0)[kBand0To8kHz],
+ audio.num_frames_per_band(), mixed_low_pass_data.data());
} else {
- const int num_channels = static_cast<int>(audio->num_channels());
- for (size_t i = 0; i < audio->num_frames_per_band(); ++i) {
+ const int num_channels = static_cast<int>(audio.num_channels());
+ for (size_t i = 0; i < audio.num_frames_per_band(); ++i) {
int32_t value =
- FloatS16ToS16(audio->split_channels_const(kBand0To8kHz)[0][i]);
+ FloatS16ToS16(audio.split_channels_const(kBand0To8kHz)[0][i]);
for (int j = 1; j < num_channels; ++j) {
- value += FloatS16ToS16(audio->split_channels_const(kBand0To8kHz)[j][i]);
+ value += FloatS16ToS16(audio.split_channels_const(kBand0To8kHz)[j][i]);
}
mixed_low_pass_data[i] = value / num_channels;
}
@@ -141,18 +140,17 @@
packed_buffer->clear();
packed_buffer->insert(packed_buffer->end(), mixed_low_pass.data(),
- (mixed_low_pass.data() + audio->num_frames_per_band()));
+ (mixed_low_pass.data() + audio.num_frames_per_band()));
}
-int GainControlImpl::AnalyzeCaptureAudio(AudioBuffer* audio) {
+int GainControlImpl::AnalyzeCaptureAudio(const AudioBuffer& audio) {
if (!enabled_) {
return AudioProcessing::kNoError;
}
RTC_DCHECK(num_proc_channels_);
- RTC_DCHECK_GE(AudioBuffer::kMaxSplitFrameLength,
- audio->num_frames_per_band());
- RTC_DCHECK_EQ(audio->num_channels(), *num_proc_channels_);
+ RTC_DCHECK_GE(AudioBuffer::kMaxSplitFrameLength, audio.num_frames_per_band());
+ RTC_DCHECK_EQ(audio.num_channels(), *num_proc_channels_);
RTC_DCHECK_LE(*num_proc_channels_, gain_controllers_.size());
int16_t split_band_data[AudioBuffer::kMaxNumBands]
@@ -165,13 +163,11 @@
for (auto& gain_controller : gain_controllers_) {
gain_controller->set_capture_level(analog_capture_level_);
- audio->ExportSplitChannelData(capture_channel, split_bands);
+ audio.ExportSplitChannelData(capture_channel, split_bands);
int err =
WebRtcAgc_AddMic(gain_controller->state(), split_bands,
- audio->num_bands(), audio->num_frames_per_band());
-
- audio->ImportSplitChannelData(capture_channel, split_bands);
+ audio.num_bands(), audio.num_frames_per_band());
if (err != AudioProcessing::kNoError) {
return AudioProcessing::kUnspecifiedError;
@@ -183,15 +179,13 @@
for (auto& gain_controller : gain_controllers_) {
int32_t capture_level_out = 0;
- audio->ExportSplitChannelData(capture_channel, split_bands);
+ audio.ExportSplitChannelData(capture_channel, split_bands);
int err =
WebRtcAgc_VirtualMic(gain_controller->state(), split_bands,
- audio->num_bands(), audio->num_frames_per_band(),
+ audio.num_bands(), audio.num_frames_per_band(),
analog_capture_level_, &capture_level_out);
- audio->ImportSplitChannelData(capture_channel, split_bands);
-
gain_controller->set_capture_level(capture_level_out);
if (err != AudioProcessing::kNoError) {