aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPer Åhgren <peah@webrtc.org>2019-08-23 15:49:51 +0200
committerCommit Bot <commit-bot@chromium.org>2019-08-23 14:24:48 +0000
commitc8626b6072598829e98bf65bc508359b3f8bb9ca (patch)
treed7a2e6aeffc64b59ef563ed1211c6ba0bd375de4
parent7c4b0c56bfe853ba9ed678de2123aee5520fdbb9 (diff)
downloadwebrtc-c8626b6072598829e98bf65bc508359b3f8bb9ca.tar.gz
Reland "Reland Process 8 kHz audio as 16 kHz internally of the audio processing module"
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 <gustaf@webrtc.org> > Commit-Queue: Per Åhgren <peah@webrtc.org> > 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 <gustaf@webrtc.org> Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28949}
-rw-r--r--modules/audio_processing/audio_processing_impl.cc28
-rw-r--r--modules/audio_processing/audio_processing_unittest.cc4
-rw-r--r--modules/audio_processing/include/audio_processing.h1
-rw-r--r--resources/audio_processing/output_data_fixed.pb.sha12
-rw-r--r--resources/audio_processing/output_data_float.pb.sha12
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<int>(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