Index: webrtc/modules/audio_processing/audio_processing_impl.cc |
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc |
index 66123962c3a87468357b4b006665bd8b6ea6d02d..a7c120f3956b13f0c4a798a71f961453979dc213 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -118,6 +118,7 @@ |
arraysize(AudioProcessing::kNativeSampleRatesHz); |
const int AudioProcessing::kMaxNativeSampleRateHz = AudioProcessing:: |
kNativeSampleRatesHz[AudioProcessing::kNumNativeSampleRates - 1]; |
+const int AudioProcessing::kMaxAECMSampleRateHz = kSampleRate16kHz; |
AudioProcessing* AudioProcessing::Create() { |
Config config; |
@@ -364,7 +365,7 @@ |
formats_.api_format = config; |
- // We process at the closest native rate >= min(input rate, output rate). |
+ // We process at the closest native rate >= min(input rate, output rate)... |
const int min_proc_rate = |
std::min(formats_.api_format.input_stream().sample_rate_hz(), |
formats_.api_format.output_stream().sample_rate_hz()); |
@@ -374,6 +375,11 @@ |
if (fwd_proc_rate >= min_proc_rate) { |
break; |
} |
+ } |
+ // ...with one exception. |
+ if (public_submodules_->echo_control_mobile->is_enabled() && |
+ min_proc_rate > kMaxAECMSampleRateHz) { |
+ fwd_proc_rate = kMaxAECMSampleRateHz; |
} |
capture_nonlocked_.fwd_proc_format = StreamConfig(fwd_proc_rate); |
@@ -608,6 +614,12 @@ |
frame->sample_rate_hz_ != kSampleRate32kHz && |
frame->sample_rate_hz_ != kSampleRate48kHz) { |
return kBadSampleRateError; |
+ } |
+ |
+ if (public_submodules_->echo_control_mobile->is_enabled() && |
+ frame->sample_rate_hz_ > kMaxAECMSampleRateHz) { |
+ LOG(LS_ERROR) << "AECM only supports 16 or 8 kHz sample rates"; |
+ return kUnsupportedComponentError; |
} |
ProcessingConfig processing_config; |