diff --git a/data/audio_processing/output_data_fixed.pb b/data/audio_processing/output_data_fixed.pb index ae5b8126b2..efc95631ee 100644 Binary files a/data/audio_processing/output_data_fixed.pb and b/data/audio_processing/output_data_fixed.pb differ diff --git a/data/audio_processing/output_data_float.pb b/data/audio_processing/output_data_float.pb index 97f8716250..f869792032 100644 Binary files a/data/audio_processing/output_data_float.pb and b/data/audio_processing/output_data_float.pb differ diff --git a/data/audio_processing/output_data_mac.pb b/data/audio_processing/output_data_mac.pb index c05f370973..2070170802 100644 Binary files a/data/audio_processing/output_data_mac.pb and b/data/audio_processing/output_data_mac.pb differ diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index 9fd18fcb65..953b6996cc 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -366,15 +366,18 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) { formats_.api_format.input_stream().sample_rate_hz(), formats_.api_format.output_stream().sample_rate_hz()))); - int rev_proc_rate = ClosestNativeRate(std::min( - formats_.api_format.reverse_input_stream().sample_rate_hz(), - formats_.api_format.reverse_output_stream().sample_rate_hz())); - // If the forward sample rate is 8 kHz, the reverse stream is also processed - // at this rate. + // We normally process the reverse stream at 16 kHz. Unless... + int rev_proc_rate = kSampleRate16kHz; if (capture_nonlocked_.fwd_proc_format.sample_rate_hz() == kSampleRate8kHz) { + // ...the forward stream is at 8 kHz. rev_proc_rate = kSampleRate8kHz; } else { - rev_proc_rate = std::max(rev_proc_rate, static_cast(kSampleRate16kHz)); + if (formats_.api_format.reverse_input_stream().sample_rate_hz() == + kSampleRate32kHz) { + // ...or the input is at 32 kHz, in which case we use the splitting + // filter rather than the resampler. + rev_proc_rate = kSampleRate32kHz; + } } // Always downmix the reverse stream to mono for analysis. This has been @@ -1148,11 +1151,11 @@ bool AudioProcessingImpl::is_rev_processed() const { bool AudioProcessingImpl::rev_synthesis_needed() const { return (is_rev_processed() && - is_multi_band(formats_.rev_proc_format.sample_rate_hz())); + formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz); } bool AudioProcessingImpl::rev_analysis_needed() const { - return is_multi_band(formats_.rev_proc_format.sample_rate_hz()) && + return formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz && (is_rev_processed() || public_submodules_->echo_cancellation->is_enabled() || public_submodules_->echo_control_mobile->is_enabled() || diff --git a/webrtc/modules/audio_processing/test/audio_processing_unittest.cc b/webrtc/modules/audio_processing/test/audio_processing_unittest.cc index 12f9735337..948c5efd93 100644 --- a/webrtc/modules/audio_processing/test/audio_processing_unittest.cc +++ b/webrtc/modules/audio_processing/test/audio_processing_unittest.cc @@ -2644,8 +2644,8 @@ INSTANTIATE_TEST_CASE_P( CommonFormats, AudioProcessingTest, testing::Values(std::tr1::make_tuple(48000, 48000, 48000, 48000, 0, 0), - std::tr1::make_tuple(48000, 48000, 32000, 48000, 35, 30), - std::tr1::make_tuple(48000, 48000, 16000, 48000, 35, 20), + std::tr1::make_tuple(48000, 48000, 32000, 48000, 40, 30), + std::tr1::make_tuple(48000, 48000, 16000, 48000, 40, 20), std::tr1::make_tuple(48000, 44100, 48000, 44100, 20, 20), std::tr1::make_tuple(48000, 44100, 32000, 44100, 20, 15), std::tr1::make_tuple(48000, 44100, 16000, 44100, 20, 15), @@ -2692,7 +2692,7 @@ INSTANTIATE_TEST_CASE_P( std::tr1::make_tuple(16000, 32000, 32000, 32000, 25, 0), std::tr1::make_tuple(16000, 32000, 16000, 32000, 25, 20), std::tr1::make_tuple(16000, 16000, 48000, 16000, 40, 20), - std::tr1::make_tuple(16000, 16000, 32000, 16000, 40, 20), + std::tr1::make_tuple(16000, 16000, 32000, 16000, 50, 20), std::tr1::make_tuple(16000, 16000, 16000, 16000, 0, 0))); #elif defined(WEBRTC_AUDIOPROC_FIXED_PROFILE) @@ -2748,7 +2748,7 @@ INSTANTIATE_TEST_CASE_P( std::tr1::make_tuple(16000, 32000, 32000, 32000, 25, 0), std::tr1::make_tuple(16000, 32000, 16000, 32000, 25, 20), std::tr1::make_tuple(16000, 16000, 48000, 16000, 35, 20), - std::tr1::make_tuple(16000, 16000, 32000, 16000, 35, 20), + std::tr1::make_tuple(16000, 16000, 32000, 16000, 40, 20), std::tr1::make_tuple(16000, 16000, 16000, 16000, 0, 0))); #endif