From c8626b6072598829e98bf65bc508359b3f8bb9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=85hgren?= Date: Fri, 23 Aug 2019 15:49:51 +0200 Subject: Reland "Reland Process 8 kHz audio as 16 kHz internally of the audio processing module" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a reland of b7b8e30cb44c41f51dbbefb9a9160e6dfe869c5b Original change's description: > Reland Process 8 kHz audio as 16 kHz internally of the audio processing module > > This CL relands the code from the CL "Process 8 kHz audio as 16 kHz internally > of the audio processing module" which by mistake was reverted via a rebase in > another CL. > > The CL changes the behavior of APM for 8 kHz so that it is internally > processed as 16 kHz. > > Bug: webrtc:10863 > Change-Id: I32a57b2d279c2134125667c19b09cfda381a33c3 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150221 > Reviewed-by: Gustaf Ullberg > Commit-Queue: Per Åhgren > Cr-Commit-Position: refs/heads/master@{#28944} Bug: webrtc:10863 Change-Id: Ic626b99b099248f0d8a677dc4cfe1505e14ae7cd Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150330 Reviewed-by: Gustaf Ullberg Reviewed-by: Sam Zackrisson Commit-Queue: Per Åhgren Cr-Commit-Position: refs/heads/master@{#28949} --- modules/audio_processing/audio_processing_impl.cc | 28 ++++++++++------------ .../audio_processing/audio_processing_unittest.cc | 4 ++-- .../audio_processing/include/audio_processing.h | 1 + .../audio_processing/output_data_fixed.pb.sha1 | 2 +- .../audio_processing/output_data_float.pb.sha1 | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 464c61b848..97babf99c8 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -84,22 +84,17 @@ bool SampleRateSupportsMultiBand(int sample_rate_hz) { sample_rate_hz == AudioProcessing::kSampleRate48kHz; } -int FindNativeProcessRateToUse(int minimum_rate, bool band_splitting_required) { +// Identify the native processing rate that best handles a sample rate. +int SuitableProcessRate(int minimum_rate, bool band_splitting_required) { #ifdef WEBRTC_ARCH_ARM_FAMILY - constexpr int kMaxSplittingNativeProcessRate = - AudioProcessing::kSampleRate32kHz; + constexpr int kMaxSplittingRate = 32000; #else - constexpr int kMaxSplittingNativeProcessRate = - AudioProcessing::kSampleRate48kHz; + constexpr int kMaxSplittingRate = 48000; #endif - static_assert( - kMaxSplittingNativeProcessRate <= AudioProcessing::kMaxNativeSampleRateHz, - ""); - const int uppermost_native_rate = band_splitting_required - ? kMaxSplittingNativeProcessRate - : AudioProcessing::kSampleRate48kHz; - - for (auto rate : AudioProcessing::kNativeSampleRatesHz) { + static_assert(kMaxSplittingRate <= 48000, ""); + const int uppermost_native_rate = + band_splitting_required ? kMaxSplittingRate : 48000; + for (auto rate : {16000, 32000, 48000}) { if (rate >= uppermost_native_rate) { return uppermost_native_rate; } @@ -595,18 +590,19 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) { formats_.api_format = config; - int capture_processing_rate = FindNativeProcessRateToUse( + int capture_processing_rate = SuitableProcessRate( std::min(formats_.api_format.input_stream().sample_rate_hz(), formats_.api_format.output_stream().sample_rate_hz()), submodule_states_.CaptureMultiBandSubModulesActive() || submodule_states_.RenderMultiBandSubModulesActive()); + RTC_DCHECK_NE(8000, capture_processing_rate); capture_nonlocked_.capture_processing_format = StreamConfig(capture_processing_rate); int render_processing_rate; if (!capture_nonlocked_.echo_controller_enabled) { - render_processing_rate = FindNativeProcessRateToUse( + render_processing_rate = SuitableProcessRate( std::min(formats_.api_format.reverse_input_stream().sample_rate_hz(), formats_.api_format.reverse_output_stream().sample_rate_hz()), submodule_states_.CaptureMultiBandSubModulesActive() || @@ -634,6 +630,8 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) { std::max(render_processing_rate, static_cast(kSampleRate16kHz)); } + RTC_DCHECK_NE(8000, render_processing_rate); + // Always downmix the render stream to mono for analysis. This has been // demonstrated to work well for AEC in most practical scenarios. if (submodule_states_.RenderMultiBandSubModulesActive()) { diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index 831799f775..461236ee3a 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -1200,8 +1200,8 @@ TEST_F(ApmTest, NoProcessingWhenAllComponentsDisabled) { TEST_F(ApmTest, NoProcessingWhenAllComponentsDisabledFloat) { // Test that ProcessStream copies input to output even with no processing. - const size_t kSamples = 80; - const int sample_rate = 8000; + const size_t kSamples = 160; + const int sample_rate = 16000; const float src[kSamples] = {-1.0f, 0.0f, 1.0f}; float dest[kSamples] = {}; diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index eb12a66890..fb62f7793a 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -698,6 +698,7 @@ class AudioProcessing : public rtc::RefCountInterface { kBadStreamParameterWarning = -13 }; + // Native rates supported by the AudioFrame interfaces. enum NativeRate { kSampleRate8kHz = 8000, kSampleRate16kHz = 16000, diff --git a/resources/audio_processing/output_data_fixed.pb.sha1 b/resources/audio_processing/output_data_fixed.pb.sha1 index 072dc4fa90..e4444a92ff 100644 --- a/resources/audio_processing/output_data_fixed.pb.sha1 +++ b/resources/audio_processing/output_data_fixed.pb.sha1 @@ -1 +1 @@ -7481cf57b2ade2f600d91e8bc77fd9780a56b62e \ No newline at end of file +91f6018874f4cbce414918d053e1d6c36d3e51c4 \ No newline at end of file diff --git a/resources/audio_processing/output_data_float.pb.sha1 b/resources/audio_processing/output_data_float.pb.sha1 index c1b6f1a984..a8b35f8f53 100644 --- a/resources/audio_processing/output_data_float.pb.sha1 +++ b/resources/audio_processing/output_data_float.pb.sha1 @@ -1 +1 @@ -d67b879f3b4a31b3c4f3587bd4418be5f9df5105 \ No newline at end of file +4794107799631a85c4aa4671979c6fa7edbef08b \ No newline at end of file -- cgit v1.2.3