Simplification and refactoring of the AudioBuffer code
This CL performs a major refactoring and simplification of the AudioBuffer code that. -Removes 7 of the 9 internal buffers of the AudioBuffer. -Avoids the implicit copying required to keep the internal buffers in sync. -Removes all code relating to handling of fixed-point sample data in the AudioBuffer. -Changes the naming of the class methods to reflect that only floating point is handled. -Corrects some bugs in the code. -Extends the handling of internal downmixing to be more generic. Bug: webrtc:10882 Change-Id: I12c8af156fbe366b154744a0a1b3d926bf7be572 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/149828 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28928}
This commit is contained in:
@ -123,17 +123,16 @@ void GainControlImpl::PackRenderAudioBuffer(
|
||||
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_proc_channels() == 1) {
|
||||
FloatS16ToS16(audio->split_bands_const_f(0)[kBand0To8kHz],
|
||||
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) {
|
||||
int32_t value =
|
||||
FloatS16ToS16(audio->split_channels_const_f(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_f(kBand0To8kHz)[j][i]);
|
||||
value += FloatS16ToS16(audio->split_channels_const(kBand0To8kHz)[j][i]);
|
||||
}
|
||||
mixed_low_pass_data[i] = value / num_channels;
|
||||
}
|
||||
@ -165,13 +164,13 @@ int GainControlImpl::AnalyzeCaptureAudio(AudioBuffer* audio) {
|
||||
for (auto& gain_controller : gain_controllers_) {
|
||||
gain_controller->set_capture_level(analog_capture_level_);
|
||||
|
||||
audio->CopySplitChannelDataTo(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->CopySplitChannelDataFrom(capture_channel, split_bands);
|
||||
audio->ImportSplitChannelData(capture_channel, split_bands);
|
||||
|
||||
if (err != AudioProcessing::kNoError) {
|
||||
return AudioProcessing::kUnspecifiedError;
|
||||
@ -183,14 +182,14 @@ int GainControlImpl::AnalyzeCaptureAudio(AudioBuffer* audio) {
|
||||
for (auto& gain_controller : gain_controllers_) {
|
||||
int32_t capture_level_out = 0;
|
||||
|
||||
audio->CopySplitChannelDataTo(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(),
|
||||
analog_capture_level_, &capture_level_out);
|
||||
|
||||
audio->CopySplitChannelDataFrom(capture_channel, split_bands);
|
||||
audio->ImportSplitChannelData(capture_channel, split_bands);
|
||||
|
||||
gain_controller->set_capture_level(capture_level_out);
|
||||
|
||||
@ -229,7 +228,7 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio,
|
||||
[AudioBuffer::kMaxSplitFrameLength];
|
||||
int16_t* split_bands[AudioBuffer::kMaxNumBands] = {
|
||||
split_band_data[0], split_band_data[1], split_band_data[2]};
|
||||
audio->CopySplitChannelDataTo(capture_channel, split_bands);
|
||||
audio->ExportSplitChannelData(capture_channel, split_bands);
|
||||
|
||||
// The call to stream_has_echo() is ok from a deadlock perspective
|
||||
// as the capture lock is allready held.
|
||||
@ -239,7 +238,7 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio,
|
||||
gain_controller->get_capture_level(), &capture_level_out,
|
||||
stream_has_echo, &saturation_warning);
|
||||
|
||||
audio->CopySplitChannelDataFrom(capture_channel, split_bands);
|
||||
audio->ImportSplitChannelData(capture_channel, split_bands);
|
||||
|
||||
if (err != AudioProcessing::kNoError) {
|
||||
return AudioProcessing::kUnspecifiedError;
|
||||
|
||||
Reference in New Issue
Block a user