diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index 091a5574ec..5029bc712f 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -191,7 +191,8 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, transient_suppressor_enabled_(config.Get().enabled), beamformer_enabled_(config.Get().enabled), beamformer_(beamformer), - array_geometry_(config.Get().array_geometry) { + array_geometry_(config.Get().array_geometry), + supports_48kHz_(config.Get().enabled) { echo_cancellation_ = new EchoCancellationImpl(this, crit_); component_list_.push_back(echo_cancellation_); @@ -353,7 +354,9 @@ int AudioProcessingImpl::InitializeLocked(int input_sample_rate_hz, // We process at the closest native rate >= min(input rate, output rate)... int min_proc_rate = std::min(fwd_in_format_.rate(), fwd_out_format_.rate()); int fwd_proc_rate; - if (min_proc_rate > kSampleRate16kHz) { + if (supports_48kHz_ && min_proc_rate > kSampleRate32kHz) { + fwd_proc_rate = kSampleRate48kHz; + } else if (min_proc_rate > kSampleRate16kHz) { fwd_proc_rate = kSampleRate32kHz; } else if (min_proc_rate > kSampleRate8kHz) { fwd_proc_rate = kSampleRate16kHz; diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h index 9d99bf0ab1..d82ef020b2 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.h +++ b/webrtc/modules/audio_processing/audio_processing_impl.h @@ -222,6 +222,8 @@ class AudioProcessingImpl : public AudioProcessing { const bool beamformer_enabled_; rtc::scoped_ptr beamformer_; const std::vector array_geometry_; + + const bool supports_48kHz_; }; } // namespace webrtc diff --git a/webrtc/modules/audio_processing/include/audio_processing.h b/webrtc/modules/audio_processing/include/audio_processing.h index 3715b34b36..4004a624fb 100644 --- a/webrtc/modules/audio_processing/include/audio_processing.h +++ b/webrtc/modules/audio_processing/include/audio_processing.h @@ -105,6 +105,15 @@ struct Beamforming { const std::vector array_geometry; }; +// Use to enable 48kHz support in audio processing. Must be provided through the +// constructor. It will have no impact if used with +// AudioProcessing::SetExtraOptions(). +struct AudioProcessing48kHzSupport { + AudioProcessing48kHzSupport() : enabled(false) {} + explicit AudioProcessing48kHzSupport(bool enabled) : enabled(enabled) {} + bool enabled; +}; + static const int kAudioProcMaxNativeSampleRateHz = 32000; // The Audio Processing Module (APM) provides a collection of voice processing