/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_ #define MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_ #include #include #include #include #include "api/array_view.h" namespace webrtc { class AudioBuffer; // The acoustic echo control for mobile (AECM) component is a low complexity // robust option intended for use on mobile devices. class EchoControlMobileImpl { public: EchoControlMobileImpl(); ~EchoControlMobileImpl(); int Enable(bool enable); bool is_enabled() const; // Recommended settings for particular audio routes. In general, the louder // the echo is expected to be, the higher this value should be set. The // preferred setting may vary from device to device. enum RoutingMode { kQuietEarpieceOrHeadset, kEarpiece, kLoudEarpiece, kSpeakerphone, kLoudSpeakerphone }; // Sets echo control appropriate for the audio routing |mode| on the device. // It can and should be updated during a call if the audio routing changes. int set_routing_mode(RoutingMode mode); RoutingMode routing_mode() const; // Comfort noise replaces suppressed background noise to maintain a // consistent signal level. int enable_comfort_noise(bool enable); bool is_comfort_noise_enabled() const; void ProcessRenderAudio(rtc::ArrayView packed_render_audio); int ProcessCaptureAudio(AudioBuffer* audio, int stream_delay_ms); void Initialize(int sample_rate_hz, size_t num_reverse_channels, size_t num_output_channels); static void PackRenderAudioBuffer(const AudioBuffer* audio, size_t num_output_channels, size_t num_channels, std::vector* packed_buffer); static size_t NumCancellersRequired(size_t num_output_channels, size_t num_reverse_channels); private: class Canceller; struct StreamProperties; int Configure(); bool enabled_ = false; RoutingMode routing_mode_; bool comfort_noise_enabled_; std::vector> cancellers_; std::unique_ptr stream_properties_; }; } // namespace webrtc #endif // MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_